ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)

5.13.10 ServantManagerオブジェクト

  ServantManagerオブジェクトは、リクエスト受信時にServantオブジェクトの生成/削除や検索を可能にする機能です。ServantManagerオブジェクトの各メソッドの実装は、ユーザ自身で作成します。作成したServantManagerオブジェクトは、POAオブジェクトに登録しておきます。
  POAオブジェクトがリクエストを受信した際、AOMにオブジェクトIDが一致するServantオブジェクトが登録されていない場合に、POAオブジェクトはServantManagerオブジェクトのメソッドを呼び出し、Servantオブジェクトの生成/削除、検索を依頼します。
  ServantManagerオブジェクトは、Servantオブジェクトの生成/削除を行うServantActivatorオブジェクトと、Servantオブジェクトを検索するServantLocatorオブジェクトの2種類が存在します。POAオブジェクトは、ServerRetentionポリシがRETAINの場合はServantActivatorオブジェクトを呼び出し、NON_RETAINの場合はServantLocatorオブジェクトを呼び出します。


(1)ServantActivatorオブジェクト

  作成するServantActivatorクラスは、以下のようにorg.omg.PortableServer.ServantActivatorクラスを継承させる必要があります。また、メソッドとしてincarnate()、etherealize()を実装している必要があります。



ServantActivatorクラスの実装形式】

  class UserServantActivator extends org.omg.CORBA.LocalObject
        implements org.omg.PortableServer.ServantActivator{
      public org.omg.PortableServer.Servant incarnate(...) {...}
      public void etherealize(...) {...}
  }

  POAオブジェクトは、Servantオブジェクトの生成を依頼する場合、ServantActivatorオブジェクトのincarnate()メソッドを呼び出し、Servantオブジェクトの削除を依頼する場合は、etherealize()メソッドを呼び出します。POAオブジェクトから渡されるパラメタは必要に応じて各メソッドの実装部で使用できます。


  ServantActivatorオブジェクトの具体的な処理の流れを以下に示します。



  1. FactoryにServantのオブジェクトリファレンスの生成を依頼します。()

  2. Factoryで生成したオブジェクトリファレンスをクライアントに返します。

  3. Servantにオペレーションop()を要求します。

  4. POAでは、AOMに未登録の要求であるためServantActivatorを呼び出します。

  5. ServantActivatorでは、該当するServantを検索して返します。

  6. ServantActivatorからServantを受け取り、AOMに登録します。

  7. Servantに対してオペレーションop()の実行を依頼します。

  8. オペレーションop()の結果をクライアントに通知します。

) Factoryは、リクエストごとにオブジェクトリファレンスやインスタンスを作成するオブジェクトであり、インスタンス管理を行う場合に必要となるオブジェクトです。


(2)ServantLocatorオブジェクト

  作成するServantLocatorクラスは、以下のようにorg.omg.PortableServer.ServantLocatorクラスを継承させる必要があります。また、メソッドとしてpreinvoke()、postinvoke()を実装している必要があります。


ServantLocatorクラスの実装形式】

  class UserServantLocator extends org.omg.CORBA.LocalObject
        implements org.omg.PortableServer.ServantLocator{
      public org.omg.PortableServer.Servant preinvoke(...) {...}
      public void postinvoke(...) {...}
  }

  POAオブジェクトはクライアントからの要求を処理するため、毎回ServantLocatorオブジェクトのpreinvoke()メソッドを呼び出し、処理対象のServantオブジェクトを獲得します。POAオブジェクトはそのServantオブジェクトに処理を要求し、その処理が終わったら、ServantLocatorオブジェクトのpostinvoke()メソッドを呼び出し、ServantLocatorオブジェクトに後処理を依頼します。
  POAオブジェクトから渡されるパラメタは、必要に応じて各メソッドの実装部で使用することができます。


  ServantLocatorの具体的な処理の流れを以下に示します。



  1. FactoryにServantのオブジェクトリファレンスの生成を依頼します。

  2. Factoryで生成したオブジェクトリファレンスをクライアントに返します。

  3. Servantにオペレーションop()を要求します。

  4. POAでは、ServantLocatorを呼び出します。

  5. ServantLocatorのpreinvoke()でServantを検索します。

  6. Servantを受け取ります。

  7. Servantに対してオペレーションop()の実行を依頼します。

  8. オペレーションop()の結果をクライアントに通知します。

  9. ServantLocatorのpostinvoke()を呼び出します。

  10. クライアントへオペレーションを復帰します。