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