0

私の質問の少なくとも半分をカバーする良い記事がグーグルで見つからなかったため、この質問をしています。私はトランザクションに慣れていないので、XA トランザクションに関連する Java EE の世界での主な問題点を簡単に説明する答えが得られることを期待しています。

私の質問

  1. Java での XA トランザクションの一般的な問題は何ですか。
  2. さまざまなフレームワーク (最も一般的な Java EE) と統合する際の XA トランザクションの問題点は何ですか? たとえば、最初の DB が Hibernate 経由で動作し、2 番目の DB が MyBatis 経由で動作する場合、XA トランザクションを構成するのは難しいですか?
  3. 複数のデータベース ベンダーの XA トランザクションはどうですか? たとえば、最初のデータベースは PostgreSQL、2 番目は H2 です。
  4. 多分他の挑戦?
  5. Spring と Hibernate はどうですか?

PS

誰かが一度に上記のすべての質問に答えるとは思いません。1 つの質問に答えたり、いくつかの興味深い参考文献を提供したりできれば、大歓迎です!

4

1 に答える 1

1

私は本番環境で XA を使用しており、これが私の経験です。

  • トランザクションを分散させると、トランザクション管理が大幅に複雑になります。tx に複数の参加者がいる場合に何が起こっているかを監視するのが難しくなり、エラーと回復に対処するのが難しくなります (2 フェーズ コミットは失敗し、トランザクションが「未確定」のままになる可能性があります)。適切に構成するのが難しく (最後の参加者の最適化など、分散 tx に関する最適化は標準化されていません)、最後にテストが難しくなります。この道を行く前に、すべてを考慮してください。

  • コンテナーは、「データ ソース」の背後で接続プーリングを抽象化します。適切な XA データ ソースを使用するように持続性フレームワークを構成すると、分散 tx に参加します。ただし、永続性フレームワークは、セッションの概念に依存して、データへの変更をキャッシュします。通常、トランザクション内で実際に何が起こるかを制御することはできません。また、永続性フレームワークは、トランザクションがコミットされたときに変更をキャッシュにフラッシュするためのフックを登録する必要があります。分散トランザクションでは、イベントの順序付けとキャッシュの一貫性の問題に対処するのが難しくなります。

可能であれば、XA を使用しないでください。

于 2013-08-26T08:30:51.807 に答える