参照: 説明
| インタフェース | 説明 |
|---|---|
| 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, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。