目次 | 前へ | 次へ | Java Remote Method Invocation |
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
メソッドによるレジストリの開始時には、サーバーのプロセスはアクティブに保たれません。