web-dev-qa-db-ja.com

jta = "true"のnonXADatasourceとXADataSourceの違いは何ですか?

非XAデータソースでJTAトランザクションを使用できるという事実に混乱しました。 ドキュメントへのリンク 。 XA /非XAデータソースの違いは何ですか?なぜXAデータソースを使用する必要があるのですか?

17
user3663882

XAトランザクションは、最も一般的な用語では、複数のリソースにまたがる「グローバルトランザクション」です。非XAトランザクションには、常に1つのリソースのみが含まれます。

XAトランザクションには、1つ以上のデータベース(またはJMSのような他のリソース)がすべて単一のグローバルトランザクションに関与する調整トランザクションマネージャーが含まれます。非XAトランザクションにはトランザクションコーディネーターがなく、単一のリソースがすべてのトランザクション作業を実行しています(これはローカルトランザクションとも呼ばれます)。

jta = "true"、トランザクションは自動的にコミットします。

29
ashokhein

私はこのこと(XA以外のデータソースで「JTAを使用」オプション)について自分で疑問に思っていたので、いくつかの構成をテストしました。 2つのMySQLサーバーに接続する分散トランザクションがあります。

ここに私の結果があります。私が持っている場合:

  1. 2つの非XAデータソース、両方ともJTA = "true"を持っています

結果:エラー「メタ認識オブジェクトの入力時にトランザクションに参加できませんでした。」

  1. 1つのJTA = "true"を持つ2つの非XAデータソース

結果:彼らは分散トランザクションに参加しません。それぞれが個別にコミットします。

  1. JTA = "false"のXA 1つと非XA 1つ、

結果:#2と同じ

  1. JTA = "true"の1つのXAと1つの非XA。

結果:動作します!

これらから、「JTAを使用」オプションは、XAデータソースがある場合に分散トランザクションに参加するかどうかを示すように見えます。

14