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

时间:2011-08-05 19:00:04

标签: timeout jms rollback message-driven-bean

我有一个侦听队列的MDB。每当它收到一条消息时,它会将执行转发给一个无状态会话bean,它有很多逻辑,更新等。这是逻辑/调用链的流程。

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

最终结果是电子邮件和后续记录。

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

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

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

会话bean的默认交易类型均为“必需”。

我还明确将TransactionManagement类型设置为CONTAINER,并将TransactionType设置为REQUIRED。电子邮件仍然会消失。从会话bean回滚记录但重试发生。

然后我将TransactionType设置为REQUIRES_NEW。电子邮件仍然会消失。从会话bean回滚记录但重试DOESNT。

我应该设置什么设置以确保MDB启动ENTIRE事务以及从中调用的任何事务,回滚并重试?

我不想使用bean托管事务,因为我希望重试失败。

我的应用程序服务器是带有ejb 3规范的weblogic 10.3。

1 个答案:

答案 0 :(得分:0)

您的电子邮件资源不是交易性的,因此请忽略mdb超时并让您的电子邮件发件人依赖电子邮件传输超时,此时只调用TX setrollback。 tx将回滚,邮件将重新传送,您的电子邮件可能仅在成功重试时发送。电子邮件传输超时的结果可能不确定。