Spring sincronizando transações Hibernate e JMS

Eu estou trabalhando em um aplicativo independente que usa o JMS e o Hibernate.

A documentação sugere que o JTA deve ser usado se eu quiser ter transações em ambos os recursos.

No entanto, agora com um método DAO anotado @Transaction (e HibernateTransactionManager), isso já parece funcionar. Quando eu chamo send () no JmsTemplate, a mensagem não é enviada imediatamente, mas a sessão do JMS é confirmada com a sessão do Hibernate conforme o método retorna.

Eu não sabia como isso é possível sem o JtaTransactionManager, então verifiquei o código fonte. Acontece que tanto o wrapper para o Hibernate quanto o JmsTemplate registra as sessões com TransactionSynchronizationManager e a sessão do JMS será confirmada quando a sessão do Hibernate for confirmada.

Qual é a diferença entre esta e uma transação JTA? Posso usar isso para substituir o último?

questionAnswers(2)

yourAnswerToTheQuestion