第4章 トランザクションリカバリ

4.1. 障害回復

リカバリ時、トランザクションマネージャはシステム内のアプリケーションにより利用中のリソースマネージャすべてと通信できなければなりません。各リソースマネージャに対し、トランザクションマネージャはXAResource.recover メソッドを使いprepared あるいは heuristically completedのステートにあるトランザクションの一覧をリトリーブします。通常、システム管理者は、システムにデプロイされているアプリケーションが使うトランザクションリソースファクトリをすべて設定します。例えば、JDBC XADataSource オブジェクトはJDBC XAConnection オブジェクトのファクトリです。
XAResource オブジェクトは複数のシステム障害間で永続性がないため、トランザクションマネージャは、システム障害が発生する前にトランザクションに参加している可能性のあるリソースマネージャを示すXAResource オブジェクトを獲得する機能が必要です。例えば、トランザクションマネージャはJNDI 検索メカニズムを利用し、各トランザクションリソースファクトリからの接続を取得してから、各接続に対し該当のXAResource オブジェクトを取得しているなどです。トランザクションマネージャは、XAResource.recoverメソッドを呼出し、各リソースマネージャに対しprepared あるいは heuristically completed のステートにあるトランザクションに戻るよう指示します。

注記

XAリカバリを実行している場合、JBoss Transaction Service にどの種類のXid を回復できるか伝える必要があります。JBoss Transaction Service が作成するXid はそれぞれ、一意のノード識別子が埋め込まれており、JBoss Transaction Service はリクエストを受けたノード識別子と一致するトランザクションとステートを回復するだけです。利用するノード識別子は、JBoss Transaction Service にcom.arjuna.ats.jta.xaRecoveryNodeという名前で開始するプロパティにて提示する必要があります。複数の値を入れることが可能です。* の値は、ノード識別子が何であれ、全トランザクションのリカバリ (ロールバックも可能な場合もある) を強制します。これは慎重に利用するようにしてください。
JBossJTA JDBC 2.0ドライバが利用中の場合、JBossJTA は、XAResource のクラッシュリカバリをすべて自動的に管理します。そうでない場合は、以下のリカバリメカニズムのうち1つを使います。
  • XAResourceがシリアル化可能な場合、トランザクションのコミット時にはシリアル化された形式が保存され、リカバリ時にはこの形式が利用されます。再作成されたXAResource は有効で、紐付いたデータベース上でリカバリを駆動することができると想定されています。
  • com.arjuna.ats.jta.recovery.XAResourceRecoverycom.arjuna.ats.jta.recovery.XARecoveryResourceManagercom.arjuna.ats.jta.recovery.XARecoveryResourceインターフェースを利用します。詳細については、障害回復に関するJDBCの項を参照してください。