Spring synchronisiert Hibernate- und JMS-Transaktionen

Ich arbeite an einer eigenständigen Anwendung, die sowohl JMS als auch Hibernate verwendet.

In der Dokumentation wird vorgeschlagen, JTA zu verwenden, wenn ich Transaktionen über beide Ressourcen hinweg ausführen möchte.

Derzeit scheint dies jedoch mit einer mit @Transaction annotierten DAO-Methode (und HibernateTransactionManager) bereits zu funktionieren. Wenn ich send () in der JmsTemplate aufrufe, wird die Nachricht nicht sofort gesendet, sondern die JMS-Sitzung wird mit der Hibernate-Sitzung festgeschrieben, wenn die Methode zurückkehrt.

Ich wusste nicht, wie das ohne den JtaTransactionManager möglich ist, also überprüfte ich den Quellcode. Es stellt sich heraus, dass sowohl der Wrapper für Hibernate als auch JmsTemplate die Sitzungen mit TransactionSynchronizationManager registriert und die JMS-Sitzung festgeschrieben wird, wenn die Hibernate-Sitzung festgeschrieben wird.

Was ist der Unterschied zwischen dieser und einer JTA-Transaktion? Kann ich dieses verwenden, um das letztere zu ersetzen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage