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.
我不确定这在使用分布式事务时意味着什么
此外,是否保证数据已经存在于数据库中(即,当决定提交时,是否可以调用我的观察者方法,但数据尚未在数据库中持久化?)
# 1 楼答案
XA事务管理器负责“应用”XA语义,这意味着它必须与所有参与方(分布式方)进行2阶段提交(对话框),然后它将提交并考虑(如果没有错误),就完成了。p>
在您的情况下,当db中的数据将在事务上下文中提交时,而不是在任何先前或临时状态下提交时,将调用观察者
# 2 楼答案
不幸的是,CDI 1。x不定义异步调用堆栈中事件的行为。您将看到的行为是特定于容器的,包括一些以同步方式而不是异步方式调用此方法的容器。CDI2.0引入了一个异步事件观察程序