目次 | 前の項目 | 次の項目 Java Remote Method Invocation


5.1 RemoteObject クラス

java.rmi.server.RemoteObject クラスは、リモートオブジェクトのために java.lang.Object の動作を実装します。hashCodeequals メソッドの実装により、リモートオブジェクト参照をハッシュテーブルに保存して比較できるようになります。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 をスローします。


5.1.1 RemoteObject クラスによってオーバーライドされるオブジェクトのメソッド

java.lang.Object クラス内の equals メソッド、hashCode メソッド、および toString メソッドの実装は、リモートオブジェクトには適切ではありません。このため、RemoteObject クラスが、よりリモートオブジェクトに適したセマンティクスを持つメソッド実装を提供します。


equals メソッドおよび hashCode メソッド

リモートオブジェクトをハッシュテーブル内でキーとして使用するためには、equals メソッドおよび hashCode メソッドをリモートオブジェクト実装内でオーバーライドする必要があります。これらのメソッドは、java.rmi.server.RemoteObject クラスによってオーバーライドされます。


toString メソッド

toString メソッドは、オブジェクトのリモート参照を表す文字列を返すように定義されています。文字列の内容は、リモート参照の型によって異なります。単一 (ユニキャスト) オブジェクトのための現在の実装には、オブジェクトの識別子とトランスポート層固有のオブジェクトについてのその他の情報 (ホスト名、ポート番号など) が含まれます。


clone メソッド

オブジェクトの複製は、オブジェクトが java.lang.Cloneable インタフェースをサポートしている場合に、Java 言語のデフォルトの機構を使うことによってだけ可能になります。rmic コンパイラによって生成されたリモートオブジェクトのスタブは、final 宣言されているため、Cloneable インタフェースを実装していません。このため、スタブの複製はできません。


5.1.2 直列化された形式

RemoteObject クラスは、java.io.ObjectOutputStream へのデータの直列化を処理するためにオブジェクトの直列化機構によって呼び出される、特別 (private) な writeObject メソッドおよび readObject メソッドを実装します。RemoteObject の直列化された形式は、次のメソッドを使って書き込まれます。

private void writeObject(java.io.ObjectOutputStream out)
	throws java.io.IOException, java.lang.ClassNotFoundException;


直列化復元中に ObjectInputStream によって呼び出される次のメソッドを使って、RemoteObject の状態が、直列化された形式から構築し直されます。

private void readObject(java.io.ObjectInputStream in) 
	throws java.io.IOException, java.lang.ClassNotFoundException;




目次 | 前の項目 | 次の項目
Copyright © 1997-1998 Sun Microsystems, Inc. All Rights Reserved.