Есть ли требование, чтобы сообщения jms отправлялись в конце коммита? - PullRequest
4 голосов
/ 10 июня 2011

У меня есть странное явление, что сообщения jms, похоже, отправляются до того, как на самом деле произошла фиксация базы данных.

Допустим, у меня есть серверная операция foo (), которая отправляет сообщение клиенту после его завершения.Затем клиент загружает измененные данные с сервера.Теперь кажется, что сообщение jms отправляется до того, как фиксация фактически выполнена, поэтому клиент все еще получает старые данные, потому что его запрос все еще находится до конца первоначальной фиксации.

Вся работа сервера определеннотранзакционный, потому что, если выброшено исключение, событие jms не отправлено.

есть ли в спецификации jms требование о том, что сначала должны выполняться все фиксации базы данных, а затем сообщение jmsэто отправить или это зависит от реализации, в каком порядке это происходит?

Мы говорим о стандартной реализации hornetq в jboss 6.0.0.Final.

Обновление:

Кажется, у меня та же проблема, что и у этих парней: http://techstack.com/forum/websphere/34434-order-commits-xa-transaction.html

Обновление 2:

Другой пользователь с такой же проблемойhttp://community.jboss.org/message/114459

Ответы [ 2 ]

0 голосов
/ 28 июня 2011

Вам просто нужно убедиться, что ваша фабрика соединений является частью той же транзакции XA.

вы должны установить REQUIRES_NEW на EJB, как сказал Гурсел Коджа в другом посте здесь.

Проще будет использовать фабрику соединений JCA (обычно в java: // JmsXA)

0 голосов
/ 10 июня 2011

Операции JMS являются транзакционными, поэтому сообщение jms доставляется во время фиксации.Если вы хотите увидеть зафиксированные данные, поместите в операции db другой метод EJB со свойством транзакции REQUIRES_NEW.

...