Транзакция MDB не откатывает электронную почту по тайм-ауту - PullRequest
0 голосов
/ 05 августа 2011

У меня есть 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.

1 Ответ

0 голосов
/ 06 августа 2011

Ваш ресурс электронной почты не является транзакционным, поэтому прервите тайм-аут mdb, и пусть ваш отправитель электронной почты будет полагаться на тайм-аут транспорта электронной почты, после чего вызовите только TX setrollback.TX будет откат, сообщение будет доставлено, и ваше электронное письмо может быть отправлено только при успешной повторной попытке.Время ожидания отправки электронной почты может быть не детерминированным.

...