目次 | 前へ | 次へ Java Remote Method Invocation


8.1 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 では非推奨です (サポートもされません)。


8.1.1 リモートオブジェクトとスタブクラスとの型の等価性

クライアントは、リモートオブジェクトのクラスが定義するのと厳密に同じセットのリモートインタフェースを持ったスタブ (代理) オブジェクトと対話します。スタブクラスには、オブジェクトの型グラフを構成するクラス階層の非リモート部分は含まれません。これは、スタブクラスは 1 つ以上のリモートインタフェースを実装するもっとも洗練された実装クラスから生成されるためです。たとえば、C が B を継承し、B が A を継承したとして、B だけがリモートインタフェースを実装する場合は、スタブが生成されるのは B からであり、C からではありません。

スタブは、リモートオブジェクトクラスと同じリモートインタフェース群を実装するため、スタブはサーバーオブジェクトの型のリモート部分と同じ型を持つことになります。このため、クライアントは、Java 言語の組み込み演算を利用してリモートオブジェクトの型チェックや、あるリモートインタフェースから別のインタフェースへのキャストを行うことができます。

スタブは rmic コンパイラによって生成されます。


8.1.2 final 宣言された Object メソッドのセマンティクス

次のメソッドは java.lang.Object クラスで final 宣言されているため、どの実装によってもオーバーライドできません。 getClass のデフォルト実装は、Java 言語で記述されたすべてのオブジェクト (ローカルとリモート両方) に適用可能です。このため、リモートオブジェクトの場合でも、特別な実装は必要ありません。リモートスタブに使われた場合には、rmic によって生成されたスタブオブジェクトの正確な型が getClass メソッドによってレポートされます。ただし、スタブの型はリモートオブジェクトにより実装されたリモートインタフェースだけを反映したもので、そのオブジェクトのローカルインタフェースは反映しません。

java.lang.Objectwaitnotify メソッドは Java 言語のスレッドモデルに則して待機と通知を扱います。これらのメソッドをリモートスタブに対して使うことが Java のスレッドモデルに違反するわけではありませんが、これらのメソッドは、ローカルな Java オブジェクトを扱う場合とはセマンティクスが異なります。特に、これらのメソッドは、クライアントのリモートオブジェクト (スタブ) へのローカル参照に作用し、リモートにある実際のオブジェクトには作用しません。



目次 | 前へ | 次へ
Copyright © 1997, 2010, Oracle and/or its affiliates. All rights reserved.