| 目次 | 前の項目 | 次の項目 | Java Remote Method Invocation |
java.rmi.Naming クラスは、リモートオブジェクトレジストリ内のリモートオブジェクトへの参照の格納および取得のためのメソッドを提供します。Naming クラスのメソッドは、引数の 1 つとして、次のような URL 形式の java.lang.String の名前をとります。
//host:port/name
host にはレジストリが置かれている (リモートまたはローカルの) ホスト、port にはレジストリが呼び出しを受け入れるポート番号、name にはレジストリによって解釈されていない単純な文字列を指定します。host と port は、省略可能です。host を省略した場合は、ホストはローカルホスト (デフォルト) になります。port を省略した場合は、ポートは 1099 (デフォルト) になります。これは、RMI のレジストリである rmiregistry が使用する既知のポートです。リモートオブジェクトに対する名前のバインディングとは、あとで使う可能性のあるリモートオブジェクトを検索できるように、そのリモートオブジェクトに名前を関連付けるか、あるいは登録することです。Naming クラスの
bindまたはrebindメソッドを使って、リモートオブジェクトに名前を関連付けることができます。リモートオブジェクトがローカルホスト上の RMI レジストリに登録 (バインド) されると、リモート (またはローカル) ホスト上の呼び出し側は、そのリモートオブジェクトを名前で検索し、参照を取得してから、オブジェクトのリモートメソッドを呼び出すことができます。レジストリは、あるホスト上で稼動するすべてのサーバで共有できます。また、必要に応じて、個々のサーバプロセスで独自のレジストリを作成および使用することもできます。詳細は、
java.rmi.registry.LocateRegistry.createRegistryメソッドを参照してください。
package java.rmi;
public final class Naming {
public static Remote lookup(String url)
throws NotBoundException, java.net.MalformedURLException,
RemoteException;
public static void bind(String url, Remote obj)
throws AlreadyBoundException,
java.net.MalformedURLException, RemoteException;
public static void rebind(String url, Remote obj)
throws RemoteException, java.net.MalformedURLException;
public static void unbind(String url)
throws RemoteException, NotBoundException,
java.net.MalformedURLException;
public static String[] list(String url)
throws RemoteException, java.net.MalformedURLException;
}
lookupメソッドは、ファイル名の部分に関連するリモートオブジェクトを返します。この名前がオブジェクトとバインドされていなければ、NotBoundException がスローされます。
bindメソッドは、リモートオブジェクトに特定の名前をバインドします。その名前がすでにオブジェクトにバインドされているならば、AlreadyBoundException をスローします。
rebindメソッドは、たとえその名前がすでにバインドされていても、常に名前をオブジェクトにバインドします。このとき、古いバインディングは失われます。
unbindメソッドは、リモートオブジェクトと名前のバインディングを解除します。バインドが存在していないならば、NotBoundException をスローします。
listメソッドは、レジストリにバインドされた URL のスナップショットに含まれる String オブジェクトの配列を返します。レジストリにコンタクトして接続リストを得るために必要なのは、URL のホストとポート部分だけの情報です。このため URL のファイル名の部分は無視されます。
注 - java.rmi.AccessException は、これらメソッドのどれかの結果としてもスローされる場合があります。AccessExceptionは、呼び出し側が固有の操作を実行する権限を持たないことを示します。たとえば、レジストリを実行するホストに対してローカルなクライアントだけが、bind、rebind、およびunbindの操作を実行することを許されます。しかし、lookup操作は、ローカルでないどのクライアントからも起動できます。