|
|
2 フェーズ・コミットを使用してトランザクションをコミットする
2 フェーズ・コミットとは、トランザクションのコミットを確実に行うためのアルゴリズムです。
このアルゴリズムのしくみをわかりやすく説明するため、次の状況を例にとります。6 人の仲間が、家を 1 週間借りて休暇を過ごす予定を立てているとします。6 人共、それぞれ賃料の 6 分の 1 の金額しか負担できません。つまり、6 人のうち誰かが参加できないと、家を借りることはできなくなります。
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 を使用してトランザクション処理を中止する手順を示します。
トランザクションの処理中に、呼び出されたサービスが別のサービスを実行しているか、またはオープン中の会話に関連付けられている場合、ATMI はそのアクティビティをトラッキングし、アクティビティが完了するまでプロセスがコミットされないようにします。
ATMI は、呼び出されたすべてのサービスによるトランザクション処理が成功した場合にのみ、トランザクションをコミットします。すべての処理が成功すると、トランザクション・マネージャは、トランザクション内で実行されたすべての更新が確定されたことをリソース・マネージャに通知します。
関連項目
|
Copyright © 2001 BEA Systems, Inc. All rights reserved.
|