2つのjms outbound-channel-adapterがpub-subチャネルから読み取ってトランザクションに参加させたいというシナリオがあります。言い換えれば、私は両方の人にメッセージを書いたり、誰にも書いたりしたくない。私がsession-transactedをtrueに設定したとしても、それは起こりそうにありません。私の設定は次のようになります。同じトランザクション内のアウトバウンドチャネルアダプタ
<int:publish-subscribe-channel id="test.pubsub" ignore-failures="false" ></int:publish-subscribe-channel>
<jms:outbound-channel-adapter channel="test.pubsub" order="1" destination-name="${outbound.queue}" session-transacted="true"
connection-factory="${connection.factory}"></jms:outbound-channel-adapter>
<jms:outbound-channel-adapter id="jmsOutputMirror" session-transacted="true"
destination-name="${outbound.queue.mirror}"
connection-factory="${connection.factory}"
channel="test.pubsub" order="2">
</jms:outbound-channel-adapter>
これらはどちらもCachingConnectionFactoryからの接続を取得します。
私のフローのコンポーネントはトランザクションを共有できないが、トランザクションの境界が何であるかを指定する必要があるという問題ではありません。すべてのフローに対して、Springは「始まり」のトランザクションを開始するだけではありません – neesh
M-m-m。あなたがそれを言っていなければ、Springはトランザクションを開始しません。 'sessionTransacted'について知っていることはすべて、特定の呼び出しのためのJMSセッション内のローカルTXまでです。グローバルトランザクションは、それらの2つのJMS呼び出しの前に、上流側で制御する必要があります。 –