参照: 説明
インタフェース | 説明 |
---|---|
RMIConnection |
クライアントからサーバー側の MBeanServer 実装へ MBeanServer 要求を転送するために使用される RMI オブジェクトです。
|
RMIServer |
RMI コネクタとの接続の確立に使用される RMI オブジェクトです。
|
クラス | 説明 |
---|---|
RMIConnectionImpl |
RMIConnection インタフェースの実装です。 |
RMIConnectionImpl_Stub | |
RMIConnector |
リモート RMI コネクタへの接続です。
|
RMIConnectorServer |
リモートクライアントからの RMI ベースの接続を作成する JMX API コネクタサーバーです。
|
RMIIIOPServerImpl |
IIOP 経由でエクスポートされる
RMIServerImpl であり、IIOP 経由でエクスポートされた RMI オブジェクトとしてクライアント接続を作成します。 |
RMIJRMPServerImpl |
JRMP 経由でエクスポートされる
RMIServer オブジェクトであり、JRMP 経由でエクスポートされた RMI オブジェクトとしてクライアント接続を作成します。 |
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 つの形式があります。
RMIServer
型の Java オブジェクトです。このアドレス形式を使用して、URL 内の外部ディレクトリエントリから RMI スタブが取得されます。外部ディレクトリは、JNDI
によって認識されるディレクトリのどれかで、通常は RMI レジストリ、LDAP、または COS ネーミングです。
アドレスの詳細は次で説明します。
通常、RMI コネクタサーバーを作成するには、JMXConnectorServerFactory.newJMXConnectorServer
メソッドに RMI コネクタアドレスを指定します。コネクタサーバーの接続先 MBean サーバーも、このメソッドのパラメータとして指定できます。別の方法として、コネクタサーバーを MBean として MBean サーバーに登録することもできます。
RMI コネクタサーバーの作成は、明示的にまたは MBean サーバーの createMBean
メソッドを介して、RMIConnectorServer
のインスタンスを構築することによって行うこともできます。
RMI トランスポート (JRMP または IIOP) を選択するには、コネクタサーバーの作成時に、serviceURL
の protocol
部分に rmi
または iiop
を指定します。RMIServerImpl
の適切なサブクラスをインスタンス化し、RMIConnectorServer
コンストラクタに指定することによって、特別なコネクタサーバーを作成することもできます。
指定した serviceURL
の URL パスが空の場合 (オプションのホストとポートに続く部分)、または serviceURL
を指定しなかった場合、コネクタサーバーにより、クライアントが接続のために使用できる新しい JMXServiceURL
が作成されます。
次のような serviceURL
の場合:
service:jmx:rmi://host:port
コネクタサーバーは RMIJRMPServerImpl
を生成し、次のような JMXServiceURL
が返されます。
service:jmx:rmi://host:port/stub/XXXX
ここで XXXX
は、改行文字なしで BASE64 エンコード処理された、生成されたオブジェクトの直列化形式のスタブです。
次のような serviceURL
の場合:
service:jmx:iiop://host:port
コネクタサーバーは RMIIIOPServerImpl
を生成し、次のような 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
実行時、コネクタクライアントの場合は 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 の使用による動的なコードのダウンロード」を参照してください。
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.