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

COM+ プログラミング モデルでは、コンポーネントが最適に動作する (ビジネス ロジックを有効にしたり、データベース接続を確立したりする) ようにコンポーネントを設計し、Microsoft Windows のトランザクション処理フレームワークを利用してトランザクションを自動化できます。

トランザクションの開始

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

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

COM+ は、オブジェクトに新しいトランザクションが必要であると判断した場合、まずトランザクションを開始し、その中にオブジェクトを配置します。 このプロセスには、以下のステップが含まれます。

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

トランザクションの終了

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

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

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

ルート オブジェクトに通知してトランザクションを高速化する

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