Spring synchronizuje transakcje Hibernate i JMS
Pracuję nad autonomiczną aplikacją, która używa zarówno JMS, jak i Hibernate.
Dokumentacja sugeruje, że JTA musi być używany, jeśli chcę mieć transakcje w obu zasobach.
Jednak teraz, przy użyciu metody DAO z adnotacją @Transaction (i HibernateTransactionManager), wydaje się, że to już działa. Gdy wywołuję send () na JmsTemplate, wiadomość nie jest natychmiast wysyłana, ale sesja JMS jest zatwierdzana w sesji Hibernate w momencie powrotu metody.
Nie wiedziałem, jak to jest możliwe bez JtaTransactionManager, więc sprawdziłem kod źródłowy. Okazuje się, że zarówno opakowanie Hibernate, jak i JmsTemplate rejestruje sesje za pomocą TransactionSynchronizationManager, a sesja JMS zostanie zatwierdzona, gdy sesja Hibernate zostanie zatwierdzona.
Czym się różni ta transakcja od transakcji JTA. Czy mogę użyć tego do zastąpienia tego ostatniego?