【问题标题】:CDI Event and XA transactionCDI 事件和 XA 事务
【发布时间】:2016-02-01 12:39:00
【问题描述】:

我正在使用 Java EE 6。 我想在成功提交事务后触发一个动作。目前,我的计划是在 EJB 中使用 CDI 事务事件:

@Asynchronous
public void triggerAction(@Observes(during = TransactionPhase.AFTER_SUCCESS) MyEvent myEvent){
    // Do something with the event
}

触发事件的事务可以参与XA分布式事务。

在两阶段提交的哪个阶段会调用观察者?

文档说明:

在事务的完成后阶段调用成功后观察者方法,仅当事务成功完成时。

我不确定在使用分布式事务时这意味着什么。

此外,是否有任何保证数据已经在 DB 中(即,当决定提交时是否可以调用我的观察者方法,但数据尚未保存在 DB 中?)。

【问题讨论】:

    标签: java jakarta-ee ejb cdi xa


    【解决方案1】:

    不幸的是,CDI 1.x 没有定义异步调用堆栈中事件的行为。您将看到的行为将是特定于容器的,包括一些同步调用此方法而不是异步的容器。 CDI 2.0 正在为事件引入异步观察者。

    【讨论】:

      【解决方案2】:

      XA 事务管理器负责“应用”XA 语义,这意味着它必须与所有相关方(分布式方)一起通过 2 阶段提交(对话),然后它会提交并考虑(如果没有错误)完成了。

      在您的情况下,当数据库中的数据将在事务的上下文中提交而不是任何先前或临时状态时,将调用观察者。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-17
        • 2012-12-19
        • 2013-03-02
        • 1970-01-01
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 2014-06-05
        相关资源
        最近更新 更多