Чтобы быть уверенным, что я вас правильно понимаю: у вас есть транзакционный компонент, управляемый сообщениями, который выполняет некоторые действия с базой данных.Вы по-прежнему хотите, чтобы MDB был частью транзакции XA, но вы не хотите, чтобы действия базы данных влияли на состояние транзакции, в которой принимает участие MDB.
При этом существует дварешения:
- Если MDB выполняется в управляемой контейнером транзакции , оберните все действия базы данных в EJB с аннотацией
@REQUIRES_NEW
- если только они все не запущены втакой транзакционный контекст. Если ваш MDB управляется компонентом , доставка сообщений НЕ является частью транзакции, поэтому она не будет доставлена, независимо от того, что - раздел 5.4.12 из Базовые контракты и требования EJB :
Когда управляемый сообщениями компонент, использующий разграничение управляемых компонентом транзакций, использует javax.transaction.Интерфейс UserTransaction для разграничения транзакций, получение сообщения, которое вызывает вызываемый компонент, не является частью транзакции.