我们有一个应用程序,它读取JMS并执行一些数据库事务,所有这些都是一个XA事务的一部分。 如果我们发现消息有一些问题,我们想要回滚数据库, 但我们不希望JMS的回滚让我们再次阅读该消息(如果先前已启动回滚,我们不希望MDB再次触发整个过程。)
答案 0 :(得分:5)
为了确保我理解正确:您有一个事务性消息驱动的bean,它对数据库执行某些操作。您仍然希望MDB成为XA事务的一部分,但您不希望数据库操作影响MDB参与的事务的状态。
话虽如此,有两种解决方案:
@REQUIRES_NEW
注释的EJB中 - 除非它们已经在这样的事务上下文中运行。 / LI>
如果您的MDB是由bean管理的,则邮件传递不是交易的一部分,因此无论如何都不会重新传递 - 的第5.4.12节EJB核心合同和要求:
使用bean管理的事务划分的消息驱动bean使用javax.transaction。 UserTransaction接口用于划分事务,导致的消息接收 要调用的bean不是事务的一部分。