ヒューズソースのApacheCamelドキュメントから:
分散トランザクション
分散トランザクションとは、トランザクションスコープが複数のネットワークノードにまたがる分散システム内のトランザクションを指します。分散トランザクションをサポートするための基本的な前提条件は、標準形式でのトランザクションコンテキストの送信をサポートするネットワークプロトコルです(分散トランザクションマネージャーも参照)。分散トランザクションは、ApacheCamelトランザクションの範囲外です。
分散トランザクションマネージャー
通常、サーバーはトランザクションに関係するリソースに直接接続します。ただし、分散システムでは、WebサービスまたはCORBAIDLインターフェイスを介して間接的にのみ公開されるリソースに接続する必要がある場合があります。この場合、分散トランザクションをサポートできるTPモニターが必要です。さまざまな分散プロトコルのトランザクションをサポートする方法を説明するいくつかの標準が利用可能です。たとえば、WebサービスのWS-AtomicTransactions仕様やCORBAアプリケーションのCORBA Object Transaction Service(OTS)仕様などです。
だから、あなたが踏みにじられているのも不思議ではありません。ApacheCamelはあなたのユースケースをカバーしていません。
私はあなたが2つの方法に行くことができると思います:
- 大きな分散トランザクション
- 補償アクションを使用して小規模なトランザクションを調整
Tomcat
のJTAJTAは、グローバルトランザクションマネージャーです。おそらく両方のソリューションでこれが必要です。(いくつかの巧妙な手間があれば、オプション2を選択しないと、管理できなくなる可能性があります。)TomcatはJTAトランザクションを実行できませんが、transactionmanagerの助けを借りて実行できます。Atomikos vs JOTM vs Bitronix vs?を参照してください。。Spring JtaTransactionManagerを追加すると、これを簡単に構成できるようになります。すべてのJMS実装がJTAをサポートしているわけではありません/XAリソースです。あなたはあなたがそうするかどうかをチェックしなければならないでしょう。
分散トランザクショントランザクション
の期間はそれほど長くはありませんが、それでもかなりの期間リソースをロックしたままにし、多くのトランザクションがあります。パフォーマンスが低下します。
JTAはJTSとOTSに基づいて構築されています。JTAサーバーは、OTSを介して他のJTAサーバーとのトランザクションを調整できる必要があります。これを設定するのは簡単ではありません。まず、それをサポートする実装を見つける必要があります。そして、それを起動して実行する方法を理解する必要があります。
より高いレベルでは、WS-TransactionsとWS-Coordinationがあります。メトロガイドを参照してください。
補償アクション
SOAのトランザクションは、ロールバックされないが、ステップが失敗したときに発生する混乱をクリーンアップするために補償アクションを実行できる、調整された小さなトランザクションのセットを使用する方がよい場合があることを示しています。
タイムアウト時に通知を送信することは、そのようなアクションの1つです。注文リクエストを実行できないことがわかった場合にエンドポイント1で行った注文リクエストをキャンセルすることは、別の補償アクションである可能性があります。
あなたがこのように行くことができれば、私はそれを取ります。