|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のパッケージ 次のパッケージ | フレームあり フレームなし | |||||||||
参照先:
説明
| インタフェースの概要 | |
|---|---|
| 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 | |
RMI コネクタは、RMI を使ってクライアント要求をリモート MBean サーバーへ転送する、JMX リモート API用のコネクタです。このパッケージでは、RMIコネクタのユーザーが、クライアント側およびサーバー側で直接参照する必要があるクラスを定義します。ユーザーが直接参照しないクラスも定義しますが、これらのクラスは、RMI コネクタの実装が異なる場合も相互運用できるように定義する必要があります。
RMI コネクタは、RMI の JRMP および IIOP トランスポートをサポートします。
JMX リモート API のほとんどのコネクタと同様に、RMI もアドレスとして JMXServiceURLを持っているのが普通です。このアドレスのプロトコル部分は、デフォルトの RMI トランスポート (JRMP) を使用するコネクタの場合 rmi、RMI/IIOP を使用するコネクタの場合 iiop になります。
RMI コネクタアドレスには、次の 2 つの形式があります。
javax.management.remote.rmi.RMIServerRMIServer 型 Java オブジェクトである。このアドレス形式を使用して、URL 内の外部ディレクトリエントリから RMIスタブが取得される。外部ディレクトリは、@link javax.naming JNDI によって認識されるディレクトリのどれかで、通常はRMI レジストリ、LDAP、または COS
アドレスの詳細は以下で説明します。
通常、RMI コネクタサーバーを作成するには、javax.management.remote.JMXConnectorServerFactory#newJMXConnectorServerJMXConnectorServerFactory.newJMXConnectorServer メソッドに RMIコネクタアドレスを指定します。コネクタサーバーの接続先 MBeanサーバーも、このメソッドのパラメータとして指定できます。別の方法として、コネクタサーバーを MBean として MBeanサーバーに登録する方法もあります。
RMI コネクタサーバーは、javax.management.remote.rmi.RMIConnectorServerRMIConnectorServer のインスタンスを照会しても作成できます。 この照会は、明示的に行なっても MBean サーバーの createMBeanメソッドを介して行なってもかまいません。
RMI トランスポート (JRMP または IIOP) を選択するには、コネクタサーバーの作成時に、serviceURLの protocol 部分に rmi または iiopを指定します。RMIServerImplの適切なサブクラスをインスタンス化し、RMIConnectorServerコンストラクタに指定することによって、特別なコネクタサーバーを作成することもできます。
指定した serviceURL の URL パスが空の場合(オプションのホストとポートに続く部分)、または serviceURLを指定しなかった場合、コネクタサーバーにより、クライアントが接続のために使用できる新しい JMXServiceURLが作成されます。
次のような serviceURL の場合:
service:jmx:rmi://host:port
コネクタサーバーは javax.management.remote.rmi.RMIJRMPServerImplRMIJRMPServerImpl を生成する。次のような JMXServiceURL が返される:
service:jmx:rmi://host:port/stub/XXXX
ここで XXXX は、改行文字なしでBASE64 符号化処理された、生成されたオブジェクトの直列化形式のスタブです。
次のような serviceURL の場合:
service:jmx:iiop://host:port
コネクタサーバーは javax.management.remote.rmi.RMIIIOPServerImplRMIIIOPServerImpl を生成する。次のような JMXServiceURL が返される:
service:jmx:iiop://host:port/ior/IOR:XXXX
IOR:XXXX は、生成されたオブジェクトの IOR(Interoperable Object Reference) の標準 CORBA 符号化
serviceURL が存在しない場合、ユーザー指定の RMIServerImplが必要になる。このオブジェクト上の toStub メソッドが Stub のインスタンスを返す場合、コネクタサーバーは上記の iiop形式を使用して JMXServiceURL を生成する。その他の場合、rmi形式を使用して JMXServiceURL を生成する
ユーザー指定の serviceURL 内の hostはオプションです。存在する場合、生成された JMXServiceURLにコピーされますが、存在しない場合は無視されます。存在しない場合、生成された JXMServiceURLはローカルホスト名を持ちます。
ユーザー指定の serviceURL 内の portもオプションです。存在する場合、生成された JMXServiceURLにコピーされます。 存在しない場合、生成された JMXServiceURL はポートを持ちません。rmiプロトコルを使用する serviceURL では、portが存在する場合、生成されたリモートオブジェクトがエクスポートされるポートを示します。それ以外の影響はありません。
ユーザーが JMXServiceURL ではなく RMIServerImplを指定した場合、生成された JMXServiceURL の host部分にローカルホスト名が入ります。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 コンストラクタの environmentの jmx.remote.rmi.client.socket.factory および jmx.remote.rmi.server.socket.factory属性を使って、RMI ソケットファクトリを指定できます。これらの属性の値は、それぞれ RMIClientSocketFactory 型または RMIServerSocketFactory型でなければなりません。これらのファクトリは、コネクタに関連付けられた 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 接続を構築できます。
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」を参照してください。
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のパッケージ 次のパッケージ | フレームあり フレームなし | |||||||||
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。