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

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

5.3.2.11 AdapterActivatorオブジェクト

 AdapterActivatorオブジェクは、リクエストを受信時にPOAオブジェクトを生成するために使用します。POAオブジェクトが生成したオブジェクトリファレンスには、オブジェクトIDに加え、生成元POAオブジェクトを示すPOAidが埋め込まれています。クライアントからのリクエストが送られてきた際、POA idに対応するPOAオブジェクトが検索され、そのPOAオブジェクトがリクエストに対する処理を行います。もし、みつからない場合、検索対象のPOAの親POAオブジェクトにAdapterActivatorオブジェクトが設定されているならば、そのAdapterActivatorオブジェクトに子POAオブジェクトの生成を依頼します。親POAにAdapterActivatorオブジェクトが設定されていない場合は、CORBA::StExcep::OBJ_ADAPTER例外がクライアントに通知されます。
 AdapterActivatorオブジェクトは、ユーザが作成し、POAに登録する必要があります。
 作成するAdapterActivatorクラスは、PortableServer::AdapterActivatorクラスを継承させる必要があります。また、メソッドとしてunknown_adapter()を実装している必要があります。

【AdapterActivatorクラスの実装形式】
  class UserAdapterActivator : public PortableServer::AdapterActivator {
  public :
      CORBA::Boolean unknown_adapter(...){...}
  }

 AdapterActivatorオブジェクトのunknown_adapterメソッドは、PortableServer::POA::find_POAメソッド発行時に呼び出すことも可能です。

 以下にAdapterActivatorの処理の流れを示します。

  1. クライアントからのリクエストを受信します。リクエストの対象となるオブジェクトリファレンスは、POAidを内包しています。
  2. POAidに対応するPOAオブジェクトを検索します。存在しない場合は、既存のPOAから対象のPOAの親POAを検索します。
  3. 親POAオブジェクトに設定されているAdapterActivatorクラスのインスタンスに対し、unknown_adapeter()メソッドが発行されます。
  4. unknown_adapeter()の実装部では、パラメタで渡されたPOA(親POA)の子POAオブジェクトを生成します。以降、同じオブジェクトリファレンスに対するリクエストの処理は、このPOAが行います。
  5. 生成した子POAに対する設定等を行います(ここでは、直接Servantを生成して子POAに登録することも可能であり、ServantManagerを生成し登録しておくことも可能です)。
  6. 子POAの生成に成功した場合は、trueを返します。
  7. Servantの生成、登録を行います(ServantManager使用時)。
  8. Servantのオペレーションを起動します。
  9. オペレーションの実行結果を返します。

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

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