- java.lang.Object
-
- java.rmi.server.RemoteObject
-
- java.rmi.server.RemoteServer
-
- java.rmi.server.UnicastRemoteObject
-
- すべての実装されたインタフェース:
Serializable,Remote
- 直系の既知のサブクラス:
ActivationGroup
public class UnicastRemoteObject extends RemoteServer
リモート・オブジェクトをJRMPを使ってエクスポートし、リモート・オブジェクトと通信するスタブを取得するために使用されます。 スタブは、動的プロキシ・オブジェクトを使用して実行時に生成されるか、または通常はrmicツールを使用してビルド時に静的に生成されます。非推奨: 静的スタブ。 静的に生成されたスタブのサポートは非推奨です。 これには、静的スタブを使用する必要があるこのクラス内のAPI、および静的スタブのロードに対する実行時サポートが含まれます。 次に示すようにオブジェクトをエクスポートする非推奨でない方法のいずれかを使用して、スタブの動的生成をお薦めします。
rmicを実行して静的スタブ・クラスを生成しないでください。 これは不要であり、また非推奨でもあります。リモート・オブジェクトをエクスポートするには、次の8つの方法があります。
UnicastRemoteObjectのサブクラス化およびUnicastRemoteObject()コンストラクタの呼出し。UnicastRemoteObjectのサブクラス化およびUnicastRemoteObject(port)コンストラクタの呼出し。UnicastRemoteObjectのサブクラス化およびUnicastRemoteObject(port, csf, ssf)コンストラクタの呼出し。exportObject(Remote)メソッドの呼出し。 非推奨。exportObject(Remote, port)メソッドの呼出し。exportObject(Remote, port, csf, ssf)メソッドの呼出し。exportObject(Remote, port, filter)メソッドの呼出し。exportObject(Remote, port, csf, ssf, filter)メソッドの呼出し。
4番目の手法である
exportObject(Remote)は、静的に生成されたスタブを常に使用するため、非推奨です。他の方法はすべて、次の方法を使用します。
java.rmi.server.ignoreStubClassesプロパティがtrue(大/小文字の区別なし)の場合、または静的スタブが見つからない場合、スタブはProxyオブジェクトを使用して動的に生成されます。 それ以外の場合は、静的スタブが使用されます。java.rmi.server.ignoreStubClassesプロパティのデフォルト値はfalseです。静的に生成されたスタブは通常、
rmicツールを使用してリモート・オブジェクトのクラスから事前生成されます。 次に説明するように、静的スタブがロードされ、そのスタブ・クラスのインスタンスが構築されます。- 「ルート・クラス」が次のようにして決定されます。リモート・オブジェクトのクラスが
Remoteを拡張したインタフェースを直接実装している場合、そのリモート・オブジェクトのクラスがルート・クラスになります。それ以外の場合、リモート・オブジェクトのクラスのスーパー・クラスのうち、Remoteを拡張したインタフェースを直接実装している最上位のクラスが、ルート・クラスになります。 - ロードするスタブ・クラスの名前を決定するために、ルート・クラスのバイナリ名と接尾辞
_Stubが連結されます。 - 指定した名前のスタブ・クラスがルート・クラスのクラス・ローダーを使ってロードされます。 スタブ・クラスはpublicである必要があり、
RemoteStubを拡張する必要があり、少なくともjava.rmiモジュールにエクスポートされるパッケージ内に存在する必要があり、また、RemoteRef型の1つのパラメータを持つpublicコンストラクタを持っている必要があります。 - 最後に、スタブ・クラスのインスタンスが
RemoteRefを使って構築されます。 - 適切なスタブ・クラスが見つからなかった場合、スタブ・クラスをロードできなかった場合、あるいはスタブ・インスタンスの作成時に問題が発生した場合は、
StubNotFoundExceptionがスローされます。
スタブは、次の特性を持つ
Proxyのインスタンスを構築することによって動的に生成されます。- プロキシのクラスは、リモートオブジェクトのクラスのクラスローダーを使用して、
Proxyクラスの仕様に従って定義されます。 - プロキシは、リモート・オブジェクトのクラスが実装しているリモート・インタフェースのすべてを実装する
- 各リモート・インタフェースは、パブリックで、少なくとも
java.rmiモジュールにエクスポートされたパッケージ内に存在するか、または少なくともjava.rmiモジュールにオープンなパッケージ内に存在する必要があります。 - プロキシの呼出しハンドラは、
RemoteRefを使って構築されたRemoteObjectInvocationHandlerインスタンスになる。 - プロキシを作成できなかった場合は、
StubNotFoundExceptionがスローされる。
エクスポートされたリモート・オブジェクトは、RMI仕様の説明に従ってスタブからメソッド呼出しを受信します。 各呼出しの操作およびパラメータは、カスタム
ObjectInputStreamを使用してアンマーシャリングされます。 オブジェクトがエクスポートされるときにObjectInputFilterが指定され、nullではない場合、ストリームからアンマーシャリングされるときにパラメータをフィルタ処理するために使用されます。 フィルタは、呼び出されるメソッドやパラメータ値に関係なく、すべての呼出しおよびすべてのパラメータに使用されます。 エクスポートされたオブジェクトにフィルタが指定されていないか、nullの場合は、ObjectInputStreamデフォルト・フィルタ(存在する場合)が使用されます。 デフォルトのフィルタはObjectInputFilter.Config.setSerialFilterを使用して構成されます。 フィルタがパラメータのいずれかを拒否すると、ObjectInputStreamによってスローされたInvalidClassExceptionがUnmarshalExceptionの原因として報告されます。- 実装上のノート:
- オブジェクトのエクスポートに使用されるコンストラクタまたは静的メソッドに応じて、ソケットの作成に
RMISocketFactoryが使用される場合があります。 デフォルトでは、RMISocketFactoryによって作成されるサーバー・ソケットはすべてのネットワーク・インタフェースで待機します。RMISocketFactoryクラスおよび『Java RMIの仕様』のセクション「RMIソケット・ファクトリ」を参照してください。 - 導入されたバージョン:
- 1.1
- 関連項目:
- 直列化された形式
-
-
フィールドのサマリー
-
クラスjava.rmi.serverで宣言されるフィールド。RemoteObject
ref
-
-
コンストラクタのサマリー
コンストラクタ 修飾子 コンストラクタ 説明 protectedUnicastRemoteObject()匿名ポートを使用して、新しいUnicastRemoteObjectオブジェクトの作成とエクスポートを行います。protectedUnicastRemoteObject(int port)指定されたポートを使用して、新しいUnicastRemoteObjectオブジェクトの作成とエクスポートを行います。protectedUnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf)指定されたポートとソケット・ファクトリを使用して、新しいUnicastRemoteObjectオブジェクトの作成とエクスポートを行います。
-
メソッドのサマリー
すべてのメソッド staticメソッド インスタンス・メソッド 具象メソッド 非推奨のメソッド 修飾子と型 メソッド 説明 Objectclone()元のオブジェクトと明確に区別できるリモート・オブジェクトの複製を返します。static RemoteStubexportObject(Remote obj)非推奨。静的スタブのみをサポートしているため、このメソッドは非推奨です。static RemoteexportObject(Remote obj, int port)リモート・オブジェクトをエクスポートして、着信呼出しの受信に使用できるようにします。指定されたポートを使用します。static RemoteexportObject(Remote obj, int port, ObjectInputFilter filter)指定された特定のポートと filterを使用して、リモートオブジェクトをエクスポートして、着信呼び出しを受信できるようにします。static RemoteexportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf)リモート・オブジェクトをエクスポートして、着信呼出しの受信に使用できるようにします。指定されたソケット・ファクトリによって特定されたトランスポートを使用します。static RemoteexportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf, ObjectInputFilter filter)指定されたソケットファクトリおよび filterで指定されたトランスポートを使用して、リモートオブジェクトをエクスポートし、着信コールを受信できるようにします。static booleanunexportObject(Remote obj, boolean force)RMIランタイムからリモート・オブジェクトobjを削除します。-
クラスjava.rmi.serverで宣言されたメソッド。RemoteServer
getClientHost, getLog, setLog
-
-
-
-
コンストラクタの詳細
-
UnicastRemoteObject
protected UnicastRemoteObject() throws RemoteException匿名ポートを使用して、新しいUnicastRemoteObjectオブジェクトの作成とエクスポートを行います。オブジェクトは、
RMISocketFactoryクラスを使用して作成されたサーバー・ソケットを使用してエクスポートされます。- 例外:
RemoteException- オブジェクトのエクスポートが失敗した場合- 導入されたバージョン:
- 1.1
-
UnicastRemoteObject
protected UnicastRemoteObject(int port) throws RemoteException指定されたポートを使用して、新しいUnicastRemoteObjectオブジェクトの作成とエクスポートを行います。オブジェクトは、
RMISocketFactoryクラスを使用して作成されたサーバー・ソケットを使用してエクスポートされます。- パラメータ:
port- リモート・オブジェクトが呼出しを受信するポートの番号。portがゼロの場合は、匿名ポートが選択される- 例外:
RemoteException- オブジェクトのエクスポートが失敗した場合- 導入されたバージョン:
- 1.2
-
UnicastRemoteObject
protected UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException指定されたポートとソケット・ファクトリを使用して、新しいUnicastRemoteObjectオブジェクトの作成とエクスポートを行います。いずれかのソケット・ファクトリを
nullにできます。この場合、RMISocketFactoryの対応するクライアントまたはサーバー・ソケット作成メソッドがかわりに使用されます。- パラメータ:
port- リモート・オブジェクトが呼出しを受信するポートの番号。portがゼロの場合は、匿名ポートが選択されるcsf- リモート・オブジェクトの呼出しに使用する、クライアント側ソケット・ファクトリssf- リモート呼出しを受信する、サーバー側ソケット・ファクトリ- 例外:
RemoteException- オブジェクトのエクスポートが失敗した場合- 導入されたバージョン:
- 1.2
-
-
メソッドの詳細
-
clone
public Object clone() throws CloneNotSupportedException
元のオブジェクトと明確に区別できるリモート・オブジェクトの複製を返します。- オーバーライド:
clone、クラスObject- 戻り値:
- 新しいリモート・オブジェクト
- 例外:
CloneNotSupportedException- 複製がRemoteExceptionのために失敗した場合。- 導入されたバージョン:
- 1.1
- 関連項目:
Cloneable
-
exportObject
@Deprecated public static RemoteStub exportObject(Remote obj) throws RemoteException
非推奨。静的スタブのみをサポートしているため、このメソッドは非推奨です。 代わりにexportObject(Remote, port)またはexportObject(Remote, port, csf, ssf)を使用してください。リモート・オブジェクトをエクスポートして、着信呼出しの受信に使用できるようにします。匿名ポートを使用します。 このメソッドでは常に、静的に生成されたスタブが返されます。オブジェクトは、
RMISocketFactoryクラスを使用して作成されたサーバー・ソケットを使用してエクスポートされます。- パラメータ:
obj- エクスポートするリモート・オブジェクト- 戻り値:
- リモート・オブジェクト・スタブ
- 例外:
RemoteException- エクスポートに失敗した場合- 導入されたバージョン:
- 1.1
-
exportObject
public static Remote exportObject(Remote obj, int port) throws RemoteException
リモート・オブジェクトをエクスポートして、着信呼出しの受信に使用できるようにします。指定されたポートを使用します。オブジェクトは、
RMISocketFactoryクラスを使用して作成されたサーバー・ソケットを使用してエクスポートされます。- パラメータ:
obj- エクスポートするリモート・オブジェクトport- オブジェクトのエクスポート先のポート- 戻り値:
- リモート・オブジェクト・スタブ
- 例外:
RemoteException- エクスポートに失敗した場合- 導入されたバージョン:
- 1.2
-
exportObject
public static Remote exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException
リモート・オブジェクトをエクスポートして、着信呼出しの受信に使用できるようにします。指定されたソケット・ファクトリによって特定されたトランスポートを使用します。いずれかのソケット・ファクトリを
nullにできます。この場合、RMISocketFactoryの対応するクライアントまたはサーバー・ソケット作成メソッドがかわりに使用されます。- パラメータ:
obj- エクスポートするリモート・オブジェクトport- オブジェクトのエクスポート先のポートcsf- リモート・オブジェクトの呼出しに使用する、クライアント側ソケット・ファクトリssf- リモート呼出しを受信する、サーバー側ソケット・ファクトリ- 戻り値:
- リモート・オブジェクト・スタブ
- 例外:
RemoteException- エクスポートに失敗した場合- 導入されたバージョン:
- 1.2
-
exportObject
public static Remote exportObject(Remote obj, int port, ObjectInputFilter filter) throws RemoteException
指定された特定のポートと filterを使用して、リモートオブジェクトをエクスポートして、着信呼び出しを受信できるようにします。オブジェクトは、
RMISocketFactoryクラスを使用して作成されたサーバー・ソケットを使用してエクスポートされます。- パラメータ:
obj- エクスポートするリモート・オブジェクトport- オブジェクトのエクスポート先のポートfilter- 呼出し引数のデシリアライズ時に適用されるObjectInputFilter。null- 戻り値:
- リモート・オブジェクト・スタブ
- 例外:
RemoteException- エクスポートに失敗した場合- 導入されたバージョン:
- 9
-
exportObject
public static Remote exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf, ObjectInputFilter filter) throws RemoteException
指定されたソケットファクトリおよび filterで指定されたトランスポートを使用して、リモートオブジェクトをエクスポートし、着信コールを受信できるようにします。いずれかのソケット・ファクトリを
nullにできます。この場合、RMISocketFactoryの対応するクライアントまたはサーバー・ソケット作成メソッドがかわりに使用されます。- パラメータ:
obj- エクスポートするリモート・オブジェクトport- オブジェクトのエクスポート先のポートcsf- リモート・オブジェクトの呼出しに使用する、クライアント側ソケット・ファクトリssf- リモート呼出しを受信する、サーバー側ソケット・ファクトリfilter- 呼出し引数のデシリアライズ時に適用されるObjectInputFilter。null- 戻り値:
- リモート・オブジェクト・スタブ
- 例外:
RemoteException- エクスポートに失敗した場合- 導入されたバージョン:
- 9
-
unexportObject
public static boolean unexportObject(Remote obj, boolean force) throws NoSuchObjectException
RMIランタイムからリモート・オブジェクトobjを削除します。 削除が成功すると、オブジェクトはRMI着信呼出しの受け付けのために使用できなくなります。 パラメータforceがtrueに設定されていると、リモート・オブジェクトへの保留状態の呼出しがある場合や、進行中の呼出しがある場合でも、オブジェクトは強制的にアンエクスポートされます。 forceパラメータにfalseを指定すると、保留状態の呼び出しや実行中の呼出しがない場合に限り、オブジェクトはアンエクスポートされます。- パラメータ:
obj- アンエクスポートされるリモート・オブジェクトforce- trueの場合は、保留中または進行中の呼出しがあっても、オブジェクトをアンエクスポートする。falseの場合は、保留中または進行中の呼出しがないときにだけ、オブジェクトをアンエクスポートする- 戻り値:
- オペレーションが成功した場合はtrue、そうでない場合はfalse
- 例外:
NoSuchObjectException- リモート・オブジェクトが現在エクスポートされていない場合- 導入されたバージョン:
- 1.2
-
-