2013년 10월 18일 금요일

RMI HelloWorld 자세히

하나의 RMI Application을 작성 하기 위해서는 3~4개 정도의 자바 파일이 필요 하다.
필요한 파일
  - 원격 인터페이스 : 자바 인터페이스
  - 원격 인터페이스를 구현한 클래스 : 클래스
  - RMI 서버 Application : 클래스
  - RMI 클라이언트 Application : 클래스 
 
 
“Hello World” – 원격 인터페이스
 
 
원격 인터페이스는 원격 객체에 대하여 클라이언트가 호출 할 수 있는 비즈니스 메소드를 정의 한다.
클라이언트는 원격 인터페이스에서 정의된 메소드만 서로 다른 실행환경에서 원격으로 호출 할 수 있다.
이렇게 원격에서 호출 가능한 메소드를 “원격 메소드” 라고 한다.
Hello.java에서는 sayHello라는 원격 메소드를 정의 하고 있다.

 
//Hello.java
public interface Hello extends java.rmi.Remote {
  public String sayHello(String name) throws java.rmi.RemoteException;
}
 
 
“Hello World” – 원격 인터페이스를 구현한 클래스
 
 
HelloImpl.java는 원격 인터페이스 Hello를 구현 한 클래스이며 HelloImpl 클래스의 인스턴스가 원격객체로서 RMI 서버에 의해 이름으로 등록 된다.
“Hello World” Application 에서는 java.rmi.UnicastRemoteObject 를 상속하며 원격 이터페이스를 구현하고 있다.
 
 
//HelloImpl.java
import java.rmi.server.*;
import java.rmi.*;
public class HelloImpl extends UnicastRemoteObject implements Hello {
  public HelloImpl() throws RemoteException {
  super();
  }
  //원격 메소드 구현
  public String sayHello(String name) {
  return "Hello World ... " + name + "!";
  }
}
 
 
 
“Hello World” – RMI 서버 Application
 
 
HelloServer.java의 경우 RMI 서버 Application의 기능만을 정의한 단순한 클래스 이다.
HelloImpl 객체를 생성하고 “HelloRemote라는 이름으로 등록하며 이후 RMI 클라이언트에서의 메소드출을 기다린다.
 
 
//HelloServer.java
public class HelloServer {
  public static void main(String[] args) {
     try {
        HelloImpl remoteObj = new HelloImpl();
  java.rmi.Naming.rebind("rmi://localhost:1099/HelloRemote", remoteObj);
        System.out.println("Hello Remote Object bound to the registry and ready to service incoming client calls...");
     }   catch(java.rmi.RemoteException e) {
  System.err.println("Exception occurred during processing incoming method call");
     }  catch(java.net.MalformedURLException e) {

댓글 없음:

댓글 쓰기