Демаркация транзакции / границы транзакции в Spring JMS - PullRequest
1 голос
/ 29 сентября 2011

У меня есть цепочка из 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я не знаю, как получить доступ к журналам менеджера транзакций , поэтому я не могу это проверить.

...