クラスUnicastRemoteObject

すべての実装されたインタフェース:
Serializable, Remote

public class UnicastRemoteObject extends RemoteServer
リモート・オブジェクトをJRMPを使ってエクスポートし、リモート・オブジェクトと通信するスタブを取得するために使用されます。 スタブは、実行時に動的プロキシ・オブジェクトを使用して生成されます。

非推奨: 静的スタブ。 静的に生成されたスタブのサポートは非推奨です。 これには、静的スタブを使用する必要があるこのクラス内のAPI、および静的スタブのロードに対する実行時サポートが含まれます。 次に示すように、オブジェクトをエクスポートする非優先の方法のいずれかを使用して、スタブを動的に生成することをお薦めします。

リモート・オブジェクトをエクスポートするには、8つの方法があります:

  1. UnicastRemoteObjectのサブクラス化およびUnicastRemoteObject()コンストラクタの呼出し。
  2. UnicastRemoteObjectのサブクラス化およびUnicastRemoteObject(port)コンストラクタの呼出し。
  3. UnicastRemoteObjectのサブクラス化およびUnicastRemoteObject(port, csf, ssf)コンストラクタの呼出し。
  4. exportObject(Remote)メソッドの呼出し。 非推奨。
  5. exportObject(Remote, port)メソッドの呼出し。
  6. exportObject(Remote, port, csf, ssf)メソッドの呼出し。
  7. exportObject(Remote, port, filter)メソッドの呼出し。
  8. exportObject(Remote, port, csf, ssf, filter)メソッドの呼出し。

4番目の手法であるexportObject(Remote)は、静的に生成されたスタブを常に使用するため、非推奨です。

他の手法はすべて次のアプローチを使用: java.rmi.server.ignoreStubClassesプロパティがtrue (大文字小文字を区別しません)の場合、または静的スタブが見つからない場合、スタブはProxyオブジェクトを使用して動的に生成されます。 それ以外の場合は、静的スタブが使用されます。

java.rmi.server.ignoreStubClassesプロパティのデフォルト値はfalseです。

静的に生成されたスタブは、通常、リモート・オブジェクト・クラスから事前生成されます。 次に説明するように、静的スタブがロードされ、そのスタブ・クラスのインスタンスが構築されます。

  • 「ルート・クラス」が次のようにして決定されます。リモート・オブジェクトのクラスがRemoteを拡張したインタフェースを直接実装している場合、そのリモート・オブジェクトのクラスがルート・クラスになります。それ以外の場合、リモート・オブジェクトのクラスのスーパー・クラスのうち、Remoteを拡張したインタフェースを直接実装している最上位のクラスが、ルート・クラスになります。
  • ロードするスタブ・クラスの名前を決定するために、ルート・クラスのバイナリ名と接尾辞_Stubが連結されます。
  • 指定した名前のスタブ・クラスがルート・クラスのクラス・ローダーを使ってロードされます。 スタブ・クラスはpublicである必要があり、RemoteStubを拡張する必要があり、少なくともjava.rmiモジュールにエクスポートされるパッケージ内に存在し、RemoteRef型の1つのパラメータを持つpublicコンストラクタが必要です。
  • 最後に、スタブ・クラスのインスタンスがRemoteRefを使って構築されます。
  • 適切なスタブ・クラスが見つからなかった場合、スタブ・クラスをロードできなかった場合、あるいはスタブ・インスタンスの作成時に問題が発生した場合は、StubNotFoundExceptionがスローされます。

スタブは、次の特性を持つProxyのインスタンスを構築することによって動的に生成されます。

  • プロキシのクラスは、リモート・オブジェクトのクラスのクラス・ローダーを使用して、Proxyクラスの仕様に従って定義されます。
  • プロキシは、リモート・オブジェクトのクラスが実装しているリモート・インタフェースのすべてを実装する
  • 各リモート・インタフェースは、パブリックで、少なくともjava.rmiモジュールのexportedであるパッケージ内に存在するか、少なくともjava.rmiモジュールのopenであるパッケージ内に存在する必要があります。
  • プロキシの呼出しハンドラは、RemoteRefを使って構築されたRemoteObjectInvocationHandlerインスタンスになる。
  • プロキシを作成できなかった場合は、StubNotFoundExceptionがスローされる。

