JavaTM Platform
Standard Ed. 6

패키지 javax.management.remote.rmi

RMI 연결기는, RMI 를 사용해 클라이언트 요구를 원격 MBean 서버에 전송 하는, JMX 원격 API용의 연결기입니다.

참조처:
          설명

인터페이스의 개요
RMIConnection 클라이언트로부터 서버측의 MBeanServer 구현에 MBeanServer 요구를 송신하기 위해서 사용되는 RMI 객체입니다.
RMIServer RMI 연결기와의 접속의 확립에 사용되는 RMI 객체입니다.
 

클래스의 개요
RMIConnectionImpl RMIConnection 인터페이스의 구현입니다.
RMIConnectionImpl_Stub  
RMIConnector 원격 RMI 연결기에의 접속입니다.
RMIConnectorServer 원격 클라이언트로부터의 RMI 베이스의 접속을 작성하는 JMX API 연결기 서버입니다.
RMIIIOPServerImpl IIOP 로부터 export 되어 IIOP 로부터 export 된 RMI 객체로서 클라이언트 접속을 작성하는 RMIServerImpl 입니다.
RMIJRMPServerImpl JRMP 로부터 export 되어 JRMP 로부터 export 된 RMI 객체로서 클라이언트 접속을 작성하는 RMIServer 객체입니다.
RMIServerImpl 연결기 서버를 나타내는 RMI 객체입니다.
RMIServerImpl_Stub  
 

패키지 javax.management.remote.rmi 의 설명

RMI 연결기는, RMI 를 사용해 클라이언트 요구를 원격 MBean 서버에 전송 하는, JMX 원격 API용의 연결기입니다. 이 패키지에서는, RMI 연결기의 사용자가, 클라이언트측 및 서버측에서 직접 참조할 필요가 있는 클래스를 정의합니다. 사용자가 직접 참조하지 않는 클래스도 정의합니다만, 이러한 클래스는, RMI 연결기의 구현이 다른 경우도 상호 운용할 수 있도록(듯이) 정의할 필요가 있습니다.

RMI 연결기는, RMI 의 JRMP 및 IIOP 트랜스폴트를 지원합니다.

JMX 원격 API 의 대부분의 연결기와 같게, RMI 도 주소로서 JMXServiceURL 를 가지고 있는 것이 보통입니다. 이 주소의 프로토콜 부분은, 디폴트의 RMI 트랜스폴트 (JRMP)를 사용하는 연결기의 경우 rmi, RMI/IIOP 를 사용하는 연결기의 경우 iiop 가 됩니다.

RMI 연결기 주소에는, 다음의 2 개의 형식이 있습니다.

주소의 자세한 것은 이하로 설명합니다.

RMI 연결기 서버의 작성

일반적으로, RMI 연결기 서버를 작성하려면 ,javax.management.remote.JMXConnectorServerFactory#newJMXConnectorServerJMXConnectorServerFactory.newJMXConnectorServer 메소드에 RMI 연결기 주소를 지정합니다. 연결기 서버의 접속처 MBean 서버도, 이 메소드의 파라미터로서 지정할 수 있습니다. 다른 방법으로서 연결기 서버를 MBean 로서 MBean 서버에 등록하는 방법도 있습니다.

RMI 연결기 서버는,javax.management.remote.rmi.RMIConnectorServerRMIConnectorServer 의 인스턴스를 조회해도 작성할 수 있습니다. 이 조회는, 명시적으로 행해도 MBean 서버의 createMBean메소드를 개입시켜 행해도 괜찮습니다.

RMI 트랜스폴트의 선택

RMI 트랜스폴트 (JRMP 또는 IIOP)를 선택하려면 , 연결기 서버의 작성시에,serviceURLprotocol 부분에 rmi 또는 iiop를 지정합니다. RMIServerImpl 의 적절한 서브 클래스를 인스턴스화해,RMIConnectorServer생성자 으로 지정하는 것에 의해, 특별한 연결기 서버를 작성할 수도 있습니다.

서버에 의해 생성된 연결기 주소

지정한 serviceURL 의 URL 패스가 빈 상태(empty)의 경우(옵션의 호스트와 포트에 계속되는 부분), 또는 serviceURL를 지정하지 않았던 경우, 연결기 서버에 의해, 클라이언트가 접속을 위해서(때문에) 사용할 수 있는 새로운 JMXServiceURL가 작성됩니다.

