3

Q1. 複数のデータベースを処理する必要がある場合、グローバル トランザクションを使用する必要があることは理解しています。しかし、この投稿から http://fogbugz.atomikos.com/default.asp 。その人は、Spring aopを使用して別のトランザクションマネージャーについてアドバイスすることを提案しました(詳細>データソース/セッションファクトリー)。どのような状況でこのアプローチを使用できるか、また、atomikos、jotm、ejb などを使用した XA (グローバル トランザクション) が必要になるのはどのような状況でしょうか。

4

2 に答える 2

4

パスカルはあなたの質問に徹底的に答えたと思いますが、私はそれを単純化/要約してみたいと思います。

  • トランザクションスコープ要件なしでデータソースに対して並列の独立したタスクを実行する必要がある場合(たとえば、トランザクションが1つのデータソースで失敗した場合、他のデータソースでロールバックする必要がない場合)、Pascalの提案またはhttp://fogbugzのアプローチを使用します。 .atomikos.com / default.asp?community.6.596.2(例:非JTA/非XA/非分散)

  • 異なるデータソース間でトランザクションスコープが必要な場合、たとえば、あるデータソースでのロールバックが同じ論理トランザクションスコープの下で別のデータソースでの変更をロールバックする必要がある場合(たとえば、資金の転送を行う銀行データベースとクレジットカードデータベースでは、どちらか一方に減少/増加し、もう一方に減少/減少)JTAトランザクションマネージャーが必要です(XA /分散)

これにより、画像がより明確になることを願っています(単純化しすぎた場合、または単に間違った場合は、コメントを受け付けています)

于 2010-01-19T11:27:06.620 に答える
3

このメッセージhttp://fogbugz.atomikos.com/default.asp?community.6.596.2を参照している場合、OP からの質問の重要な部分は次のとおりです。

タスクは、datasource1またはdatasource2に対する一連の SQL コマンドのいずれかです。

言い換えれば、OP は複数のトランザクション リソースを登録せず、いずれかを使用します (そして、XA サポートは実際には必要ないと明示的に書いています)。したがって、彼は実際にはグローバルトランザクション サポートを必要とせず、ローカルトランザクションのみを使用でき、J2EE トランザクション マネージャーの使用は彼のユース ケースでは必須ではありません。

そして、これが答えが示唆していることです。Atomikos を使用することは必要ではなく、やり過ぎかもしれません。

two dataSource、 two txManager、 twoを使用し、異なるおよび属性値を持つtxAdvice別個の <aop:advisor/> 要素を定義すると、まったく異なるトランザクション構成を異なるサービス層オブジェクト/メソッドに適用できます。'pointcut''advice-ref'

セクション9.5.4 を参照してください。詳細については、 Bean ごとに異なるトランザクション セマンティクスを設定します。

ただし、複数のトランザクション リソース (通常はリレーショナル データベースとメッセージ キュー) を操作する必要がある場合は、J2EE トランザクション マネージャー (J2EE アプリケーション サーバーまたは Atomikos、JBossTS、JOTM などのスタンドアロンによって提供される) を意味するグローバルトランザクション サポートが必要です。

于 2010-01-19T04:39:37.753 に答える