非XAデータソースでJTAトランザクションを使用できるという事実に混乱しました。 ドキュメントへのリンク 。 XA /非XAデータソースの違いは何ですか?なぜXAデータソースを使用する必要があるのですか?
XAトランザクションは、最も一般的な用語では、複数のリソースにまたがる「グローバルトランザクション」です。非XAトランザクションには、常に1つのリソースのみが含まれます。
XAトランザクションには、1つ以上のデータベース(またはJMSのような他のリソース)がすべて単一のグローバルトランザクションに関与する調整トランザクションマネージャーが含まれます。非XAトランザクションにはトランザクションコーディネーターがなく、単一のリソースがすべてのトランザクション作業を実行しています(これはローカルトランザクションとも呼ばれます)。
jta = "true"、トランザクションは自動的にコミットします。
私はこのこと(XA以外のデータソースで「JTAを使用」オプション)について自分で疑問に思っていたので、いくつかの構成をテストしました。 2つのMySQLサーバーに接続する分散トランザクションがあります。
ここに私の結果があります。私が持っている場合:
結果:エラー「メタ認識オブジェクトの入力時にトランザクションに参加できませんでした。」
結果:彼らは分散トランザクションに参加しません。それぞれが個別にコミットします。
結果:#2と同じ
結果:動作します!
これらから、「JTAを使用」オプションは、XAデータソースがある場合に分散トランザクションに参加するかどうかを示すように見えます。