Estoy trabajando en una aplicación independiente que utiliza tanto JMS como Hibernate.Sincronización de primavera Transacciones de Hibernate y JMS
La documentación sugiere que se debe utilizar JTA si deseo tener transacciones en ambos recursos.
Sin embargo, ahora mismo con un método DAO anotado @Transaction (y HibernateTransactionManager), esto parece funcionar. Cuando llamo send() en JmsTemplate, el mensaje no se envía inmediatamente, sino que la sesión JMS se confirma con la sesión de Hibernate a medida que el método retorna.
No sabía cómo esto es posible sin el JtaTransactionManager, así que revisé el código fuente. Resulta que tanto el contenedor para Hibernate como JmsTemplate registran las sesiones con TransactionSynchronizationManager y la sesión JMS se confirmará cuando la sesión de Hibernate se comprometa.
¿Cuál es la diferencia entre esto y una transacción JTA. ¿Puedo usar esto para reemplazar el último?
¿Comprobó qué sucede cuando una de ellas falla? ¿Los dos retroceden? –