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

第5章 アプリケーションの開発(C++言語)> 5.3 サーバアプリケーションのプログラミング(Portable Object Adapter:POA)> 5.3.3 サーバアプリケーションと環境設定との関連付け

5.3.3.3 POA使用方法例

 サーバアプリケーションが上記のどちらの方法を使用するかによりPOAオブジェクトの構成方法が異なります。上記のそれぞれの場合について、POAオブジェクトの使用方法を説明します。

POAオブジェクト使用方法1:動的生成/環境変数OD_IMPLID使用

 POAオブジェクトの構成方法として一般的な方法です。

  1. POAを生成(任意のアダプタ名)します。
  2. 指定したインタフェースをもつオブジェクトリファレンスを、create_referenceメソッドで生成します。
  3. Servantを作成します。
  4. 生成したオブジェクトリファレンスのオブジェクトIDを取得します。
  5. ServantのインスタンスとオブジェクトIDの関連付けをPOAのAOMに登録します(活性化)。
  6. ネーミングサービスへオブジェクトリファレンスを登録(bind)します。

 上図では、インタフェースリポジトリID"IDL:Intfid1:1.0"のインタフェースをもつオブジェクトのインスタンスはPOA1オブジェクト(RootPOA)上で管理され、インタフェースリポジトリID"IDL:Intfid2:1.0"のインタフェースをもつオブジェクトのインスタンスはPOA2オブジェクト(子または子孫POAオブジェクト)上で管理されます。

 RootPOAオブジェクトで複数のオブジェクトを管理することも可能ですが、上記のような構成とすることにより、インタフェースごとに異なるPOAポリシで管理することが可能となります。

 アプリケーションを作成する場合は、create_reference()の代わりに、同じくPOAオブジェクトのメソッドであるservant_to_reference()を使用すると便利です。

  1. POAを生成します(任意のアダプタ名)。
  2. Servantを作成します。
  3. servant_to_reference()を発行し、オブジェクトリファレンスを取得します。
  4. ネーミングサービスへオブジェクトリファレンスを登録(bind)します。

 servant_to_reference()の結果、POAオブジェクトにServantオブジェクトとオブジェクトIDの関連付けの登録(活性化)が行われ、さらに、オブジェクトIDを内包するオブジェクトリファレンスが返されます。ServantオブジェクトはインタフェースリポジトリIDを内包しているため、create_reference()を使用した場合のように明示的に指定する必要がありません。
 また、オブジェクトIDは活性化時に自動生成されるため、意識する必要がありません(ただし、POAポリシにIMPLICIT_ACTIVATIONを指定する必要があります)。

POAオブジェクト使用方法2:事前生成/環境変数OD_IMPLID使用

 この方法はOD_or_admコマンドを使用し、オブジェクトリファレンスの生成とネーミングサービスへの登録を事前に行っている場合に使用します。インタフェースリポジトリID"IDL:Intfid1:1.0"のインタフェースをもつオブジェクトを管理するために、「子POAオブジェクト」を生成します。この際に、インタフェースリポジトリIDと同じ文字列(Stringオブジェクト)を設定します。

 Servantオブジェクトの活性化は、以下のように行います。

  1. Servantオブジェクトを作成します。
  2. Servantオブジェクトに対応するインタフェースリポジトリIDをアダプタ名としたPOAに対し、activate_object()を発行します。

 OD_or_admコマンドによりオブジェクトリファレンスの生成とネーミングサービスへの登録を事前に行っているため、アプリケーション上での生成と登録は必要ありません。

POAオブジェクト使用方法3:動的生成/環境変数OD_IMPLID未使用

 インプリメンテーション情報との関連付けを行うために、アダプタ名にインプリメンテーションリポジトリIDを指定して、RootPOAオブジェクトに対する子POAオブジェクトを作成します。
 次に、孫(またはその子孫)POAオブジェクトを作成し(アダプタ名は任意)、そのPOAオブジェクト上でcreate_reference()メソッドやservant_to_reference()メソッドを使用してオブジェクトリファレンスを作成します。
 Servantオブジェクトの活性化後、オブジェクトのインスタンス管理はこの孫(またはその子孫)POAオブジェクト上で行われます。この方法の場合、RootPOAオブジェクトではインスタンス管理を行うことはできません。

POAオブジェクト使用方法4:事前生成/環境変数OD_IMPLID未使用

 インプリメンテーション情報との関連付けを行うためには、上図の左側のように3階層でPOAオブジェクトを生成します。このとき、RootPOAオブジェクトの直下の子POAオブジェクト(POA2)は、インプリメンテーションリポジトリIDをアダプタ名に指定して生成します。次に、子POAオブジェクトのさらに子POAオブジェクト(孫POA:POA3, POA4)はインタフェースリポジトリIDをアダプタ名に指定して生成します。この結果、インプリメンテーション情報、インタフェース情報は、上図のようにPOAと関連付けられます。リポジトリID"IDL:Intfid2:1.0"のインタフェースをもつオブジェクトのインスタンス管理は、POA4オブジェクトで行われます。


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

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