ナビゲーション・リンクをスキップ
Java(tm) Platform
Standard Edition 8

パッケージ javax.management.remote.rmi

RMIコネクタは、RMIを使ってクライアント要求をリモートMBeanサーバーへ転送する、JMXリモートAPI用のコネクタです。

参照: 説明

パッケージjavax.management.remote.rmiの説明

RMIコネクタは、RMIを使ってクライアント要求をリモートMBeanサーバーへ転送する、JMXリモートAPI用のコネクタです。このパッケージでは、RMIコネクタのユーザーが、クライアント側およびサーバー側で直接参照する必要があるクラスを定義します。ユーザーが通常は直接参照しないクラスも定義しますが、これらのクラスは、RMIコネクタの実装が異なる場合も相互運用できるように定義する必要があります。

RMIコネクタは、RMIでのJRMPトランスポートをサポートしており、オプションでIIOPトランスポートもサポートします。

JMXリモートAPIのほとんどのコネクタと同様に、RMIも通常はアドレスとしてJMXServiceURLを持っています。このアドレスのプロトコル部分は、デフォルトのRMIトランスポート(JRMP)を使用するコネクタの場合はrmi、RMI/IIOPを使用するコネクタの場合はiiopになります。

RMIコネクタ・アドレスには、次の2つの形式があります。

アドレスの詳細は次で説明します。

RMIコネクタ・サーバーの作成

通常、RMIコネクタ・サーバーを作成するには、JMXConnectorServerFactory.newJMXConnectorServerメソッドにRMIコネクタ・アドレスを指定します。コネクタ・サーバーの接続先MBeanサーバーも、このメソッドのパラメータとして指定できます。別の方法として、コネクタ・サーバーをMBeanとしてMBeanサーバーに登録することもできます。

RMIコネクタ・サーバーの作成は、明示的にまたはMBeanサーバーのcreateMBeanメソッドを介して、RMIConnectorServerのインスタンスを構築することによって行うこともできます。

RMIトランスポートの選択

RMIトランスポート(JRMPまたはIIOP)を選択するには、コネクタ・サーバーの作成時に、serviceURLprotocol部分にrmiまたはiiopを指定します。RMIServerImplの適切なサブクラスをインスタンス化し、RMIConnectorServerコンストラクタに指定することによって、特別なコネクタ・サーバーを作成することもできます。

サーバーによって生成されたコネクタ・アドレス

指定したserviceURLのURLパスが空の場合(オプションのホストとポートに続く部分)、またはserviceURLを指定しなかった場合、コネクタ・サーバーにより、クライアントが接続のために使用できる新しいJMXServiceURLが作成されます。

ユーザー指定のserviceURL内のhostはオプションです。存在する場合、生成されたJMXServiceURLにコピーされますが、存在しない場合は無視されます。存在しない場合、生成されたJXMServiceURLはローカル・ホスト名を持ちます。

ユーザー指定のserviceURL内のportもオプションです。存在する場合、生成されたJMXServiceURLにもコピーされます。存在しない場合、生成されたJMXServiceURLはポートを持ちません。rmiプロトコルを使用するserviceURLでは、port (存在する場合)が、生成されたリモート・オブジェクトがエクスポートされるポートを示します。それ以外の影響はありません。

ユーザーがJMXServiceURLではなくRMIServerImplを指定した場合、生成されたJMXServiceURLhost部分にローカル・ホスト名が入ります。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コンストラクタに指定されたenvironmentjmx.remote.rmi.client.socket.factoryおよびjmx.remote.rmi.server.socket.factory属性を使って、RMIソケット・ファクトリを指定できます。これらの属性の値は、それぞれRMIClientSocketFactory型とRMIServerSocketFactory型である必要があります。これらのファクトリは、コネクタに関連付けられたRMIオブジェクトを作成するとき使用されます。

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接続を直接構築できます。

RMI/IIOPコネクタのORBの指定

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の使用による動的なコードのダウンロード」を参照してください。

導入されたバージョン:
1.5
関連項目:
JavaTM Remote Method Invocation (RMI), Java Naming and Directory InterfaceTM (JNDI), RFC 2045セクション6.8「Base64 Content-Transfer-Encoding」
ナビゲーション・リンクをスキップ
Java(tm) Platform
Standard Edition 8

バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.