JMS / MDB回滚

时间:2011-09-11 14:00:50

标签: jms rollback message-driven-bean

我们有一个应用程序,它读取JMS并执行一些数据库事务,所有这些都是一个XA事务的一部分。 如果我们发现消息有一些问题,我们想要回滚数据库, 但我们不希望JMS的回滚让我们再次阅读该消息(如果先前已启动回滚,我们不希望MDB再次触发整个过程。)

1 个答案:

答案 0 :(得分:5)

为了确保我理解正确:您有一个事务性消息驱动的bean,它对数据库执行某些操作。您仍然希望MDB成为XA事务的一部分,但您不希望数据库操作影响MDB参与的事务的状态。

话虽如此,有两种解决方案:

  1. 如果MDB在容器管理的事务中运行,请将所有数据库操作包装到带有@REQUIRES_NEW注释的EJB中 - 除非它们已经在这样的事务上下文中运行。 / LI>
  2. 如果您的MDB是由bean管理的,则邮件传递不是交易的一部分,因此无论如何都不会重新传递 - 的第5.4.12节EJB核心合同和要求

      

    使用bean管理的事务划分的消息驱动bean使用javax.transaction。   UserTransaction接口用于划分事务,导致的消息接收   要调用的bean不是事务的一部分。