目次|前|次 | 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オブジェクトを扱う場合とはセマンティックスが異なります。特に、これらのメソッドは、クライアントのリモート・オブジェクト(スタブ)へのローカル参照に作用し、リモートにある実際のオブジェクトには作用しません。