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

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

トランザクションの開始

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

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

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

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

トランザクションを終了する

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

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

Consistent フラグと Done フラグ

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

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