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

5.13.11 AdapterActivatorオブジェクト

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



AdapterActivatorクラスの実装形式】

  class UserAdapterActivator extends org.omg.CORBA.LocalObject
        implements org.omg.PortableServer.AdapterActivator {
      public boolean unknown_adapter(...){...}
  }

  AdapterActivatorオブジェクトのunknown_adapterメソッドは、org.omg.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. オペレーションの実行結果を返します。