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 からエクスポートされ、IIOP からエクスポートされた RMI オブジェクトとしてクライアント接続を作成する RMIServerImpl です。
RMIJRMPServerImpl JRMP からエクスポートされ、JRMP からエクスポートされた 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 パスが空の場合(オプションのホストとポートに続く部分)、または serviceURLを指定しなかった場合、コネクタサーバーにより、クライアントが接続のために使用できる新しい JMXServiceURLが作成されます。

ユーザー指定の serviceURL 内の hostはオプションです。存在する場合、生成された JMXServiceURLにコピーされますが、存在しない場合は無視されます。存在しない場合、生成された JXMServiceURLはローカルホスト名を持ちます。

ユーザー指定の serviceURL 内の portもオプションです。存在する場合、生成された JMXServiceURLにコピーされます。 存在しない場合、生成された JMXServiceURL はポートを持ちません。rmiプロトコルを使用する serviceURL では、portが存在する場合、生成されたリモートオブジェクトがエクスポートされるポートを示します。それ以外の影響はありません。

ユーザーが JMXServiceURL ではなく RMIServerImplを指定した場合、生成された JMXServiceURLhost部分にローカルホスト名が入ります。port 部分はありません。

ディレクトリエントリに基づくコネクタアドレス

コネクタサーバーの作成時に指定される serviceURL アドレスには、生成されたアドレス (上記)の代わりに、指定または生成された RMIServerスタブの格納先となる「ディレクトリアドレス」を指定することもできます。この場合、クライアントでもサーバーでも、このディレクトリアドレスが使用されます。

この場合、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メソッドを使ってこのオブジェクトからスタブを派生し、指定された jndi-nameを使ってオブジェクトを格納します。例のように、JNDI API. によって定義されたプロパティーが照会されます。

たとえば、次のような JMXServiceURL の場合:

      service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
      
コネクタサーバーは RMIJRMPServerImpl を生成し、下記 JNDI名を使ってそのスタブを格納します。
      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名を使ってそのスタブを格納します。
      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名を使ってそのスタブを格納します。
      cn=this,ou=that
      
この場合、JNDI API を適切に構成して、使用するディレクトリの情報を指定する必要があります。

これらの例では、コネクタサーバー、コネクタクライアントともに、ホスト名 ignoredhostを使用しません。このホスト名は省略可能です。 次の例を参照してください。

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

それでも、コネクタサーバーが実行されているホストの名前を使用することをお勧めします。通常、このホスト名は、ディレクトリホスト名とは異なります。

コネクタサーバー属性

デフォルトの JRMP トランスポートの使用時は、RMIConnectorServer コンストラクタの environmentjmx.remote.rmi.client.socket.factory および jmx.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 スタブの型が 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 スタブの接続にはこの属性値 (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 がスローされます。

IIOP リモートオブジェクト (スタブまたはサーバー) が手動で作成され、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 も参照してください。