![]() ![]() ![]() ![]() |
Oracle Tuxedo CORBA TP フレームワークのアプリケーション プログラミング インタフェース (API) には、オブジェクトをアクティブ化および非アクティブ化するためのコールバック メソッドが用意されています。これらのメソッドを使用すると、アプリケーション コードに CORBA オブジェクトの柔軟な状態管理スキーマを実装できます。
状態管理とは、オブジェクトのアクティブ化および非アクティブ化時にオブジェクトの状態の保存および復元を制御する方法のことです。状態管理は、サーバの性能およびリソース使用量に影響を与える、アクティブ化されたオブジェクトの有効期間にも影響します。TP フレームワークの外部 API には、activate_object()
および deactivate_object()
メソッドが含まれています。これらのメソッドは、状態管理コードを配置可能な場所を示します。また、TP フレームワーク API には、ユーザがオブジェクトをアクティブ化するタイミングを制御できるようにするための deactivateEnable()
メソッドが含まれています。アクティブ化されたオブジェクトのデフォルトの有効期間は、OMG IDL のコンパイル時に実装に割り当てたポリシーによって制御されます。
CORBA オブジェクトがアクティブ化されている間、オブジェクトの状態はサーバント内に格納されます。この状態は、オブジェクトが最初に呼び出されたとき、つまりオブジェクト参照の作成後に CORBA オブジェクトに対してメソッドが最初に呼び出されたときと、オブジェクトが非アクティブ化されて以降の呼び出しで初期化しなければなりません。
CORBA オブジェクトが非アクティブ化されている間、オブジェクトの状態をサーバントがアクティブ化されていたプロセスの外部に保存する必要があります。オブジェクトがアクティブ化されたときには、オブジェクトの状態を復元する必要があります。オブジェクトの状態は、共有メモリ、ファイル、データベースなどに保存できます。プログラマは、オブジェクトの状態の構成要素と、オブジェクトを非アクティブ化する前に何を保存し、オブジェクトをアクティブ化した後に何を復元するかを決定する必要があります。
実装コンフィグレーション ファイル (ICF) を使用すると、アクティブ化ポリシーを設定して、各実装でアクティブ化されたオブジェクトの有効期間を設定できます。ICF ファイルでは、アクティブ化ポリシーを指定することで、オブジェクトの状態を管理します。アクティブ化ポリシーは、CORBA オブジェクトがメモリ内でアクティブ化している期間を決定します。CORBA オブジェクトがポータブル オブジェクト アダプタ (POA) 内でアクティブ化されているのは、POA のアクティブ オブジェクト マップにオブジェクト ID と既存のサーバントを関連付けるエントリが入っている場合です。オブジェクトを非アクティブ化すると、オブジェクト ID とアクティブ化されたサーバントとの関連付けが削除されます。
[#pragma activation_policy method|transaction|process]
[#pragma transaction_policy never|ignore|optional|always]
[#pragma concurrency_policy user_controlled|system_controlled]
[#pragma retry_policy never|always]
[Module module-name {]
implementation [implementation-name]
{
implements (module-name::interface-name);
[activation_policy (method|transaction|process);]
[transaction_policy (never|ignore|optional|always);]
[concurrency_policy (user_controlled|system_controlled);]
[retry_policy (never|always)];
};[};]
pragmas
activation_policy
、transaction_policy
、concurrency_policy
、または retry_policy
文を持たないすべての実装用の ICF 全体のデフォルト ポリシーとして、特定のポリシーを設定できます。この機能により、プログラマは、実装ごとにポリシーを指定する必要がなくなります。また、デフォルトを上書きすることもできます。
Module module-name
module-name
変数は、OMG IDL ファイルでオプションの場合はオプションです。この変数は、スコープとグループを指定する場合に使用します。この変数を使用する場合は、OMG IDL ファイル内の使い方と一貫性を持たせる必要があります。
implementation-name
implements (module-name::interface-name)
activation_policy
transaction_policy
concurrency_policy
retry_policy
コード リスト 2-1 は、ICF ファイルの例を示しています。
module POA_University1
{
implementation CourseSynopsisEnumerator_i
{
activation_policy ( process );
transaction_policy ( optional );
implements ( University1::CourseSynopsisEnumerator );
};
};
module POA_University1
{
implementation Registrar_i
{
activation_policy ( method );
transaction_policy ( optional );
implements ( University1::Registrar );
};
};
module POA_University1
{
implementation RegistrarFactory_i
{
activation_policy ( process );
transaction_policy ( optional );
implements ( University1::RegistrarFactory );
};
};
ICF ファイルの作成には、手動でコーディングする方法と、genicf
コマンドを使用して OMG IDL ファイルから作成する方法があります。genicf
コマンドの構文およびオプションについては、『Tuxedo コマンド リファレンス』を参照してください。
『Tuxedo CORBA サーバ アプリケーションの開発方法』の「Oracle Tuxedo CORBA サーバ アプリケーションの作成手順」
![]() ![]() ![]() |