参照: 説明
インタフェース | 説明 |
---|---|
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, 2014, Oracle and/or its affiliates. All rights reserved.