01.JAVA/Java2008. 12. 15. 15:09
반응형
  RMI 원격 서비스(서버측 서비스)만들기

 1. 원격 인터페이스를 만든다

 : 원격 인터페이스(interface)는 쉽게말하면 서버와 클라이언트간의 규약을 만드는것이라 할 수 있다. 인터페이스를 만들어놓고, 서버측, 클라이언트측모두 이 인테페이스를 사용 하게 만든다면 효과적으로 메소드들을 연계시킬 수 있을 것이다.

<예제파일 : MyRemote.java>

1) java.rmi.Remote를 확장한 인터페이스를 만든다. 이때, Remote는 '표지' 인터페이스로서,  아무런 메소드도 가지고 있지 않다. 이 인터페이스를 확장해서 자신만의 인터페이스를 만든다

      


2) 서버측이 구현하고, 클라이언트측이 실행시킬 메소드를 만든다. 이때, 모든 메소드들이 RemoteException을 던지도록 선언해 주어야만 한다

      

* 여기서는 예제로 sayHello라는 메소드를 사용할것임을 알 수 있다.

2. 원격 인터페이스를 구현한 클래스를 만든다

: 서버측에서는 방금전에 만든 인터페이스를 확장한 클래스를 만들어야 하며, 이 클래스 내부에 우리가 서비스해줄 메소드가 들어있다.

<예제파일 : MyRemoteImpl.java>

1) 인터페이스와 메소드를 구현한다. 이때, 이 파일이 원격서비스 객체역할을 하려면 객체 자체에 원격으로 돌아가는 역할에 관한 내용을 포함하고 있어야 하며, 이를위해 Unicast-RemoteObject를 확장하게 된다.

* UnicastRemoteObject는 Java.rmi.server패키지 내부에 있다.
   
2) RemoteException을 선언하는 생성자를 만들어준다. 이는 이 클래스의 상위클래스인 Unicast-Remote의 생성자에서 Exception을 발생시키기 때문이며, MyRemoteImpl은 이를 구현한 클래스이므로 역시 생성자에서 동일한 작업을 실시해 주어야 한다.
   

3) 서비스를 RMI레지스트리에 등록 합니다. 반드시 서비스가 RMI레지스트리에 등록되어야 하는데 이를 위해서 java.rmi.Naming 클래스의 rebind() 메소드를 이용한다. 아래 그림은 서비스에 Remote_Hello라는 이름을 붙여주고, 이를 RMI레지스트리에 등록하는 작업을 나타낸다.

   

 
 
3. 두개의 파일을 컴파일하여 .class파일을 생성한다. 컴파일 과정은 생략하며 이번 예제에서는 패키지를 사용하지 않았다.
   

4. rmic를 이용해 stub, skelecton을 만든다

: 이제 서비스 보조객체인 스터브와 스켈렉톤을 생성한다. 이때 생성되는 스터브와 스켈렉톤은  MyRemoteImpl에 관한 것이므로 모든 작업은 클래스 파일을 접근할 수 있는 위치에서 이루어 져야 한다.


1) 명령행에서 MyRemoteImpl이 있는 폴더로 이동한다

   


2) rmic명령어를 실행시켜 스터브와 스켈렉톤을 만든다   

  

 
3) 만들어진 스터브와 스켈렉톤을 확인한다

   

5. RMI레지스트리를 시작한다
1) rmiregistry명령어를 이용해 RMI레지스트리를 실행시킨다.
   
* RMI레지스트리를 실행시키면 대기상태처럼 커서가 계속 깜박거리고있다.
   혹시, 아무런 반응이 없다고 끄지 마시길 바란다..
 
 
6. 원격 서비스를 시작한다
1) 다른창을 열고 평소처럼 java명령어를 이용해 원격 서비스를 실행한다

   

* 이때도 역시, 실행시키면 커서가 계속 깜박거리고있다. 절대로 끄면 안된다..

7. 주의사항

: 여기서 우리는 엄청난 사실을 발견하게 된다. 4-2)rmic실행시 stub는 생성되었으나 skelecton은 생성되지 않은것이다. 왜일까... rmic명령어에 관한걸 좀더 알아보기 위해서 명령어창에 rmic 만을 쳐보자. 그러면 아래와 같은 도움말 창이 뜨게된다.

1) 1.2버전으로 오면서 default값이 stub만 생성하는것으로 바뀐것을 알 수 있다. 즉, 1.2버전에서 skelecton은 필요가 없어졌다.

2) -v1.1옵션을 사용하면 1.1버전의 stub/skelecton을 만들 수 있는것을 알 수 있다.

3) -vcompat옵션을 사용하여 1.2에서 1.1호환버전의 skelecton을 생성할 수 있음을 알 수 있다.

 

Posted by 1010