Java CDI事件和XA事务

Java CDI事件和XA事务,java,jakarta-ee,ejb,cdi,xa,Java,Jakarta Ee,Ejb,Cdi,Xa,我正在使用JavaEE6。 我想在成功提交事务后触发一个操作。目前,我的计划是在EJB中使用CDI事务事件: @Asynchronous public void triggerAction(@Observes(during = TransactionPhase.AFTER_SUCCESS) MyEvent myEvent){ // Do something with the event } 触发事件的事务可以涉及XA分布式事务 在两阶段提交的哪个阶段调用观察者? 文件规定: 仅当事务成

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

@Asynchronous
public void triggerAction(@Observes(during = TransactionPhase.AFTER_SUCCESS) MyEvent myEvent){
    // Do something with the event
}
触发事件的事务可以涉及XA分布式事务

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

文件规定:

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

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


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

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

< P> XA事务管理器负责“应用”XA语义,意味着它必须与所有参与方(分布式方)进行2阶段提交(对话),然后提交和考虑(如果没有错误)。 在您的情况下,当db中的数据将在事务上下文中提交时,而不是在任何先前或临时状态下提交时,将调用观察者