Java 리모트 메서드 호출

Java remote method invocation
스터브 스켈레톤오브젝트를 사용하는 Java-RMI의 일반적인 실장 모델.Java 2 SDK, Standard Edition, v1.2에서는 스켈레톤이 필요하지 않습니다.

컴퓨팅에서 Java Remote Method Invocation(Java RMI)은 리모트메서드 호출을 실행하는 Java API로, 리모트프로시저 호출(RPC)과 동등한 오브젝트 지향으로 시리얼화된 Java 클래스의 직접 전송과 분산 가비지 수집을 지원합니다.

원래의 실장은 Java Virtual Machine(JVM; Java 가상 머신) 클래스 표현 메커니즘에 의존하기 때문에 JVM 간에 콜 발신만 지원합니다.이 Java 전용 구현의 기반이 되는 프로토콜을 Java Remote Method Protocol(JRMP)이라고 합니다.비 JVM 컨텍스트에서 실행되는 코드를 지원하기 위해 프로그래머는 나중에 CORBA 버전을 개발했습니다.

RMI라는 용어의 사용은 프로그래밍 인터페이스만을 나타내거나 API와 JRMP, IIOP 또는 기타 구현을 모두 나타낼 수 있습니다.또한 RMI-IOP(읽기: RMI over IIOP)라는 용어는 CORBA 구현을 지원하는 기능의 대부분을 위임하는 RMI 인터페이스를 나타냅니다.

Java RMI, 분산 가비지 컬렉션(DGC) 프로토콜 및 원래 Sun 구현의 기초가 되는 아키텍처의 대부분은 Modula-3의 "네트워크 객체" 기능에서 비롯되었습니다.

일반화 코드

원래 RMI API의 프로그래머는 HTTP 전송과 같은 다양한 구현을 지원하기 위해 코드를 다소 일반화했습니다.또한 RMI 인터페이스와 호환되도록 CORBA에 "값별" 인수를 전달하는 기능이 추가되었습니다.다만, RMI-IIOP 와 JRMP 의 실장에는, 완전히 같은 인터페이스가 없습니다.

RMI 기능은 패키지에 포함되어 있습니다.java.rmiSun의 실장 대부분은,sun.rmi패키지.Java 5.0 이전 버전의 Java에서는 개발자는 별도의 컴파일 단계에서 RMI 스탭을 컴파일해야 했습니다.rmic. Java 버전 5.0 이후에는 이 단계가 필요하지 않습니다.

지니 버전

Jini는 Java에서 고급 버전의 RMI를 제공합니다.기능은 비슷하지만 분산 개체 애플리케이션에 [1]대한 고급 보안, 개체 검색 기능 및 기타 메커니즘을 제공합니다.

다음 클래스는 메시지를 표시하는 RMI를 사용하여 단순한 클라이언트-서버 프로그램을 구현합니다.

RmiServer class : RMI 요구를 리슨하고 클라이언트가 리모트메서드를 호출하기 위해 사용하는 인터페이스를 실장합니다.

수입품 java.rmi.명명; 수입품 java.rmi.Remote Exception; 수입품 java.rmi.server.유니캐스트 리모트 오브젝트; 수입품 java.rmi.discloss.*;  일반의 학급 RmiServer 확장 유니캐스트 리모트 오브젝트 용구 RmiServerIntf {     일반의 정적인 최종 스트링 메세지 = '헬로 월드';      일반의 RmiServer() 던지다 Remote Exception {         잘 하는 군요(0); // 'rmic' 단계를 피하기 위해 필요(아래 참조)     }      일반의 스트링 get Message() {         돌아가다 메세지;     }      일반의 정적인 공백 주된(스트링 args[]) 던지다 예외. {         시스템..나가..인쇄("RMI 서버 시작");          해라 { //레지스트리 작성용 특수 예외 핸들러             레지스트리의 위치 확인.create Registry(레지스트리 생성)(1099);             시스템..나가..인쇄("Java RMI 레지스트리가 생성되었습니다.");         } 또 만나 (Remote Exception e) {             //아무것도 하지 않습니다.에러는 레지스트리가 이미 존재함을 의미합니다.             시스템..나가..인쇄("Java RMI 레지스트리가 이미 존재합니다.");         }                     //RmiServer 인스턴스화         RmiServer 서버 = 신규 RmiServer();          // 이 개체 인스턴스를 "RmiServer" 이름으로 바인딩합니다.         명명.리바인드("//localhost/RmiServer", 서버);         시스템..나가..인쇄("PeerServer가 레지스트리에 바인딩됨");     } } 

RmiServerIntf interface : 클라이언트가 사용하고 서버에 의해 구현되는 인터페이스를 정의합니다.

수입품 java.rmi.원격의; 수입품 java.rmi.Remote Exception;  일반의 인터페이스 RmiServerIntf 확장 원격의 {     스트링 get Message() 던지다 Remote Exception; } 

RmiClient class : 서버에 존재하는 리모트오브젝트에 대한 참조(프록시)를 취득하여 메시지를 받기 위해 메서드를 호출하는 클라이언트입니다.서버 객체가 java.io을 구현한 경우.java.rmi 대신 시리얼 가능.리모트에서는, 시리얼화되어 클라이언트에 [2]값으로서 건네집니다.

수입품 java.rmi.명명;  일반의 학급 RmiClient {     일반의 정적인 공백 주된(스트링 args[]) 던지다 예외. {         RmiServerIntf 서버 = (RmiServerIntf)명명.찾다("//localhost/RmiServer");         시스템..나가..인쇄(서버.get Message());     } } 

이 예를 실행하기 전에 사용한 인터페이스의 'stub' 파일을 작성해야 합니다.이 태스크에는 RMI 컴파일러 'rmic'이 있습니다.

  • 주의: "*.java" 파일이 아닌 원격 인터페이스를 구현하여 ".class" 파일에서 stub 파일을 만듭니다.
Rmic RmiServer

참고로 이후 버전 5.0의 J2SE 지원을 동적으로 생성된 스텁 파일이 추가되고, rmic은 오직 제공하기 위한 호환성과 함께 생활하는 초창기 runtimes,[3]거나 프로그램은 그렇지 제공하는 명확한 포트 번호(또는 0)때 수출하는 원격 개체,는 것이 필요하지 않기 위해 창출된 남는 기술된 대로의.네.vadoc for Unicast Remote Object.위 컨스트럭터의 코멘트를 참조해 주세요.

레퍼런스

  1. ^ Taylor, Ian J (2005). From P2P to Web Services and Grids : Peers in a Client/Server World. Computer Communications and Networks. London: Springer-Verlag. doi:10.1007/b138333. ISBN 1852338695. OCLC 827073874.[페이지 필요]
  2. ^ Wilson, M. Jeff (November 10, 2000). "Get smart with proxies and RMI". JavaWorld. Retrieved 2020-07-18.
  3. ^ "Java RMI Release Notes". Oracle. Retrieved 9 May 2012.

외부 링크