2フェーズコミットプロトコルは、グローバルトランザクションに登録された複数のリソースの一貫性を保証するメカニズムです。2フェーズコミットプロトコルはコミット処理を2つのフェーズで実行して、一貫性を保証します。最初のフェーズは、準備フェーズと呼ばれます。トランザクションマネージャは、各リソースマネージャに対してトランザクション作業をコミットする準備ができているかどうかを確認します。作業をコミットできるリソースマネージャは、コミット可能であるということを通知します。すべてのリソースマネージャがコミット可能であることを確認後に、リソースマネージャに対してコミット処理を行います。準備フェーズでコミットできないリソースマネージャが存在する場合には、トランザクションをロールバックします。
トランザクションを要求するJava EEコンポーネントは、Interstageの2フェーズコミットメカニズムを意識する必要がありません。Java EEコンポーネントは、ローカルトランザクションを使用する場合と同様のトランザクション制御を行うことで、2フェーズコミットの処理はコンテナが自動的に行います。
2フェーズコミットプロトコルでは、システム障害時に結果の原子性を保証するため、トランザクションマネージャはトランザクションの進捗状況を記録します。この進捗状況を記録するログをトランザクションログと呼びます。詳細は、「3.9.4 トランザクションログ」を参照してください。
インダウトトランザクション
2フェーズコミットプロトコルでは、すべてのリソースマネージャがコミット可能であることを確認後に、リソースマネージャに対してコミット処理を行うため、複数のリソースを使った場合の原子性が向上します。しかし、準備フェーズですべてのリソースマネージャがコミット可能であることを通知した後に、以下の理由によりコミットフェーズが失敗する可能性があります。この場合、コミットフェーズが失敗したトランザクションをインダウトトランザクションと呼びます。
サーバマシンがクラッシュした。
リソースマネージャとのネットワーク接続が切断された。
使用している製品で予期せぬ異常が発生した。
インダウトトランザクションは、自動的に回復処理を行います。
Interstage Java EE 6 DASサービス起動時にインダウト状態のトランザクションに対して自動的に回復処理を実行します。自動的に回復処理を実行する場合には、asadminコマンドのsetサブコマンドでautomatic-recoveryをtrueに設定してください。次回Interstage Java EE 6 DASサービス起動時から有効になります。
トランザクションサービス定義の詳細は、「8.4.11 トランザクションサービスの定義項目」を参照してください。
回復処理が実行されると、トランザクションマネージャは登録されているXAリソースに対してrecoverメソッドを呼び出し、インダウト状態のリソースに対してコミットまたはロールバック処理を実行してトランザクションを回復します。