11.4. 最終リソースコミット最適化 (LRCO: Last Resource Commit Optimization)

XA トランザクションプロトコルは、2フェーズのコミットプロトコルを用いることで ACID プロパティを提供するように設計されていますが、モデルが常に正しいというわけではありません。時には、XA 非対応のリソースマネージャーがトランザクションに参加できるようにする必要がある場合もあります。これは通常、分散トランザクションに対応していないデータストアを使う場合に該当します。
このような場合、Last Resource Commit Optimization (LRCO)と呼ばれる技術を使うことができます。これは、Last Resource Gambit と呼ばれることもあります。この技術を使用すると、1 フェーズ対応リソースがトランザクションの prepare フェーズの最後に処理され、その時にコミットが試行されます。コミットに成功すると、トランザクションログが書き込まれ、残りのリソースはフェーズ 2 コミットに進みます。最後のリソースのコミットに失敗すると、トランザクションはロールバックされます。このプロトコルにより、 ほとんどのトランザクションは普通通りに完了しますが、エラーの種類によっては不整合なトランザクション結果が生じる原因となります。そのため、 他に手段がない場合のみ LRCO を使ってください。トランザクションに単一の <local-tx-datasource> が使用される場合、LRCO が自動的に適用されます。その他の場合、特別なマーカーインターフェースを使用して最終リソースを指定することが可能です。詳細は JBoss Transactions のプログラマーガイドを参照してください。
同じトランザクションに1フェーズリソースを複数使うと、トランザクション的に安全ではないため、推奨されません。JBoss Transaction Service は、2番目のこのようなリソースをエラーとして登録するよう試行し、トランザクションを終了します。この種のエラーは JBoss Application Server のレガシーバージョンから移行する際に最も頻繁に見られます。できる限り、<local-tx-datasource> は <xa-datasource> に変換しこの問題を解決します。