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?

questionAnswers(2)

yourAnswerToTheQuestion