사용자 지정의 serviceURL 내의 host는 옵션입니다. 존재하는 경우, 생성된 JMXServiceURL에 카피됩니다만, 존재하지 않는 경우는 무시됩니다. 존재하지 않는 경우, 생성된 JXMServiceURL는 로컬 호스트명을 가집니다.

사용자 지정의 serviceURL 내의 port도 옵션입니다. 존재하는 경우, 생성된 JMXServiceURL에 카피됩니다. 존재하지 않는 경우, 생성된 JMXServiceURL 는 포트를 가지지 않습니다. rmi프로토콜을 사용하는 serviceURL 에서는,port가 존재하는 경우, 생성된 원격 객체가 export 되는 포트를 나타냅니다. 그 이외의 영향은 없습니다.

사용자가 JMXServiceURL 는 아니고 RMIServerImpl을 지정했을 경우, 생성된 JMXServiceURLhost부분에 로컬 호스트명이 들어갑니다. port 부분은 없습니다.

디렉토리 엔트리에 근거하는 연결기 주소

연결기 서버의 작성시로 지정되는 serviceURL 주소에는, 생성된 주소 (상기) 대신에, 지정 또는 생성된 RMIServerStub의 포함처가 되는 「디렉토리 주소」를 지정할 수도 있습니다. 이 경우, 클라이언트에서도 서버로도, 이 디렉토리 주소가 사용됩니다.

이 경우,serviceURL 는 다음의 몇개의 형식을 취합니다.

    service:jmx:rmi://host:port/jndi/jndi-name
    service:jmx:iiop://host:port/jndi/jndi-name
    

jndi-name 는,javax.naming.InitialContext.bind 로 지정 가능한 캐릭터 라인입니다.

여기에서도,host:port는 생략 가능합니다.

연결기 서버는, 프로토콜 (rmi 또는 iiop)에 근거해 RMIServerImpl를 생성합니다. rmi 의 경우,port가 지정되고 있으면 사용됩니다. 연결기 서버는, 기동시에,toStub 메소드를 사용해 이 객체로부터 Stub를 파생해, 지정된 jndi-name를 사용해 객체를 포함합니다. 예의 같게, JNDI API. 에 의해 정의된 프로퍼티이 조회됩니다.

예를 들어, 다음과 같은 JMXServiceURL 의 경우:

      service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
      
연결기 서버는 RMIJRMPServerImpl 를 생성해, 아래와 같이 JNDI명을 사용해 그 Stub를 포함합니다.
      rmi://myhost/myname
      
이것은, 호스트 myhost 의 디폴트 포트로 실행되고 있는 RMI 레지스트리내의 엔트리 myname입니다. RMI 레지스트리는, 로컬 호스트로부터의 접속을 허가할 뿐입니다. 따라서, 이 경우,myhost는, 연결기 서버가 실행되고 있는 호스트의 이름이 됩니다.

JMXServiceURL 에서는, 최초의 rmi:로 RMI 연결기, 2 번째의 rmi:로 RMI 레지스트리가 지정되고 있습니다.

이제(벌써) 1 개(살)예를 듭니다. 다음과 같은 JMXServiceURL 의 경우:

      service:jmx:iiop://ignoredhost/jndi/ldap://dirhost:9999/cn=this, ou=that
      
연결기 서버는 RMIIIOPServerImpl 를 생성해, 아래와 같이 JNDI명을 사용해 그 Stub를 포함합니다.
      ldap://dirhost:9999/cn=this, ou=that
      
이것은, 호스트 dirhost 의 포트 9999 로 실행되고 있는 LDAP 디렉토리내의 엔트리 cn=this, ou=that 입니다.

다음과 같은 JMXServiceURL 의 경우:

      service:jmx:iiop://ignoredhost/jndi/cn=this, ou=that
      
연결기 서버는 RMIIIOPServerImpl 를 생성해, 아래와 같이 JNDI명을 사용해 그 Stub를 포함합니다.
      cn=this, ou=that
      
이 경우, JNDI API 를 적절히 구성해, 사용하는 디렉토리의 정보를 지정할 필요가 있습니다.

이러한 예에서는, 연결기 서버, 연결기 클라이언트 모두, 호스트명 ignoredhost를 사용하지 않습니다. 이 호스트명은 생략 가능합니다. 다음의 예를 참조해 주세요.

      service:jmx:iiop:///jndi/cn=this, ou=that
      

그런데도, 연결기 서버가 실행되고 있는 호스트의 이름을 사용하는 것을 추천합니다. 일반적으로, 이 호스트명은, 디렉토리 호스트명과는 다릅니다.

