私はJTAを理解しようとしており、(学習と理解のために)選択したトランザクションマネージャーとしてBitronixを使用しています。ここでBitronixリファレンスガイド内のコードを見ていて、自分自身に疑問を持っています。それ自体がトランザクションである(Connection
コミット/ロールバックできる)JDBCを使用している場合、なぜそのようなコードを書きたいのでしょうか。 !?!
そのコードスニペットのポイントは、既存のトランザクションデータストアでBitronix / JTAを使用する方法を簡単に示すことだったかもしれませんが、それが提供する固有の利点はまだわかりません。
次に、このコードスニペットは私に次のように考えさせました。「使用する2つの主要なデータソースがデータベースとメッセージブローカーのみであり、JDBC / JMSを使用してそれぞれ通信し、これら2つの標準(JDBC / JMS)がすでにトランザクションである場合、なぜJTAを使用する必要があるのでしょうか?!?!」
JTAは、JDBC、JPA、JMSなどがすべて使用する「内部」JavaEEAPIのようなものですか。そして、それで何かクレイジーなことをしたい1%の人たちだけに公開されていますか?それとも、JTAのアイデア/適用性を完全に見逃していますか?
JTAを直接ヒットするための2つの非JDBCと非JMSのユースケースを想像できると思いますが、そもそもJTAについては非常に曖昧なので、これらのケースが軌道に乗っていないかどうかはわかりません。
- おそらく、アプリに複雑なI / Oシステムがあり、ディスク上の同じファイルに対して複数のスレッドが読み取り/書き込みを行っている可能性があります。おそらく、各スレッドにトランザクションを使用してこのファイルに書き込むようにします。(はい・いいえ?!?)
- おそらく、システムの状態を表すステートマシンPOJOがあり、複数のスレッドがマシンを変更できます。おそらく、各スレッドにトランザクションを使用してマシンの状態を変更させるでしょう。(はい・いいえ?!?)
私の質問の根本は次のとおりだと思います。
- JPA(Hibernate)および/またはJDBC呼び出しがすでにトランザクションである場合、なぜそれらをJTA begin-> commit / rollbackブロック内にラップしたいのですか?JMSおよびメッセージングシステムの場合も同様です。
- JPA / JDBC / JMS以外に、JTAを使用して一連の操作を処理するためのユースケースは何ですか?
前もって感謝します!