java.rmi.registry.Registry インタフェースと java.rmi.registry.LocateRegistry クラスを使用してオブジェクトを単純名によって取り出し、あるいは登録するよく知られたブートストラップサービスを行います。どのサーバのプロセスもそのレジストリをサポートすることができますし、単独のレジストリでもホストにつかうことが出来ます。
レジストリ は名前をリモートオブジェクトにマップするためのリモートオブジェクトです。レジストリは仮想マシンの中で別なサーバクラスと共に、あるいは単独で使用することができます。
LocateRegistry メソッドは特定のホスト、またはホストとポートで動作しているレジストリを得るために使います。
java.rmi.registry.Registry リモートインタフェースはレジストリの内容をルックアップ、バインド、リバインド、アンバインドそして受信する手段を提供します。
java.rmi.Naming クラスは registry リモートインタフェースを使い URL に基づく命名法を提供します。
package java.rmi.registry;
public interface Registry extends java.rmi.Remote
{
public static final int REGISTRY_PORT = 1099; public java.rmi.Remote lookup(String name) throws java.rmi.RemoteException, java.rmi.NotBoundException, java.rmi.AccessException; public void bind(String name, java.rmi.Remote obj) throws java.rmi.RemoteException, java.rmi.AlreadyBoundException, java.rmi.AccessException; public void rebind(String name, java.rmi.Remote obj) throws java.rmi.RemoteException, java.rmi.AccessException; public void unbind(String name) throws java.rmi.RemoteException, java.rmi.NotBoundException, java.rmi.AccessException; public String[] list() throws java.rmi.RemoteException, java.rmi.AccessException; }
REGISTRY_PORT はレジストリのデフォルトポートです。
lookup メソッドは引数で指定された名前にバインドされたリモートオブジェクトを返します。
リモートオブジェクトはリモートインタフェースのセットを実装します。クライアントはリモートオブジェクトを希望するリモートインタフェースにキャストすることができます。(このキャストは Java 言語におけるキャストと同様の理由で失敗することがあります)
bind メソッドは名前をリモートオブジェクト obj に関連付けます。
もし、その名前がすでにオブジェクトにバインドされているならば AlreadyBoundExcepton がスローされます。
rebind メソッドは名前をリモートオブジェクト obj と関連付けます。もしそれ以前にバインドが存在すれば、その名前に対する古いバインドは破棄されます。
unbind メソッドは名前とリモートオブジェクト obj の間のバインドを削除します。もしその名前にバインドが存在していなかった場合は NotBoundException がスローされます。
list メソッドはレジストリに結び付けられている名前のスナップショットを 文字列の配列として返します。返り値はレジストリの内容のスナップショットを含んでいます。
クライアントがレジストリにアクセスする場合は LocateRegistry とRegistry インタフェースか、または URL ベースの java.rmi.Naming クラスのメソッドを使うことができます。
レジストリがサポートするのは bind、 unbind、そして rebind が同じホストがサーバとして働いているクライアントからのみです。ルックアップは任意のホストから実行可能です。
java.rmi.registry.LocateRegistry クラスは現ホスト上のレジストリ、現ホスト、現ポート、指定されたホストの特定ポートのレジストリへの参照を返す static メソッドを持ちます。
ここで返されるのは特定のホストやポートの情報を含んだレジストリへのリモートスタブです。 どのホスト上のどのレジストリであっても、参照(スタブ)を得るためにはリモートオペレーションを実行する必要はありません。
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,
java.rmi.UnknownHostException;
public static Registry getRegistry(String host, int port)
throws java.rmi.RemoteException,
java.rmi.UnknownHostException;
public static Registry createRegistry(int port)
throws java.rmi.RemoteException;
}
createRegistry メソッドはローカルホストの特定のポートでレジストリを作成してエクスポートします。
レジストリは単純フラット命名法を実装し、リモートオブジェクトの名前(文字列)をリモートオブジェクトへの参照にバインドします。
名前とリモートオブジェクトのバインディングはサーバが再スタートするときには保持されません。
createRegistry メソッドによるレジストリのスタートではサーバのプロセスはアクティブのまま保たれません。
RegistryHandler インタフェースは private 実装へのインタフェースとして使われます。
package java.rmi.registry;
public interface RegistryHandler {
Registry registryStub(String host, int port)
throws java.rmi.RemoteException,
java.rmi.UnknownHostException;
Registry registryImpl(int port)
throws java.rmi.RemoteException;
}
registryStub メソッドは指定されたホストとポート上のリモートレジストリへコンタクトするためのスタブを返します。
registryImpl メソッドは指定されたポート上のレジストリを構築してエクスポートします。 ポート番号はゼロであってはなりません。