gpt4 book ai didi

JMS/MDB 回滚

转载 作者:行者123 更新时间:2023-12-02 08:52:37 29 4
gpt4 key购买 nike

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

最佳答案

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

话虽这么说,有两种解决方案:

  1. 如果 MDB 在容器管理的事务中运行,请使用 @REQUIRES_NEW 注释将所有数据库操作包装到 EJB 中 - 除非它们已经全部包含在 EJB 中。在这样的事务上下文中运行。

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

    When a message-driven bean using bean-managed transaction demarcation uses the javax.transaction.UserTransaction interface to demarcate transactions, the message receipt that causesthe bean to be invoked is not part of the transaction.

关于JMS/MDB 回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7378709/

29 4 0