JavaTM 2 Platform
Standard Ed. 5.0

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

RMI コネクタサーバは、RMIConnectorServer のインスタンスを照会しても作成できます。この照会は、明示的に行なっても 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 実行時、コネクタクライアントの場合は connect 実行時に確立されます。java.naming.corba.orb 属性が環境 Map に含まれる場合、IIOP スタブの接続にはこの属性値 (ORB) が使用されます。それ以外の場合、org.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 に渡される場合、ここで説明した機構は適用されません。

関連項目:
JavaTM Remote Method Invocation (RMI), Java Naming and Directory InterfaceTM (JNDI), RFC 2045, section 6.8, "Base64 Content-Transfer-Encoding"

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。