目次 | 前の項目 | 次の項目 | Java Remote Method Invocation |
RemoteObject
クラスjava.rmi.server.RemoteObject
クラスは、リモートオブジェクトのjava.lang.Object
の動作を実装します。hashCode
とequals
メソッドの実装により、リモートオブジェクト参照をハッシュテーブルに保存して比較できるようになります。equals
メソッドは、2 つのRemote
オブジェクトが同一のリモートオブジェクトを参照している場合に、true
を返します。このメソッドは、2 つのリモートオブジェクトの参照同士を比較します。
toString
メソッドは、リモートオブジェクトについて説明した文字列を返します。この文字列の内容と構文は、実装に固有のものであり、変更されることもあります。
java.lang.Object
のほかのメソッドはすべてオリジナルの実装のままです。
package java.rmi.server;public abstract class RemoteObject implements java.rmi.Remote, java.io.Serializable { protected transient RemoteRef ref;
protected RemoteObject(); protected RemoteObject(RemoteRef ref);
public RemoteRef getRef(); public static Remote toStub(java.rmi.Remote obj) throws java.rmi.NoSuchObjectException; public int hashCode(); public boolean equals(Object obj); public String toString(); }
RemoteObject
クラスは抽象クラスなので、インスタンスを生成できません。このため、サブクラス実装からRemoteObject
のコンストラクタの 1 つを呼び出す必要があります。1 番目のRemoteObject
コンストラクタは、null
リモート参照を使ってRemoteObject
を作成します。2 番目のRemoteObject
コンストラクタは、与えられたリモート参照 ref を使ってRemoteObject
を作成します。
getRef
メソッドは、リモートオブジェクトに対するリモート参照を返します。
toStub
メソッドは、パラメータとして渡されたリモートオブジェクト obj に対するスタブを返します。この操作は、事前にリモートオブジェクトの実装がエクスポートされている場合にのみ有効です。リモートオブジェクトに対するスタブが見つからなかった場合は、メソッドは、NoSuchObjectException
をスローします。
RemoteObject
クラスによってオーバーライドされるオブジェクトのメソッド
java.lang.Object
クラス内のequals
、hashCode
、およびtoString
メソッドのデフォルトでの実装は、リモートオブジェクトには適切ではありません。このため、RemoteObject
クラスが、よりリモートオブジェクトに適したセマンティクスを持つメソッド実装を提供します。
equals
メソッドおよび hashCode
メソッド
リモートオブジェクトをハッシュテーブル内でキーとして使用するためには、equals
メソッドおよびhashCode
メソッドをリモートオブジェクト実装内でオーバーライドする必要があります。これらのメソッドは、java.rmi.server.RemoteObject
クラスによってオーバーライドされます。
java.rmi.server.RemoteObject
クラスのequals
メソッドの実装は、2 つのオブジェクトの内容が同じであるかではなく、2 つのオブジェクト参照が同じであるかどうかを決定する。これは、内容の同一性を決定するにはリモートオブジェクト呼び出しが必要で、equals
のシグニチャーは、リモートの例外のスローを許可していないためであるjava.rmi.server.RemoteObject
クラスのhashCode
メソッドの実装は、同じ基本のリモートオブジェクトを参照するリモート参照のすべてに対して同じ値を返す。 これは、同じオブジェクトへの参照は、同一とみなされるためである
toString
メソッド
toString
メソッドは、オブジェクトのリモート参照を表す文字列を返すように定義されています。文字列の内容は、リモート参照の型によって異なります。単一 (ユニキャスト) オブジェクトのための現在の実装には、オブジェクトの識別子とトランスポート層固有のオブジェクトについてのその他の情報 (ホスト名、ポート番号など) が含まれます。
clone
メソッド
オブジェクトの複製は、オブジェクトがjava.lang.Cloneable
インタフェースをサポートしている場合に、Java 言語のデフォルトの機構を使うことによってのみ可能になります。rmic
コンパイラによって生成されたリモートオブジェクトのスタブは、final 宣言されているため、Cloneable
インタフェースを実装していません。このため、スタブの複製はできません。
RemoteObject
クラスは、java.io.ObjectOutputStream
へのデータの直列化を処理するためにオブジェクトの直列化機構によって呼び出される、特別な (専用の)writeObject
メソッドおよびreadObject
メソッドを実装します。
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException, java.lang.ClassNotFoundException;
RemoteObject
のリモート参照フィールド ref がnull
の場合、このメソッドはjava.rmi.MarshalException
をスローする- リモート参照 ref が
null
でない場合、ref のクラスは、getRefClass
メソッドの呼び出しによって取得される。 通常、このメソッドはリモート参照のクラスのパッケージ修飾されていない名前を返す。直列化復元中に
ObjectInputStream
によって呼び出される次のメソッドを使って、RemoteObject
の状態が、直列化された形式から再構築されます。
private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, java.lang.ClassNotFoundException;
- まず、UTF 文字列である ref のクラス名がストリーム in から読み取られる。
- 修飾されていないクラス名がストリームから読み取られた場合、
- 文字列
java.rmi.server.RemoteRef.packagePrefix
のあとに「.」およびストリームから読み取られたクラス名を続けることで、ref の完全なクラス名が生成される- 完全なクラス名から、ref のクラスのインスタンスが生成される。
InstantiationException
またはIllegalAccessException
が発生したためにインスタンスが作成されない場合は、java.rmi.UnmarshalException
がスローされる- 新しいインスタンス (ref フィールドになる) が、ストリーム in からそのインスタンスの外部形式を読み取る
目次 | 前の項目 | 次の項目
Copyright © 1997-1999 Sun Microsystems, Inc. All Rights Reserved.