モジュール java.rmi
パッケージ java.rmi.server

クラスUnicastRemoteObject

すべての実装されたインタフェース:
Serializable, Remote
直系の既知のサブクラス:
ActivationGroup

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が連結されます。
  • 指定した名前のスタブ・クラスがルート・クラスのクラス・ローダーを使ってロードされます。 スタブ・クラスはパブリックでなければならず、RemoteStubを拡張する必要があります。少なくともjava.rmiモジュールにエクスポートされるパッケージに存在し、型RemoteRefのパラメータを1つ持つパブリック・コンストラクタが必要です。
  • 最後に、スタブ・クラスのインスタンスが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
関連項目:
直列化された形式
  • フィールドのサマリー

    クラス java.rmi.server.RemoteObjectで宣言されたフィールド

    ref
  • コンストラクタのサマリー

    コンストラクタ
    修飾子
    コンストラクタ
    説明
    protected
    匿名ポートを使用して、新しいUnicastRemoteObjectオブジェクトの作成とエクスポートを行います。
    protected
    UnicastRemoteObject​(int port)
    指定されたポートを使用して、新しい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を削除します。

    クラス java.rmi.server.RemoteServerで宣言されたメソッド

    getClientHost, getLog, setLog

    クラス java.rmi.server.RemoteObjectで宣言されたメソッド

    equals, getRef, hashCode, toString, toStub

    クラス java.lang.Objectで宣言されたメソッド

    finalize, getClass, notify, notifyAll, wait, wait, wait
  • コンストラクタの詳細

    • 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

      @Deprecatedpublic 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