7.4. リカバリモジュール

リカバリをしたい各XA リソースには、jbossjta-properties.xmlの"jta" セクションに設定されている該当のリカバリモジュールが必要となります。各リカバリモジュールは、com.arjuna.ats.jta.recovery.XAResourceRecoveryを継承する必要があり、Red Hat は JDBC およびJMS XA リソースに対する実装を提供しています。

7.4.1. JDBC リカバリ

JBoss Enterprise Application Platform にはJCAのリカバリ自動登録を含むようになりました。そのため、以前のリリースで使われていたAppServerJDBCXARecovery はデフォルトで無効になっており、当プラットフォームの今後のリリースでは本プロパティは完全に削除される予定です。

7.4.1.1. ベンダー固有のデータベース情報

Oracle
Oracle が正しく設定されていない場合、ログファイルに以下のフォローが示されるでしょう。
WARN  [com.arjuna.ats.jta.logging.loggerI18N] [com.arjuna.ats.internal.jta.recovery.xarecovery1] Local XARecoveryModule.xaRecovery  got XA exception javax.transaction.xa.XAException, XAException.XAER_RMERR
このエラーを解決するには、Oracle ユーザが適切なテーブルへアクセスしリカバリを完了できるようにします。
GRANT SELECT ON sys.dba_pending_transactions TO user;
GRANT SELECT ON sys.pending_trans$ TO user;
GRANT SELECT ON sys.dba_2pc_pending TO user;
GRANT EXECUTE ON sys.dbms_xa TO user;
上記では、user はJBoss からOracle に接続するために定義されたユーザという前提です。また、Oracle 10g R2 (bug 5945463修正済み) あるいは 11gの使用を前提としており、11g 以前のパッチが当てられていないバージョンを使っている場合は、最後のGRANT EXECUTEを以下に変更してください。
GRANT EXECUTE ON sys.dbms_system TO user;
PostgreSQL
用意した (XA など) トランザクションを有効化する方法については、PostgreSQL 文書を参照してください。PostgreSQLのJDBCドライバがバージョン8.4-701 は、org.postgresql.xa.PGXAConnection に問題があり、特定の状況でリカバリーを中断してしまいます。新しいバージョンでこれは修正されています。
MySQL
http://bugs.mysql.com/bug.php?id=12161によると、XA トランザクションリカバリは MySQL を使用するとできないようです。MySQL 6.1 で対応される予定です。JBoss Enterprise Application Platform 5 リリースノートの JBPAPP-2576 も参照してください。
DB2
DB2 は、クラッシュ/障害が起こった後にアプリケーションサーバーが再起動されると指定の再同期ステージになりますが、その再同期中にのみXAResource.recover の呼出しを期待します。これは、DB2 の設計における問題で、本書では対象外となっています。