Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

第5章 アプリケーションの開発(C++言語)> 5.3 サーバアプリケーションのプログラミング(Portable Object Adapter:POA)> 5.3.2 POA概要

5.3.2.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クラスは、以下のようにPortableServer::ServantActivatorクラスを継承させる必要があります。また、メソッドとしてincarnate(), etherealize()を実装している必要があります。

【ServantActivatorクラスの実装形式】
  class UserServantActivator : public PortableServer::ServantActivator
  {
  public :
      PortableServer::Servant incarnate(...) {...}
      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クラスは、以下のようにPortableServer::ServantLocatorクラスを継承させる必要があります。また、メソッドとしてpreinvoke(), postinvoke()を実装している必要があります。

【ServantLocatorクラスの実装形式】
  class UserServantLocator : public PortableServer::ServantLocator
  {
  public :
      PortableServer::Servant preinvoke(...) {...}
      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. クライアントへオペレーションを復帰します。

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005