본문 바로가기
IT 이야기 - About IT

[EJB] RMI 예제

by 회사원 주씨 2008. 8. 1.
반응형

//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을 테스트 한다.

--------------------------------------------------

728x90

'IT 이야기 - About IT' 카테고리의 다른 글

IPS 란?  (0) 2008.08.01
[TUXEDO] 턱시도 오류 정리  (0) 2008.08.01
Server 및 Service 등록  (0) 2008.08.01