BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   BEA Tuxedo アプリケーションの設定   |   先頭へ   |   前へ   |   次へ   |   目次

 


2 フェーズ・コミットを使用してトランザクションをコミットする

2 フェーズ・コミットとは、トランザクションのコミットを確実に行うためのアルゴリズムです。

このアルゴリズムのしくみをわかりやすく説明するため、次の状況を例にとります。6 人の仲間が、家を 1 週間借りて休暇を過ごす予定を立てているとします。6 人共、それぞれ賃料の 6 分の 1 の金額しか負担できません。つまり、6 人のうち誰かが参加できないと、家を借りることはできなくなります。

  1. この計画の第 1 フェーズでは、幹事が出席を確認し、すべてのメンバから 6 分の 1 の賃料を集金します。1 人でも欠席者が出たら、幹事はグループのすべてのメン バに連絡し、家を借りることができなくなったことを伝えます。ただし、すべて のメンバの出席が確認でき、6 人分の賃料を徴収できれば、第 1 フェーズは成功 します。

  2. 第 2 フェーズでは、幹事はグループのすべてのメンバに対し、計画が予定どおり に行われることを通知します。

2 フェーズ・トランザクションのコミット処理も、この計画と同じように実行されます。

  1. 第 1 フェーズでは、トランザクション・コーディネータがトランザクションに参 加する可能性があるパーティシパントにコンタクトします。すべてのパーティシ パントは、トランザクションの結果の確定に同意しますが、すぐには行いませ ん。パーティシパントは、情報をディスクに記録し、第 2 フェーズを完了できる ようにします。すべてのパーティシパントがコミットに同意すると、トランザク ション・コーディネータはそれを記録し、結果は確定されます。パーティシパン トの同意がログに記録されると、第 1 フェーズは終了します。

  2. 第 2 フェーズでは、コーディネータは各パーティシパントに決定を通知し、リ ソースへの更新を確定します。

トランザクションの影響を処理する

アプリケーション・モジュールが別のモジュールから呼び出され、トランザクションに参加することを、トランザクションの影響といいます。アプリケーション・モジュールが影響を受けると、BEA Tuxedo システムはすべてのパーティシパントをトラッキングして、第 2 フェーズに関連付けるパーティシパントを決定します。次の図は、システムがパーティシパントをトラッキングする方法を示します。

トランザクション上の影響


 

この図では、クライアント 1 がトランザクションを開始し、A、B、C の 3 つのサービスを呼び出しています。サービス A、B、C は、トランザクションの開始後に呼び出されたため、トランザクションの影響を受けています。サーバ A、B、C によって実行される作業はすべて、クライアント 1 によって開始されたトランザクションの一部です。すべての作業は、1 つの単位で実行され、すべてが成功するか、または失敗して tpabort の呼び出しによりロールバックされるかのどちらかになります。トランザクションが失敗すると、初期状態に戻り、リソース・マネージャ上のトランザクションの結果は元に戻されます。トランザクション内で認識されていないリソース・マネージャや、トランザクション外からアクセスされたリソース・マネージャは、ロールバックできません。

ATMI を使用して 2 フェーズ・コミットの前にトランザクションの整合性を確保する

トランザクションに関わる各リソースで実行される作業は、2 フェーズ・コミットを開始する前に、すべて終了していなければなりません。ATMI を使用すると、2 フェーズ・コミット・プロトコルの開始時に、すべてのトランザクション作業を中止できます。

次に、2 フェーズ・コミットを実行する前に、ATMI を使用してトランザクション処理を中止する手順を示します。

  1. Client_1 は tpbegin() を使ってトランザクションを開始します。

  2. Client_1 は、tpcall() を使用して Service_A を呼び出します。Service_A の特徴 は、以下のとおりです。

    1. トランザクションの影響を受けます。

    2. 操作を実行します。

    3. tpreturn() を呼び出します。

    4. トランザクション処理を終了します。

  3. Client_1 は、tpcall() を使用して Service_B を呼び出します。Service_B の特徴 は、以下のとおりです。

    1. トランザクションの影響を受けます。

    2. 操作を実行します。

    3. tpreturn() を呼び出します。

    4. トランザクション処理を終了します。

  4. Client_1 は、tpcall() を使用して Service_C を呼び出します。Service_C の特徴 は、以下のとおりです。

    1. トランザクションの影響を受けます。

    2. 操作を実行します。

    3. tpreturn() を呼び出します。

    4. トランザクション処理を終了します。

  5. Client_1 は、tpcommit() を使用して、コミットのプロセスを開始します。

トランザクションの処理中に、呼び出されたサービスが別のサービスを実行しているか、またはオープン中の会話に関連付けられている場合、ATMI はそのアクティビティをトラッキングし、アクティビティが完了するまでプロセスがコミットされないようにします。

ATMI は、呼び出されたすべてのサービスによるトランザクション処理が成功した場合にのみ、トランザクションをコミットします。すべての処理が成功すると、トランザクション・マネージャは、トランザクション内で実行されたすべての更新が確定されたことをリソース・マネージャに通知します。

関連項目

 

先頭へ戻る 前のトピックへ 次のトピックへ