エクスポートされたリモート・オブジェクトは、RMI仕様の説明に従ってスタブからメソッド呼出しを受け取ります。 各呼出しの操作およびパラメータは、カスタムのObjectInputStreamを使用して非整列化されます。 オブジェクトのエクスポート時にObjectInputFilterが指定され、nullではない場合、ストリームからアンマーシャリングされるため、パラメータをフィルタするために使用されます。 フィルタは、呼び出されるメソッドやパラメータ値に関係なく、すべての呼出しおよびすべてのパラメータに使用されます。 フィルタが指定されていない場合、またはエクスポートされたオブジェクトに対してnullの場合は、ObjectInputStreamデフォルト・フィルタ(ある場合)が使用されます。 デフォルトのフィルタはObjectInputFilter.Config.setSerialFilterで構成されています。 フィルタがいずれかのパラメータを拒否すると、ObjectInputStreamによってスローされたInvalidClassExceptionUnmarshalExceptionの原因として報告されます。

実装上のノート:
オブジェクトのエクスポートに使用されるコンストラクタまたは静的メソッドに応じて、ソケットの作成にRMISocketFactoryが使用される場合があります。 デフォルトでは、RMISocketFactoryによって作成されるサーバー・ソケットはすべてのネットワーク・インタフェースで待機します。 RMISocketFactoryクラスおよび『Java RMIの仕様』のセクション「RMIソケット・ファクトリ」を参照してください。
導入されたバージョン:
1.1
関連項目:
  • フィールドのサマリー

    クラスで宣言されたフィールド RemoteObject

    ref
    修飾子と型
    フィールド
    説明
    protected RemoteRef
    オブジェクトのリモート参照です。
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    匿名ポートを使用して、新しいUnicastRemoteObjectオブジェクトの作成とエクスポートを行います。
    protected
    指定されたポートを使用して、新しいUnicastRemoteObjectオブジェクトの作成とエクスポートを行います。
    protected
    指定されたポートとソケット・ファクトリを使用して、新しいUnicastRemoteObjectオブジェクトの作成とエクスポートを行います。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    元のオブジェクトと明確に区別できるリモート・オブジェクトの複製を返します。
    static RemoteStub
    非推奨。
    静的スタブのみをサポートしているため、このメソッドは非推奨です。
    static Remote
    exportObject(Remote obj, int port)
    リモート・オブジェクトをエクスポートして、着信呼出しの受信に使用できるようにします。指定されたポートを使用します。
    static Remote
    exportObject(Remote obj, int port, ObjectInputFilter filter)
    リモート・オブジェクトをエクスポートして、指定された特定のポートおよびfilterを使用して着信コールを受信できるようにします。
    static Remote
    リモート・オブジェクトをエクスポートして、着信呼出しの受信に使用できるようにします。指定されたソケット・ファクトリによって特定されたトランスポートを使用します。
    static Remote
    指定されたソケット・ファクトリおよびfilterで指定されたトランスポートを使用して、リモート・オブジェクトをエクスポートし、着信コールを受信できるようにします。
    static boolean
    unexportObject(Remote obj, boolean force)
    RMIランタイムからリモート・オブジェクトobjを削除します。

    クラスで宣言されたメソッド RemoteServer

    getClientHost, getLog, setLog
    修飾子と型
    メソッド
    説明
    static String
    現在のスレッドで処理されているリモート・メソッド呼出しのクライアント・ホストを示す文字列表現を返します。
    RMI呼出しログのストリームを返します。
    static void
    出力ストリームoutにRMI呼出しのログを記録します。

    クラスで宣言されたメソッド RemoteObject

    equals, getRef, hashCode, toString, toStub
    修飾子と型
    メソッド
    説明
    boolean
    2つのリモート・オブジェクトが等しいかどうかを比較します。
    リモート・オブジェクトに対するリモート参照を返します。
    int
    リモート・オブジェクトに対するハッシュ・コードを返します。
    このリモート・オブジェクトの値を表す文字列を返します。
    static Remote
    パラメータとして渡されたリモート・オブジェクトobjに対するスタブを返します。

    クラスオブジェクトで宣言されたメソッド

    finalize, getClass, notify, notifyAll, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • コンストラクタの詳細

    • 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
      関連項目:
    • exportObject

      非推奨。
      静的スタブのみをサポートしているため、このメソッドは非推奨です。 代わりに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