【问题标题】:JMS/MDB rollbackJMS/MDB 回滚
【发布时间】:2011-11-14 18:37:04
【问题描述】:

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

【问题讨论】:

    标签: jms rollback message-driven-bean


    【解决方案1】:

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

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

    1. 如果 MDB 在容器管理的事务中运行,请将所有数据库操作包装到带有 @REQUIRES_NEW 注释的 EJB 中 — 除非它们都已在此类事务上下文中运行。

    2. 如果您的 MDB 是 bean 管理的,则消息传递不是事务的一部分,因此无论如何都不会重新传递它 — EJB 核心合同的第 5.4.12 节和要求

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

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2011-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 2013-11-24
      相关资源
      最近更新 更多