6 レジストリ・インタフェース
RMIシステムは、java.rmi.registry.Registry
インタフェースとjava.rmi.registry.LocateRegistry
クラスを使用して、オブジェクトを単純名によって取り出したり、登録したりする一般的なブートストラップ・サービスを行います。
レジストリとは、名前をリモート・オブジェクトにマッピングするリモート・オブジェクトのことです。 どのサーバー・プロセスも自身のレジストリをサポートできます。または、単独のレジストリをホストに使用できます。
LocateRegistry
メソッドは、特定のホスト、またはホストとポートの両方で動作しているレジストリを取得するために使います。 java.rmi.Naming
クラスのメソッドは、適切なLocateRegistry.getRegistryメソッドを使って、Registryインタフェースを実装するリモート・オブジェクトを呼び出します。
6.1 Registry
インタフェース
Registry
APIドキュメントを参照してください。
6.2 LocateRegistry
クラス
java.rmi.registry.LocateRegistry
クラスが使用されるのは、ローカル・ホストを含む特定のホスト上にあるブートストラップのリモート・オブジェクト・レジストリへの参照(スタブを構築する)の取得、あるいは特定のポートでの呼出しを受け入れるリモート・オブジェクト・レジストリの作成のためです。
レジストリは、単純で単調な命名法を実装し、リモート・オブジェクトの名前(文字列)をリモート・オブジェクトへの参照に関連付けます。 名前とリモート・オブジェクトのバインディングは、サーバーを再起動すると失われます。
getRegistry
の呼出しは、リモート・ホストへの接続を実際に確立するわけではありません。 実際には、リモート・レジストリへのローカル参照が作成されるだけであり、これはリモート・ホスト上でレジストリが実行されていない場合でも行われます。 したがって、このメソッドによって返されたリモート・レジストリを呼び出す後続のメソッドは失敗する場合もあります。
package java.rmi.registry; public final class LocateRegistry { public static Registry getRegistry() throws java.rmi.RemoteException {...} public static Registry getRegistry(int port) throws java.rmi.RemoteException {...} public static Registry getRegistry(String host) throws java.rmi.RemoteException {...} public static Registry getRegistry(String host, int port) throws java.rmi.RemoteException {...} public static Registry getRegistry(String host, int port, RMIClientSocketFactory csf) throws RemoteException {...} public static Registry createRegistry(int port) throws java.rmi.RemoteException {...} public static Registry createRegistry(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException {...} }
最初の4つのgetRegistry
メソッドは、現在のホスト上のレジストリ、指定されたポートの現在のホスト上のレジストリ、指定されたホストのレジストリ、または指定されたホストの特定ポートのレジストリへの参照を返します。 ここで返されるのは、特定のホストやポートの情報を含むレジストリへのリモート・スタブです。
RMIClientSocketFactory
を引数の1つに取る、5番目のgetRegistry
メソッドは、指定されたホストおよびポート上のリモート・オブジェクトRegistry
にローカルで作成されたリモート・スタブを返します。 このメソッドを使って構築されたスタブを持つリモート・レジストリとの通信では、提供されたRMIClientSocketFactory
csfを使って、リモート・ホストおよびポート上のレジストリへのSocket
接続を作成します。
ノート: getRegistry
メソッドから返されるレジストリは、よく知られたオブジェクト識別子を含む特別に構築されたスタブです。 あるJVMから別のJVMにレジストリ・スタブを渡す機能は、サポートされていません。ただし、実装によって成功する場合としない場合があります。 LocateRegistry.getRegistry
メソッドを使用して、ホスト用の適切なレジストリを取得してください。
createRegistry
メソッドは、ローカル・ホストの特定のポートでレジストリを作成してエクスポートします。
2番目のcreateRegistry
メソッドによるレジストリとの通信には、さらに柔軟性があります。 この呼出しにより、レジストリとの通信にカスタム・ソケット・ファクトリを使うローカル・ホスト上のRegistry
が、作成およびエクスポートされます。 作成されるレジストリは、提供されたRMIServerSocketFactory
により作成されたServerSocket
を使って、特定のポートで受信する要求に備えて待機します。 このレジストリへの参照を受け取るクライアントは、提供されたRMIClientSocketFactory
により作成されたSocket
を使います。
ノート: createRegistry
メソッドを使用してレジストリを開始しても、サーバー・プロセスは存続しません。
6.3 RegistryHandler
インタフェース
RegistryHandler
APIドキュメントを参照してください。