私はJMSとHibernateの両方を使用するスタンドアロンアプリケーションに取り組んでいます。
ドキュメントでは、両方のリソースでトランザクションを実行する場合は、JTAを使用する必要があることが示されています。
ただし、現在、@ Transaction注釈付きDAOメソッド(およびHibernateTransactionManager)を使用すると、これはすでに機能しているようです。JmsTemplateでsend()を呼び出すと、メッセージはすぐには送信されませんが、メソッドが戻るときに、JMSセッションがHibernateセッションでコミットされます。
JtaTransactionManagerなしでこれがどのように可能かわからなかったので、ソースコードをチェックしました。HibernateのラッパーとJmsTemplateの両方がセッションをTransactionSynchronizationManagerに登録し、HibernateセッションがコミットするとJMSセッションがコミットされることがわかりました。
これとJTAトランザクションの違いは何ですか。これを使って後者を置き換えることはできますか?