JMS/MDB回滚

Ser*_*giu 2 jms rollback message-driven-bean

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

MaD*_*aDa 6

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

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

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

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