Borland(R) Enterprise Server VisiBroker(R) デベロッパーズガイド

[目次][索引][前へ][次へ]

7.2 POAポリシー

各POAは,その特徴を定義するポリシーの集合から成ります。新しいPOAを作成する場合は,各ポリシーのデフォルトを使用するか,または要件に合わせて異なる値を使用できます。ポリシーはPOAの作成時だけ設定でき,既存POAのポリシーは変更できません。POAは親POAのポリシーは継承しません。

次に,POAポリシーとその値,およびデフォルト値(rootPOAが使用)を説明します。

<この節の構成>
(1) スレッドポリシー
(2) ライフスパンポリシー
(3) ID Uniquenessポリシー
(4) ID Assignmentポリシー
(5) Servant Retentionポリシー
(6) Request Processingポリシー
(7) Implicit Activationポリシー
(8) Bind Supportポリシー

(1) スレッドポリシー

スレッドポリシーでは,POAが使用するスレッドモデルを指定します。ThreadPolicyに使用できる値は次のとおりです。

ORB_CTRL_MODEL(デフォルト)
POAはリクエストをスレッドに割り当てる責任を負います。マルチスレッド環境では,同時に発生した複数のリクエストは,複数のスレッドで処理されます。Borland Enterprise Server VisiBrokerはマルチスレッドモデルを使用することに注意してください。

SINGLE_THREAD_MODEL
POAプロセスはリクエストを順次処理します。マルチスレッド環境では,POAがサーバントおよびサーバントマネージャに行う呼び出しはすべてスレッドセーフです。

MAIN_THREAD_MODEL
呼び出しは識別されたメインスレッドで処理されます。このポリシーを使用するPOAに対するすべてのリクエストは,順次処理されます。マルチスレッド環境では,このポリシーを使用するPOAによって呼び出されるサーバントのすべての処理は,スレッドセーフでなければなりません。
アプリケーションプログラマは,ORB::run()メソッドまたはORB::perform_work()メソッドを呼び出してメインスレッドを指定します。このメソッドの詳細については,「7.4 オブジェクトの活性化」を参照してください。

(2) ライフスパンポリシー

ライフスパンポリシーでは,POAでインプリメントされたオブジェクトのライフスパンを指定します。LifespanPolicyに使用できる値は次のとおりです。

TRANSIENT(デフォルト)
POAが活性化したトランジェントオブジェクトは,そのオブジェクトが生成されたPOA内でしか存在できません。POAが非活性化されてから,POAが生成したオブジェクトリファレンスを使おうとすると,OBJECT_NOT_EXIST例外が発生します。

PERSISTENT
POAが活性化したパーシステントオブジェクトは,そのオブジェクトが最初に生成されたプロセスが消滅しても存在できます。パーシステントオブジェクトで呼び出されたリクエストは,プロセス,POA,およびオブジェクトをインプリメントしたサーバントを暗黙的に活性化します。

(3) ID Uniquenessポリシー

ID Uniqueness(オブジェクトIDの一意性)ポリシーでは,多くのabstractオブジェクトが一つのサーバントを共有できるようにします。IdUniquenessPolicyに使用できる値は次のとおりです。

UNIQUE_ID(デフォルト)
活性化されたサーバントはオブジェクトIDを一つだけサポートします。

MULTIPLE_ID
活性化されたサーバントは一つ以上のオブジェクトIDを持てます。オブジェクトIDはランタイムに呼び出されているメソッド内で決定しなければなりません。

(4) ID Assignmentポリシー

ID Assignment(ID割り当て)ポリシーでは,サーバアプリケーションとPOAのどちらがオブジェクトIDを生成するかを指定します。IdAssignmentPolicyに使用できる値は次のとおりです。

USER_ID
オブジェクトはアプリケーションによってオブジェクトIDを割り当てられます。

SYSTEM_ID(デフォルト)
オブジェクトはPOAによってオブジェクトIDを割り当てられます。PERSISTENTポリシーも設定している場合,オブジェクトIDは同じPOAのすべての実体化にわたって一意でなければなりません。

通常,USER_IDはパーシステントオブジェクト用であり,SYSTEM_IDはトランジェントオブジェクト用です。

