3.2.1 アクティブ化ポリシー

TPフレームワークでは、状態管理はアクティブ化ポリシーによって提供されます。このポリシーは、サーバントの作成および破棄ではなく、特定のIDLインタフェースに対するサーバントのアクティブ化および非アクティブ化を制御します。このポリシーが適用されるのは、TPフレームワークを使用するCORBAオブジェクトのみです。

アクティブ化ポリシーは、CORBAオブジェクトがメモリー内でアクティブ化しているデフォルトの期間を決定します。CORBAオブジェクトがPOA内でアクティブ化されているのは、POAのアクティブ・オブジェクト・マップにオブジェクトIDと既存のサーバントを関連付けるエントリが入っている場合です。オブジェクトを非アクティブ化すると、オブジェクトIDとアクティブ化されたサーバントとの関連付けが削除されます。method(デフォルト)、transactionまたはprocessの3つのアクティブ化ポリシーのいずれかを選択できます。

ノート:

アクティブ化ポリシーは、OMG IDLのコンパイル時に構成するICFファイルで設定されます。ICFファイルの詳細は、「実装構成ファイル(ICF)」を参照してください。

アクティブ化ポリシーの内容は次のとおりです:

  • method(これはデフォルトのアクティブ化ポリシーです。)

    CORBAオブジェクトのアクティブ化、つまりオブジェクトIDとサーバントとの関連付けは、メソッドが終了するまで維持されます。メソッドが終了すると、オブジェクトは非アクティブ化されます。オブジェクト参照で次のメソッドが呼び出されると、CORBAオブジェクトはアクティブ化されます。つまり、オブジェクトIDが新しいサーバントに関連付けられます。この動作は、Oracle Tuxedoのステートレス・サービスとほぼ同じです。

  • transaction

    CORBAオブジェクトのアクティブ化、つまりオブジェクトIDとサーバントとの関連付けは、トランザクションが終了するまで維持されます。トランザクション中は、オブジェクトの複数のメソッドを呼び出すことができます。オブジェクトは最初のメソッド呼出しの前にアクティブ化され、次のいずれかの方法で非アクティブ化されます。

    • オブジェクトがアクティブ化されたときにユーザーが開始したトランザクションが有効な場合、オブジェクトは、トランザクションがコミットまたはロールバックされる、またはサーバーが通常の方法で停止される、という2つの処理のうち、いずれか先に行われた処理に伴って非アクティブ化されます。2番目の処理には、tmshutdownまたはtmadminコマンドが使用されます。これらのコマンドについては、オンライン・マニュアルの『Oracle Tuxedoコマンド・リファレンス』を参照してください。
    • TPオブジェクトがアクティブ化されたときにユーザーが開始したトランザクションが有効ではない場合、TPオブジェクトはメソッドが終了すると非アクティブ化されます。
    transactionアクティブ化ポリシーでは、2フェーズ・コミット・アルゴリズムを実行する前に、オブジェクトがトランザクションの結果に関して支持するかどうかを判断できます。オブジェクトがトランザクションのロールバックを支持する場合は、Tobj_ServantBase::deactivate_objectメソッドのCurrent.rollback_only()を呼び出します。トランザクションのコミットを支持する場合は、Current.rollback_only()を呼び出しません。

    ノート:

    これは、Oracle Tuxedoの会話型サービスに似たリソース割当てモデルです。ただし、このモデルの方が、システム・リソースの使用量が少ないという点で、Oracle Tuxedoの会話型サービスよりもコストが小さくなります。この理由は、Oracle Tuxedo ORBのマルチコンテキスト・ディスパッチ・モデル、つまり、1つのサーバー用のサーバントがメモリー内に同時に多数存在するモデルを使用しているからです。このモデルでは、多数のクライアントにサービスし、同時にアクティブ化されている多数のサーバントが1つのサーバー・プロセスを共有できます。Oracle Tuxedoシステムでは、プロセスは、会話の有効期間だけ1つのクライアント専用となり、1つのサービスにのみ割り当てられます。
  • process

    CORBAオブジェクトは、非アクティブ化状態で呼び出されたときにアクティブ化され、デフォルトではプロセスが終了するまでその状態を持続します。

    ノート:

    TPフレームワークAPIには、activation policyprocessに設定されたオブジェクトを非アクティブ化するタイミングをアプリケーションで制御するためのインタフェース・メソッド(TP::deactivateEnable)が用意されています。このメソッドの説明については、「TP::deactivateEnable()」を参照してください。