首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MDB事务在超时时不回滚电子邮件

MDB事务在超时时不回滚电子邮件
EN

Stack Overflow用户
提问于 2011-08-06 03:00:04
回答 1查看 1K关注 0票数 0

我有一个监听队列的MDB。当它收到一条消息时,它会将执行转发给一个无状态的会话bean,该bean有很多逻辑、更新等。

队列->mdb->会话bean->会话bean->电子邮件->日志记录

最终结果是一封电子邮件和随后的日志记录。

默认情况下,MDB事务由容器管理,超时时间为30秒。

但是,无论何时达到超时,它都会抛出超时异常并重试消息,但嵌套的事务及其进程不会回滚(从会话bean)。因此,由于重试,会发出多封电子邮件,但除了从MDB本身记录的内容之外,所有日志记录都会回滚(从会话bean)

是否应该从MDB回滚调用所有事务,包括mdb日志记录,尤其是电子邮件?

会话bean的默认事务类型都是'required‘。

我还根据需要将TransactionManagement类型显式地设置为带有TransactionType的容器。电子邮件仍然会发送出去。会话beans的日志记录会回滚,但会重试。

然后,我将TransactionType设置为REQUIRES_NEW。电子邮件仍然会发送出去。从会话beans回滚日志,但不会重试。

我应该使用什么设置来确保由MDB启动的整个事务以及从中调用的所有事务都能回滚并重试?

我不想使用bean管理的事务,因为我希望在失败时重试。

我的应用服务器是带有EJB3规范的WebLogic10.3。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-06 05:52:12

您的电子邮件资源不是事务性的,因此请丢弃mdb超时,让您的电子邮件发件人依赖电子邮件传输超时,在这一点上,只需调用TX setrollback。tx将回滚,邮件将重新传递,您的电子邮件可能仅在重试成功时发送。电子邮件传输超时的结果可能不是确定性的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6961330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档