(5) Servant Retentionポリシー

Servant Retention(サーバント保持)ポリシーでは,アクティブオブジェクトマップ内のアクティブなサーバントをPOAが保持するかどうかを指定します。ServantRetentionPolicyに指定できる値は次のとおりです。

RETAIN(デフォルト)
POAはアクティブオブジェクトマップにアクティブなサーバントを保持します。そのため,POAにオブジェクトの探索を要求すると,アクティブオブジェクトマップからの探索が行われます。RETAINは通常,ServantActivatorまたはPOAの明示的な活性化メソッドと一緒に使用します。

NON_RETAIN
POAはアクティブオブジェクトマップにアクティブなサーバントを保持しません。そのため,POAにオブジェクトの探索を要求しても,アクティブオブジェクトマップからの探索は行われません。
NON_RETAINは通常,ServantLocatorと一緒に使用しなければなりません。

ServantActivatorとServantLocatorは,サーバントマネージャのタイプです。サーバントマネージャの詳細については,「7.5 サーバントとサーバントマネージャの使用」を参照してください。

(6) Request Processingポリシー

Request Processing(リクエスト処理)ポリシーでは,POAのリクエストの処理方法を指定します。RequestProcessingPolicyに指定できる値は次のとおりです。

USE_ACTIVE_OBJECT_MAP_ONLY(デフォルト)
アクティブオブジェクトマップにオブジェクトIDが存在しなければ,OBJECT_NOT_EXIST例外が返されます。POAにこの値を指定する場合は,必ずRETAINポリシーも指定してください。

USE_DEFAULT_SERVANT
アクティブオブジェクトマップにオブジェクトIDが存在していないか,またはNON_RETAINポリシーが設定されていれば,リクエストはデフォルトサーバントにディスパッチされます。デフォルトサーバントが登録されていなければ,OBJ_ADAPTER例外が返されます。POAにこの値を指定する場合は,必ずMULTIPLE_IDポリシーも指定してください。

USE_SERVANT_MANAGER
アクティブオブジェクトマップにオブジェクトIDが存在していないか,またはNON_RETAINポリシーが設定されていれば,サーバントマネージャを使用してサーバントを取得します。

(7) Implicit Activationポリシー

Implicit Activation(暗黙的な活性化)ポリシーでは,POAがサーバントの暗黙的な活性化をサポートするかどうかを指定します。ImplicitActivationPolicyに指定できる値は次のとおりです。

IMPLICIT_ ACTIVATION
POAはサーバントの暗黙的な活性化をサポートします。サーバントを活性化するには,次の二つの方法があります。
  • POA::servant_to_reference()メソッド(C++),またはorg.omg.PortableServer.POA.servant_to_reference()メソッド(Java)を使用してサーバントをオブジェクトリファレンスに変換する。
  • サーバントで_this()メソッドを呼び出す。
POAにこの値を指定する場合は,必ずSYSTEM_IDポリシーとRETAINポリシーも指定してください。

NO_IMPLICIT_ACTIVATION(デフォルト)
POAはサーバントの暗黙的な活性化をサポートしません。

(8) Bind Supportポリシー

Bind Support(バインドサポート)ポリシー(Borland Enterprise Server VisiBroker固有のポリシー)はPOAとアクティブなオブジェクトのBorland Enterprise Server VisiBroker osagentへの登録を制御します。数千ものオブジェクトがある場合,そのすべてをosagentに登録するのは好ましくありません。その代わりに,POAをosagentに登録できます。クライアントがリクエストすると,osagentがリクエストを正しく転送できるように,POA名とオブジェクトIDがバインドリクエストに含まれます。

BindSupportPolicyに指定できる値は次のとおりです。

BY_INSTANCE
すべてのアクティブなオブジェクトをosagentに登録します。POAにこの値を指定する場合は,必ずPERSISTENTポリシーとRETAINポリシーも指定してください。

BY_POA(デフォルト)
POAだけをosagentに登録します。POAにこの値を指定する場合は,必ずPERSISTENTポリシーも指定してください。

NONE
POAもアクティブなオブジェクトもosagentに登録しません。