|
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 も参照してください。