Java™ Platform
Standard Edition 7

パッケージ javax.management.remote.rmi

RMI コネクタは、RMI を使ってクライアント要求をリモート MBean サーバーへ転送する、JMX リモート API 用のコネクタです。

参照: 説明

パッケージ 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 コネクタサーバーを作成するには、JMXConnectorServerFactory.newJMXConnectorServer メソッドに RMI コネクタアドレスを指定します。コネクタサーバーの接続先 MBean サーバーも、このメソッドのパラメータとして指定できます。別の方法として、コネクタサーバーを MBean として MBean サーバーに登録することもできます。

RMI コネクタサーバーの作成は、明示的にまたは MBean サーバーの createMBean メソッドを介して、RMIConnectorServer のインスタンスを構築することによって行うこともできます。

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 実行時、コネクタクライアントの場合は connect 実行時に確立されます。java.naming.corba.orb 属性が環境 Map に含まれる場合、IIOP スタブの接続にはその値 (ORB) が使用されます。それ以外の場合、org.omg.CORBA.ORB.init((String[])null,(Properties)null) が呼び出され、新しい org.omg.CORBA.ORB が作成されます。同じ JVM 内の後続の RMI コネクタクライアントまたはサーバーはこの ORB を再利用することも、同じ方法でもうひとつ作成することもできます。

指定された java.naming.corba.orb 属性が ORB をポイントしていない場合、IllegalArgumentException がスローされます。

IIOP リモートオブジェクト (スタブまたはサーバー) が手動で作成され、ORB に接続されたあと RMIConnector および RMIConnectorServer に渡される場合、ここで説明したメカニズムは適用されません。

コードの動的ダウンロード

RMI コネクタクライアントまたはサーバーがそのピアから未知のクラスのインスタンスを受信した場合、RMI 接続でコードの動的ダウンロードが有効になっているときは、ピアによって指定されたコードベースからクラスをダウンロードできます。詳細については、「Java RMI の使用による動的なコードのダウンロード」を参照してください。

導入されたバージョン:
1.5
関連項目:
JavaTM Remote Method Invocation (RMI), Java Naming and Directory InterfaceTM (JNDI), RFC 2045 セクション 6.8「Base64 Content-Transfer-Encoding」
Java™ Platform
Standard Edition 7

バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.