Apache Camelを使用してJavaサービスにメッセージを送信しています。私は消費者ルートにtransacted=true
を保管しています。また、JMSメッセージの処理が正常に完了したら電子メールを送信する必要があります。着信JMSメッセージに対してトランザクション同期が有効でない
私は以下のコードを使用して同期を登録し、トランザクションがコミットされた後にのみ電子メールを送信します。
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter(){
@Override
public void afterCommit(){
sendMail(mailBody);
}
});
問題:キャメルからの着信トランザクションが同期されていないと私は
java.lang.IllegalStateExceptionを取得しています:トランザクションの同期化は、私が
transactionsynchronizationmanager.initsynchronization()
を呼び出してみました
アクティブではありません - 何も例外はありませんが、afterCommit()
メソッドは呼び出されません。
transactionsynchronizationmanager.initsynchronization();
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter(){
@Override
public void afterCommit(){
sendMail(mailBody); //never called
}
});
同じコードが要求(春トランザクションを通じて)Spring MVCのコントローラを介して受信されたときに作動されます。
ありがとうございました。ルート上でtransacted = trueを設定した後で動作します。実際には、JMSConfigutaionでtransacted = trueを設定しましたが、これは間違っています。 –
さて、あなたはこの質問に答えてマークして –