//Echo.java
//원격 인터페이스
import java.rmi.*;
public interface Echo extends Remote{
//비즈니스 추상 메서드
public String say(String message) throws RemoteException;
}
-------------------------------------------------
//EchoImpl.java
//원격 객체 -- 비즈니스 메서드를 가지고 있는 클래스
import java.rmi.*;
import java.rmi.server.*;
public class EchoImpl extends UnicastRemoteObject implements Echo
{
//항상 디폴트 생성자를 명시
public EchoImpl() throws RemoteException{
}
public String say(String message) throws RemoteException{
return "*****Hi rmi*****" + message;
}
};
------------------------------------------------
//EchoServer.java
//원격객체를 네이밍 서비스에 등록 시키는 역할
import java.rmi.*;
public class EchoServer
{
public static void main(String args[]){
//원격객체를 생성
try{
EchoImpl echo = new EchoImpl();
System.out.println("원격객체생성");
Naming.rebind("echo", echo); // Remote Object를 naming server에 등록시킴
System.out.println("네이밍 서버에 등록!");
}catch(Exception e){
e.printStackTrace();
}
}
};
----------------------------------------------------------------
//EchoClient.java
// 네이밍서버로부터 원격객체의 스텁을 리턴 받아
// rmi 서버의 비즈니스 메서드를 호출
import java.rmi.*;
public class EchoClient
{
public static void main(String args[]){
try{
Echo echo = (Echo)Naming.lookup("rmi://127.0.0.1/echo");
// 리턴타입은 Object이기때문에 Echo로 캐스팅
System.out.println("네이밍서버로부터 원격객체 리턴!");
String m = echo.say("안녕~");
System.out.println(m);
}catch(Exception e){
e.printStackTrace();
}
}
};
-------------------------------------------------------
실행방법!
모든 파일이 c:\RMI 폴더아래에 저장되어있다.
c:\RMI>javac *.java //모든파일 컴파일
C:\RMI>rmic EchoImpl // rmic로 컴파일
C:\RMI>start rmiregistry
=> 다른창 다시 실행
서버실행
C:\RMI>dir
C 드라이브의 볼륨에는 이름이 없습니다.
볼륨 일련 번호: 3855-A059
C:\RMI 디렉터리
2005-04-06 오전 11:15 <DIR> .
2005-04-06 오전 11:15 <DIR> ..
2005-04-06 오전 11:15 220 Echo.class
2005-04-06 오전 10:37 182 Echo.java
2005-04-06 오전 10:37 157 Echo.java.bak
2005-04-06 오전 11:19 763 EchoClient.class
2005-04-06 오전 11:19 501 EchoClient.java
2005-04-06 오전 11:09 501 EchoClient.java.bak
2005-04-06 오전 11:15 558 EchoImpl.class
2005-04-06 오전 10:42 373 EchoImpl.java
2005-04-06 오전 10:42 375 EchoImpl.java.bak
2005-04-06 오전 11:15 1,736 EchoImpl_Skel.class
2005-04-06 오전 11:15 3,252 EchoImpl_Stub.class
2005-04-06 오전 11:15 690 EchoServer.class
2005-04-06 오전 10:56 451 EchoServer.java
2005-04-06 오전 10:48 406 EchoServer.java.bak
14개 파일 10,165 바이트
2개 디렉터리 15,193,800,704 바이트 남음
C:\RMI>java EchoServer
원격객체생성
네이밍 서버에 등록!
=> 다른창 다시 실행
클라이언트
C:\RMI>java EchoClient
네이밍서버로부터 원격객체 리턴!
*****Hi rmi*****안녕~
----------------------------------------------------------------
RMI 아키텍처 구현 순서는 대략
1. interface를 만든다.
2. 서비스를 해줄 class를 만든다.
3. Server program을 만든다.
4. client program을 작성한다.
5. 각 class들을 compile한다.
6. stub와 skeleton을 만든다.
7. program을 테스트 한다.
--------------------------------------------------
'IT 이야기 - About IT' 카테고리의 다른 글
IPS 란? (0) | 2008.08.01 |
---|---|
[TUXEDO] 턱시도 오류 정리 (0) | 2008.08.01 |
Server 및 Service 등록 (0) | 2008.08.01 |