본문 바로가기

삽질하기/EJB

RMI 호출 메커니즘

반응형

사용자 삽입 이미지
1. RMI Server에서 원격객체를 생성한다. 이때, RMI 런타임의 내부적인 메커니즘에 의해서 스텁과 스켈레톤 객체가 생성된다. 생성된 스텁 객체는 RMI 원격 객체에 대한 위치 정보(IP, port)와 객체 식별자 정보등을 포함한다.

public HelloImpl() throws RemoteException {
   super();
}


*super()는 내부적으로 exportObject() 메소드를 호출하여 Export한다. Export는 원격 메소드 호출을 위한 준비과정이며 이 과정에서 Stub과 Skeleton이 생성된다.

2. RMI Server는 rmiregistry에 RMI 원격 객체를 약속된 이름으로 등록한다. 이때, rmiregistry에 등록되는 객체는 내부적인 메커니즘에 의해서 원격객체가 아닌 스텁객체가 등록된다.

HelloImpl hello = new HelloImpl();
Naming.rebind("Hello", hello);


3, 4. 클라이언트는 약속된 이름과 위치정보를 통하여 rmiregistry에 접근한다. 그리고 약속된 이름으로 등록된 스텁객체를 찾아 가져온다.

Hello hello = (Hello)Naming.lookup("rmi://" + host + "/Hello");

5. 클라이언트는 전달받은 스텁객체를 원격인터페이스로 형변환하여 원격인터페이스에 정의된 메소드를 호출한다.

hello.yourName(usename);

6. 스텁 객체는 RMI 원격 객체에 대한 위치 정보(IP, port)와 객체 식별자 정보를 통하여 서버에 접속하고 클라이언트가 호출한 메소드와 파라미터 데이타들을 RMI프로토콜에 맞추어서 전송한다.

7. 스텁 객체가 전송한 정보는 네트워크를 통해 스켈레톤 객체에 전달한다.

8, 9. 스켈레톤은 전달받은 정보에 따라 원격 객체로 메소드 호출을 분배한다. 그리고 호출 후 리턴받은 정보를 다시 네트워크를 통해 스텁객체에 전달한다.

10. 스텁객체는 그것을 다시 클라이언트에게 반환해 줌으로서 하나의 호출을 완료한다.

Enterprise Java Beans 강위민저 참고.