3

(手動によるリソースの登録と削除を想定しています。)

トランザクション更新を実行する予定の XA 対応リソース/データソースが多数あります。さらに、XA 対応のデータソースの一部は、(他のリソースを必要とせずに) 分離して更新できます。

参加しているデータソースを使用してすでに多数のトランザクションをコミットしていると仮定すると、データソースへの一方的な更新のために TransactionManager を無視できますか。

グローバル トランザクションを開始して、リソース自体に直接コミットしないのでしょうか? これが正しいアプローチであると仮定すると、その後、副作用なしでリソースをトランザクションに参加させることができますか?

ありがとう、

クリス

4

1 に答える 1

3

XA リソースは XA をサポートします。必要ありません。したがって、XA をサポートするリソースを介して非 XA トランザクションを開始し、それをローカルでコミットすることは完全に可能です。

2 番目の質問は明確ではありません。ローカル トランザクションのリソースを XA トランザクションに追加しますか? サポートされているユースケースかどうかはわかりません。または、「ローカル トランザクションをコミットした後で、リソースを XA トランザクションに追加できますか?」という質問があります。はい、できます。

たとえば、データベース接続の例を見てみましょう。接続を介してローカル トランザクションが開始されると、トランザクション ID はデータベース内にのみ存在します。コミットされると、その ID はなくなり、接続は元の状態に戻ります。つまり、トランザクション内ではありません。接続は、任意の XA トランザクションに追加できます。

現在、XA トランザクションを開始すると、複数の接続 (たとえば、クラスター内の異なる JVM から) が同じトランザクション ID を共有でき、DB の観点からはそれらは同じトランザクション内にあります。データベースの独自のトランザクション ID を持つローカル トランザクションに別の接続がある場合、別の ID を持つ既存の XA にその接続 (さらに重要なことに、その中で行われた変更) をどのように追加しますか? それは厄介なビジネスであり、サポートされていないと思います。

于 2011-03-27T20:06:51.617 に答える