我正在使用Java EE 6。 我想在成功提交交易时触发一个动作。目前,我的计划是在EJB中使用CDI事务事件:
@Asynchronous
public void triggerAction(@Observes(during = TransactionPhase.AFTER_SUCCESS) MyEvent myEvent){
// Do something with the event
}
触发事件的事务可以参与XA分布式事务。
两阶段提交的哪个阶段将调用观察者?
文档说明:
只有在事务成功完成时,才会在事务完成后阶段调用成功后观察器方法。
我不确定这在使用分布式事务时意味着什么。
此外,是否保证数据已存在于DB中(即,当达到提交决定时,是否可以调用我的观察者方法,但数据尚未保存在数据库中?)。
答案 0 :(得分:0)
不幸的是,CDI 1.x没有定义异步调用堆栈中事件的行为。您将看到的行为将特定于容器,包括一些同步调用此方法而不是异步的容器。 CDI 2.0正在为事件引入异步观察器。
答案 1 :(得分:0)
XA事务管理器负责“应用”XA语义,这意味着它必须通过所有相关方(分布式方)的2阶段提交(对话),然后它将提交并考虑(如果没有错误)它完成了。
在这种情况下,当数据库中的数据将在事务的上下文中提交而不是在任何先前或临时状态时,将调用观察者。