Откат JMS / MDB - PullRequest
       25

Откат JMS / MDB

2 голосов
/ 11 сентября 2011

У нас есть приложение, которое читает JMS и выполняет некоторые транзакции базы данных, все как часть одной транзакции XA. Если мы обнаружим, что у сообщения есть какие-то проблемы, мы хотим откатить базу данных, но мы не хотим, чтобыОткат от JMS, чтобы мы снова прочитали сообщение (мы не хотим, чтобы MDB запускал весь процесс еще раз, если откат был ранее инициирован).

1 Ответ

5 голосов
/ 15 сентября 2011

Чтобы быть уверенным, что я вас правильно понимаю: у вас есть транзакционный компонент, управляемый сообщениями, который выполняет некоторые действия с базой данных.Вы по-прежнему хотите, чтобы MDB был частью транзакции XA, но вы не хотите, чтобы действия базы данных влияли на состояние транзакции, в которой принимает участие MDB.

При этом существует дварешения:

  1. Если MDB выполняется в управляемой контейнером транзакции , оберните все действия базы данных в EJB с аннотацией @REQUIRES_NEW - если только они все не запущены втакой транзакционный контекст.
  2. Если ваш MDB управляется компонентом , доставка сообщений НЕ является частью транзакции, поэтому она не будет доставлена, независимо от того, что - раздел 5.4.12 из Базовые контракты и требования EJB :

    Когда управляемый сообщениями компонент, использующий разграничение управляемых компонентом транзакций, использует javax.transaction.Интерфейс UserTransaction для разграничения транзакций, получение сообщения, которое вызывает вызываемый компонент, не является частью транзакции.

...