COM+ での自動トランザクションの管理

COM+ プログラミング モデルでは、ビジネス ロジックの有効化やデータベース接続の確立など、コンポーネントが最善を尽くすようにコンポーネントを設計し、Microsoft Windows のトランザクション処理フレームワークに依存してトランザクションを自動化できます。

トランザクションの開始

COM+ は、次のいずれかの条件が発生すると、トランザクションを自動的に開始します。

  • トランザクション以外のクライアントが、トランザクションを必要とするコンポーネントまたは新しいトランザクションを必要とするコンポーネントを呼び出す場合。
  • トランザクション クライアントが新しいトランザクションを必要とするコンポーネントを呼び出す場合。

COM+ は、オブジェクトが新しいトランザクションを持つ必要があると判断した場合、最初にトランザクションを開始してから、オブジェクトをその中に配置します。 処理の手順は次のとおりです。

  1. COM+ はコンテキスト オブジェクトを作成し、 JIT アクティブ化 属性と 同期 属性の両方を必須に設定し、 整合性フラグと完了フラグ をそれぞれ True と False に設定します。
  2. COM+ は分散トランザクション コーディネーター (DTC) と通信してトランザクションを開始します。 DTC は物理トランザクションを調整します。
  3. DTC はトランザクション識別子を生成し、COM+ に渡します。 トランザクション識別子は、トランザクション境界を確立します。 トランザクションに参加しているすべてのオブジェクトは、同じ識別子を共有します。
  4. クライアントがオブジェクトを作成すると、COM+ によってトランザクション境界内でアクティブ化されます。

トランザクションの終了

COM+ は、次のいずれかの条件が発生したときに自動トランザクションをコミットまたは中止することで終了します。

  • トランザクションのルート オブジェクトが作業を完了し、COM+ によって解放されます。 ルート オブジェクトが非アクティブ化されると、トランザクションはコミットを試みます。
  • クライアントはルート オブジェクトを解放します。 参照がない場合、ルート オブジェクトは非アクティブ化され、トランザクションはコミットを試みます。
  • トランザクションがタイムアウトしきい値を超えています。 トランザクションがタイムアウト期間内にコミットされていない場合、トランザクションは自動的に中止され、トランザクションに関連付けられているすべてのオブジェクトが非アクティブ化されます。 既定のトランザクション タイムアウト期間は 60 秒です。

整合性フラグと完了フラグ

ルート オブジェクトへの通知によるトランザクションの高速化

SetComplete を呼び出して自動トランザクションを終了する