연결기 서버 속성

디폴트의 JRMP 트랜스폴트의 사용시는,RMIConnectorServer 생성자 의 environmentjmx.remote.rmi.client.socket.factoryjmx.remote.rmi.server.socket.factory속성을 사용해, RMI 소켓 팩토리를 지정할 수 있습니다. 이러한 속성의 값은, 각각 RMIClientSocketFactory 형 또는 RMIServerSocketFactory 형이 아니면 안됩니다. 이러한 팩토리는, 연결기에 관련지을 수 있었던 RMI 객체를 작성할 때 사용됩니다.

RMI 연결기 클라이언트의 작성

일반적으로, RMI 연결기 클라이언트의 구축에는,JMXConnectorFactory 와 프로토콜 rmi또는 iiop 를 가지는 JMXServiceURL 를 사용합니다.

JMXServiceURL 가 서버로 생성되었을 경우 (상기의「서버에 의해 생성된 연결기 주소」를 참조), 클라이언트는, 이 URL를 직접 또는 간접적으로 서버로부터 취득할 필요가 있습니다. 일반적으로, 서버는,JMXServiceURL를 사용 가능하게 하기 위한(해), 이 URL 를 파일 또는 검색 서비스에 포함합니다.

JMXServiceURL 가 디렉토리 구문을 사용하는 경우 (상기의「디렉토리 엔트리에 근거하는 연결기 주소」를 참조), 이것은 클라이언트에 제공됩니다. 또는, 클라이언트와 서버의 양쪽 모두가 어느 디렉토리 엔트리를 사용해야할 것인가를 인식하고 있습니다. 예를 들어, Whatsit 에이전트의 연결기 서버는, 호스트 myhost 상의 RMI 레지스트리에 포함되고 있는 엔트리 whatsit-agent-connector를 사용한다고 합니다. 이 경우, 클라이언트와 서버의 양쪽 모두가 아래와 같은 적절한 JMXServiceURL를 인식할 수 있습니다.

    service:jmx:rmi:///jndi/rmi://myhost/whatsit-agent-connector
    

RMI Stub의 형태가 RMIServer 인 경우는,RMIConnector 의 적절한 생성자 을 사용해 직접 RMI 접속을 구축할 수 있습니다.

RMI/IIOP 연결기의 ORB 의 지정

IIOP 트랜스폴트를 사용하는 경우, 클라이언트와 서버는, 속성 java.naming.corba.orb를 사용해, 사용하는 ORB 를 지정할 수 있습니다. ORB 와의 접속은, 연결기 서버의 경우는 start 실행시, 연결기 클라이언트의 경우는 javax.management.remote.rmi.RMIConnector#connect(java.util.Map) connect 실행시에 확립됩니다. java.naming.corba.orb 속성이 환경 Map에 포함되는 경우, IIOP Stub의 접속에는 이 속성치 (ORB )가 사용됩니다. 그 이외의 경우,org.omg.CORBA.ORBorg.omg.CORBA.ORB.init((String[]) null, (Properties) null) 가 불려 가 새로운 org.omg.CORBA.ORB 가 작성됩니다. 이 ORB 는, 같은 JVM 내의 후속의 RMI 연결기 클라이언트 또는 서버로 재사용할 수 있습니다.

같은 순서로 새로운 ORB 를 작성할 수도 있습니다. 지정된 java.naming.corba.orb 속성이 ORB 를 포인트 하고 있지 않는 경우,IllegalArgumentException 가 throw 됩니다.

IIOP 원격 객체 (Stub 또는 서버)가 수동으로 작성되어 ORB 에 접속된 뒤 RMIConnector 및 RMIConnectorServer 에게 건네지는 경우, 여기서 설명한 기구는 적용되지 않습니다.

코드의 동적 다운로드

RMI 연결기 클라이언트 또는 서버가 그 피어로부터 미지의 클래스의 인스턴스를 수신했을 경우, RMI 접속으로 코드의 동적 다운로드가 유효하게 되어 있을 때는, 피어에 의해 지정된 코드 베이스로부터 클래스를 다운로드할 수 있습니다. 상세한 것에 대하여는,「Dynamic code downloading using Java RMI」를 참조해 주세요.

도입된 버젼:
1.5
관련 항목:
JavaTM Remote Method Invocation (RMI) , Java Naming and Directory InterfaceTM (JNDI), RFC 2045, section 6.8, "Base64 Content-Transfer-Encoding"

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.