1. 원격 인터페이스를 만든다
: 원격 인터페이스(interface)는 쉽게말하면 서버와 클라이언트간의 규약을 만드는것이라 할 수 있다. 인터페이스를 만들어놓고, 서버측, 클라이언트측모두 이 인테페이스를 사용 하게 만든다면 효과적으로 메소드들을 연계시킬 수 있을 것이다.
<예제파일 : MyRemote.java>
1) java.rmi.Remote를 확장한 인터페이스를 만든다. 이때, Remote는 '표지' 인터페이스로서, 아무런 메소드도 가지고 있지 않다. 이 인터페이스를 확장해서 자신만의 인터페이스를 만든다
2) 서버측이 구현하고, 클라이언트측이 실행시킬 메소드를 만든다. 이때, 모든 메소드들이 RemoteException을 던지도록 선언해 주어야만 한다
* 여기서는 예제로 sayHello라는 메소드를 사용할것임을 알 수 있다.
2. 원격 인터페이스를 구현한 클래스를 만든다
: 서버측에서는 방금전에 만든 인터페이스를 확장한 클래스를 만들어야 하며, 이 클래스 내부에 우리가 서비스해줄 메소드가 들어있다.
<예제파일 : MyRemoteImpl.java>
1) 인터페이스와 메소드를 구현한다. 이때, 이 파일이 원격서비스 객체역할을 하려면 객체 자체에 원격으로 돌아가는 역할에 관한 내용을 포함하고 있어야 하며, 이를위해 Unicast-RemoteObject를 확장하게 된다.
3) 서비스를 RMI레지스트리에 등록 합니다. 반드시 서비스가 RMI레지스트리에 등록되어야 하는데 이를 위해서 java.rmi.Naming 클래스의 rebind() 메소드를 이용한다. 아래 그림은 서비스에 Remote_Hello라는 이름을 붙여주고, 이를 RMI레지스트리에 등록하는 작업을 나타낸다.
4. rmic를 이용해 stub, skelecton을 만든다
: 이제 서비스 보조객체인 스터브와 스켈렉톤을 생성한다. 이때 생성되는 스터브와 스켈렉톤은 MyRemoteImpl에 관한 것이므로 모든 작업은 클래스 파일을 접근할 수 있는 위치에서 이루어 져야 한다.
1) 명령행에서 MyRemoteImpl이 있는 폴더로 이동한다
2) rmic명령어를 실행시켜 스터브와 스켈렉톤을 만든다
* 이때도 역시, 실행시키면 커서가 계속 깜박거리고있다. 절대로 끄면 안된다..
: 여기서 우리는 엄청난 사실을 발견하게 된다. 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을 생성할 수 있음을 알 수 있다.