| 目次|前|次 | Java Remote Method Invocation |
RemoteStubクラスjava.rmi.server.RemoteStubクラスは、リモート・オブジェクトのスタブで共通のスーパー・クラスです。スタブ・オブジェクトは代理であり、リモート・オブジェクトの実際の実装が定義するのとまったく同じインタフェースのセットをサポートします。
package java.rmi.server;
public abstract class RemoteStub extends java.rmi.RemoteObject {
protected RemoteStub() {...}
protected RemoteStub(RemoteRef ref) {...}
protected static void setRef(RemoteStub stub, RemoteRef ref) {...}
}
RemoteStubの1つ目のコンストラクタは、リモート参照としてnullをとるスタブを作成します。2つ目のコンストラクタは、指定されたリモート参照refを引数にとるスタブを作成します。
setRefメソッドは、Java 2 SDK, Standard Edition, v1.2では非推奨です(サポートもされません)。
スタブは、リモート・オブジェクト・クラスと同じリモート・インタフェース群を実装するため、スタブはサーバー・オブジェクトの型のリモート部分と同じ型を持つことになります。このため、クライアントは、Java言語の組込み演算を利用してリモート・オブジェクトの型チェックや、あるリモート・インタフェースから別のインタフェースへのキャストを行うことができます。
final宣言されたObjectメソッドのセマンティックスjava.lang.Objectクラスでfinal宣言されているため、どの実装によってもオーバーライドできません。
getClassのデフォルト実装は、Java言語で記述されたすべてのオブジェクト(ローカルとリモート両方)に適用可能です。このため、リモート・オブジェクトの場合でも、特別な実装は必要ありません。リモート・スタブに使用された場合には、rmicによって生成されたスタブ・オブジェクトの正確な型がgetClassメソッドによってレポートされます。ただし、スタブの型はリモート・オブジェクトにより実装されたリモート・インタフェースのみを反映したもので、そのオブジェクトのローカル・インタフェースは反映しません。
java.lang.ObjectのwaitとnotifyメソッドはJava言語のスレッド・モデルに則して待機と通知を扱います。これらのメソッドをリモート・スタブに対して使うことがJavaのスレッド・モデルに違反するわけではありませんが、これらのメソッドは、ローカルなJavaオブジェクトを扱う場合とはセマンティックスが異なります。特に、これらのメソッドは、クライアントのリモート・オブジェクト(スタブ)へのローカル参照に作用し、リモートにある実際のオブジェクトには作用しません。