有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java CDI事件和XA事务

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

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

触发事件的事务可以涉及XA分布式事务

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

文件规定:

An after success observer method is called during the after completion phase of the transaction, only when the transaction completes successfully.

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

此外,是否保证数据已经存在于数据库中(即,当决定提交时,是否可以调用我的观察者方法,但数据尚未在数据库中持久化?)


共 (2) 个答案

  1. # 1 楼答案

    XA事务管理器负责“应用”XA语义,这意味着它必须与所有参与方(分布式方)进行2阶段提交(对话框),然后它将提交并考虑(如果没有错误),就完成了。p>

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

  2. # 2 楼答案

    不幸的是,CDI 1。x不定义异步调用堆栈中事件的行为。您将看到的行为是特定于容器的,包括一些以同步方式而不是异步方式调用此方法的容器。CDI2.0引入了一个异步事件观察程序