目次 前項目 次項目

クライアントインタフェース


リモートオブジェクトを使うアプレットやアプリケーションを書くときには、プログラマーは常に RMI システムのクライアントから見えるインタフェースを意識している必要があります。

トピックス:

リモートインタフェース

package java.rmi;
public interface Remote {}
java.rmi.Remote インタフェースはすべてのリモートオブジェクトを識別する働きをし、すべてのリモートオブジェクトは直接または間接的にこのインタフェースを実装しなければなりません。 すべてのリモートインタフェースは public 宣言されなければならないことに注意。

RemoteException クラス

リモートで発生するすべての例外は java.rmi.RemoteException のサブクラスです。 これによりインタフェースはすべてのタイプのリモート例外を取り扱うことができ、かつローカルな例外やメソッドに特有な例外を分散オブジェクトメカニズムによりスローされた例外と区別することができます。

package java.rmi;
public class RemoteException extends java.io.IOException
{
        // The actual exception or error that occurred.    
        public Throwable detail;

        // Create a remote exception.
        public RemoteException();

        // Create a remote exception with the specified string.
        public RemoteException(String s);

        // Create remote exception with specified string and exception.
        public RemoteException(String s, Throwable ex);

        // Produce message, including message from any nested exception.
        public String getMessage();
}
RemoteException はネスティングされた例外 (Throwable) を使って構成することができます。 ネスティングされた例外の代表例(例えばコンストラクタの第3引数として指定される例外)としては RMI コールの途中で発生する I/O 例外があります。

Naming クラス

java.rmi.Naming クラスにより、リモートオブジェクトをおなじみの URL(Uniform ResourceLocator) のシンタックスを使って取り出したり、定義付けすることができます。 URL はプロトコル、ホスト名、ポートおよび名前フィールドから構成されます。特定のホストやポートにたいするレジストリサービスを特定の操作を実行するために使用します。プロトコルは rmi://java.sun.com:2001/root で示されるように rmi でなければなりません。

package java.rmi;
public final class Naming {
        public static Remote lookup(String url)
                throws NotBoundException, java.net.MalformedURLException,
                UnknownHostException, RemoteException;

        public static void bind(String url, Remote obj)
                throws AlreadyBoundException,
                java.net.MalformedURLException, UnknownHostException,
                RemoteException;
        
        public static void rebind(String url, Remote obj)
                throws RemoteException, java.net.MalformedURLException,
                UnknownHostException;

        public static void unbind(String url)
                throws RemoteException, NotBoundException,
                java.net.MalformedURLException, UnknownHostException;

        public static String[] list(String url)
                throws RemoteException, java.net.MalformedURLException,
                UnknownHostException;
}
lookup メソッドは名前のファイル名部分に関連したリモートオブジェクトを返します。従って、前の例では root という名前のオブジェクトを返します。もし、この名前がオブジェクトとバインドされていなければ NotBoundException がスローされます。

bind メソッドはリモートオブジェクトに特定の名前をバインドします。そして、もしその名前がすでにオブジェクトにバインドされているならば AlreadyBoundExceptionをスローします。

rebind メソッドはたとえその名前がすでにバインドされていても、常に名前をオブジェクトにバインドします。このとき古いバインディングは失われます。

unbind メソッドはリモートオブジェクトと名前のバインディングを解除します。もしバインドが存在していないならば NotBoundException をスローします。

list メソッドはレジストリにバインドされた URL のスナップショットに含まれる String の並びを返します。 レジストリにコンタクトして接続リストを得るために必要なのは、URL のホストとポート部分のみの情報です。このため URL のファイル名部分は無視されます。

java.rmi.AccessException は、またこれらメソッドのどれかの結果としてスローされる可能性があります。AccessException は、呼び出し側が固有の操作を実行する権限を持たないことを示します。例えば、レジストリを実行するホストに対してローカルなクライアントだけが、bindrebind、および unbind の操作を実行することを許されます。しかし、lookup 操作はどの非ローカルなクライアントからも起動できます。



目次 前項目 次項目

Copyright (C) 1996, 1997 Sun Microsystems, Inc. All rights reserved.