У меня есть MDB, который слушает в очереди. Всякий раз, когда он получает сообщение, он перенаправляет выполнение в сессионный компонент без сохранения состояния, который имеет много логики, обновлений и т. Д. Вот поток логики / цепочки вызовов.
queue-> mdb-> session bean-> session bean-> email-> logging
Конечным результатом является электронное письмо и последующее ведение журнала.
По умолчанию транзакция MDB управляется контейнером и время ожидания составляет 30 секунд.
Однако всякий раз, когда достигается тайм-аут, он генерирует исключение тайм-аута и повторяет сообщение, но вложенная транзакция и ее процессы не откатываются (из сессионного компонента). В результате из-за повторных попыток отправляется несколько электронных писем, но все журналы откатываются (из сессионных компонентов), КРОМЕ для того, что регистрируется с самого MDB
Разве все транзакции, вызываемые из отката MDB, включая ведение журнала mdb и особенно электронные письма?
Все сессионные компоненты имеют тип транзакции по умолчанию как 'обязательный'.
Я также явно установил тип TransactionManagement как CONTAINER, а TransactionType - как ТРЕБУЕМЫЙ. Электронные письма все еще выходят. Ведение журнала откатов сессионных компонентов, но повторная попытка произошла.
Затем я установил TransactionType как REQUIRES_NEW. Электронные письма все еще выходят. Ведение журнала при откате сессионных компонентов, но повторная попытка НЕ происходит.
какую настройку я должен установить, чтобы убедиться, что ВСЯ транзакция, запущенная MDB, и все транзакции, вызванные из нее, откатились и произошла повторная попытка?
Я не хочу использовать транзакции, управляемые компонентом, потому что я хочу, чтобы произошла повторная попытка при сбое.
Мой сервер приложений - weblogic 10.3 со спецификацией ejb 3.