目次 | 前の項目 | 次の項目 Java Remote Method Invocation


4.3 Naming クラス

java.rmi.Naming クラスは、リモートオブジェクトレジストリ内のリモートオブジェクトへの参照の格納および取得のためのメソッドを提供します。Naming クラスのメソッドは、引数の 1 つとして、次のような URL 形式の java.lang.String の名前をとります。

   //host:port/name
host にはレジストリが置かれている (リモートまたはローカルの) ホスト、port にはレジストリが呼び出しを受け付けるポート番号、name にはレジストリによって解釈されない単純な文字列を指定します。hostport は、省略可能です。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 は、呼び出し側が固有の操作を実行する権限を持たないことを示します。たとえば、レジストリを実行するホストに対してローカルなクライアントだけが、bindrebind、および unbind の操作を実行することを許されます。しかし、lookup 操作は、ローカルでないどのクライアントからも起動できます。


目次 | 前の項目 | 次の項目
Copyright © 1997-1999 Sun Microsystems, Inc. All Rights Reserved.