目次|| 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.