У меня есть цепочка из 3 слушателей Spring JMS A , B и C , реализованных на DefaultMessageListenerContainer
(DMLC).Все DMLC развернуты в одном приложении Java EE.
A и C :
- имеют встроенный менеджер транзакций (тот же самый),
- они оба получают и отправляют сообщения в транзакционных сеансах,
- одна и та же ConnectionFactory вводится в их DMLC (для приема) и используется
B :
- не имеет менеджера транзакций,
- отправляет сообщения без транзакций (
Connection.createSession(false, AUTO_ACKNOWLEDGE)
), - имеет другую, не XA ConnectionFactory
Вопрос: являются границами транзакции, как показано ниже, а транзакции 1 и 2 являются отдельными (ML = слушатель сообщения)?
| transaction 1 | ? | no transaction | ? | transaction 2 |
(broker) --> [ML A] --> (broker) --> [ML B] --> (broker) --> [ML C] |
Или, может быть, транзакции 1 и 2 равны единице, и тот факт, что "ML B" не транзакционный, не влияет на непрерывность?
Дополнительный вопрос: что происходит с активной транзакцией в местах с пометкой «?», Когда сообщение находится в брокере?
Iя не знаю, как получить доступ к журналам менеджера транзакций , поэтому я не могу это проверить.