Транзакции JMS и JTA в Java EE - PullRequest
       68

Транзакции JMS и JTA в Java EE

2 голосов
/ 15 августа 2011

Я думаю, что я не понимаю что-то правильно с JMS и JTA.Я работаю в контейнере Java EE со всеми CMT.Вот что я делаю:

  1. В SLSB напишите что-нибудь в базу данных
  2. Из того же метода SLSB отправьте сообщение в очередь JMS
  3. MDB в том же контейнере слушает очередь JMS и получает сообщение
  4. MDB читает базу данных

Проблема в том, что MDB не см. Изменения, внесенные в базу данных на шаге 1.

Я проверил, что шаги 1 и 2 происходят внутри одной транзакции XA, как и ожидалось.Я ожидаю, что вторая транзакция XA начнется на шаге 3 после того, как первый XA будет зафиксирован.Но кажется, что MDB получает сообщение до того, как транзакция XA, которая опубликовала сообщение, была подтверждена.

Мои ожидания неверны, и то, что я вижу, нормально?

Я работаю под JBoss6. SLSB является локальным.И SLSB, и MDB находятся в одном приложении.

Ответы [ 2 ]

4 голосов
/ 16 августа 2011

Я нашел проблему!Моя фабрика соединений JMS не знала XA.Я искал / XAConnectionFactory для моей фабрики соединений JMS.Несмотря на название, это неправильный ресурс для поиска обычного приложения в JBoss.Существует также java: / XAConnectionFactory, которая тоже не работает.Правильное имя ресурса: java: / JmsXA.Я использовал его, и все работает так, как ожидалось.

Спасибо @strmqm за то, что подтолкнули меня в правильном направлении.

1 голос
/ 16 августа 2011

Я видел концептуально похожую проблему в приложении, построенном с WebLogic 7. Фиксация БД из tx1 не была завершена к тому времени, когда tx2 (инициированная отправкой JMS в tx1) попытался прочитать ее.

Проблема заключалась в том, что наша конфигурация включала уровень эмуляции WLS 7 XA с подключением не-XA db (к базе данных Oracle).Этот риск был частью этого сокращения XA.Очевидно, если бы мы прошли с настоящим XA до самого DB, эта дыра была бы закрыта.Никогда не заканчивал тем, что проверял это.

Вы говорите, что это JBoss.Есть ли шанс, что у них есть подобная прокладка, которая обходит XA и дает такой же удивительный результат?

...