오라클자바커뮤니티에서
설립한 개발자실무교육6년차 오엔제이프로그래밍 실무교육센터
(신입사원채용무료교육, 오라클, SQL, 튜닝, 자바, 스프링, Ajax, jQuery, 안드로이드, 아이폰, 닷넷, C#,
ASP.Net) www.onjprogramming.co.kr
•분산
객체를 사용하는 것은 이 분산객체(원격으로
서비스를 제공하는 객체)를
통해 원격의 클라이언트에 제공 하고자 하는 서비스(메소드)가
있을 것이다.
•원격
인터페이스는 클라이언트가
원격으로 호출 할 메소드
즉 원격 메소드를
정의하는
것이다.
•원격
객체가 구현 할 인터페이스 이다.
•java.rmi.Remote
인터페이스를
직/간접적으로
상속해야 한다.(보통
직접 상속 한다.)
•원격
인터페이스에서 정의한 모든
메소드는
java.rmi.RemoteException이나
부모클래스(java.io.IOException,
java.lang.Exception)을
throws
해야
한다.(RMI
스펙에는
RemoteException을
throws
하도록
권고 한고 있다.)
public
interface Hello extends java.rmi.Remote
{
public String sayHello(String
name) throws java.rmi.RemoteException;
}
•RMI
서버
Application은
원격 인터페이스 구현 클래스의 인스턴스를
생성하여 이를 rmiregistry에
이름으로 등록
한다.
•원격
객체는 자신을 원격의 클라이언트가 접근 할 수 있도록 등록 할 수 있어야 하며 클라이언트에서 원격 메소드
요청이 발생 했는지 지속적으로 모니터링 할 수 있어야 한다.
아쉽게도
원격 인터페이스에는 이러한 기능은 정의되지 않았다.
•HelloImpl
객체가
원격 객체로
작동 할 수 있는것은
원격메소드를
구현해서가 아니라 java.rmi.server.UnicastRemoteObject를
상속했기 때문이다.
•java.rmi.server.Remote,
java.rmi.server.RemoteServer
클래스에서
정의하는 기능을 가져야 한다.
- java.rmi.server.Remote,
java.rmi.server.RemoteServer
클래스에서
정의하는 기능을 가져야 한다.
- 원격객체는
RMI
스펙에서
제안하는 규격에 맞게 java.lang.Object에서
상속한 hashCode,
equals, toString
메소드를
재정의 할 필요가 있으며 원격객체임을 RMI
시스템에
알리고 자신을 원격 객체로 rmiregistry에
등록 할 수 있어야 한다.
-
- RemoteObject
클래스는
hashCode,
equals, toString을
RMI에
맞게 재정의 하고 있으며 RemoteServer
클래스는
원격 클라이언트에서 오는 원격 메소드
호출을 처리하는 기능을 정의 하고 있다.
- 이
두개의 클래스 RemoteObject와
RemoteServer의
기능을 동시에 가지고 있는 클래스가 UnicastRemoteObject 클래스이며
일반적으로 원격 인터페이스를 구현한 클래스(RMI
원격
객체 클래스)는
UnicastRemoteObject를
상속한다.
그러나
반드시 상속해야 하는 것은 아니며 기능을 구현한 다른 클래스를 상속해도 무방하다.
•원격
객체 기능 구현을 위해 java.rmi.server.RemoteObject
클래스를
상속한 경우에는 default
생성자를
반드시 정의 해야 한다.
- UnicastRemoteObject
클래스는
자신의 생성자에서
원격 객체를 등록하는 기능을 정의하고 있다.
댓글 없음:
댓글 쓰기