是Java EE6CDI事件的事务性的?

如果我火事件在一项交易,并随后滚回交易时,是影响事件的听众滚回来好吗?

是这个行为上依赖于该事件的听众本身的支持交易?

怎么样,如果我尝试和推回外从内随后的事件监听,它卷回来的交易被解雇的事件吗?

有帮助吗?

解决方案

事件第一章 CDI1.0规范,一项可以定义一事件是"交易"通过指定TransactionPhase之一是观察,在那里TransactionPhase是一个:

  • IN_PROGRESS,
  • BEFORE_COMPLETION,
  • AFTER_COMPLETION,
  • AFTER_FAILURE,
  • AFTER_SUCCESS

这样的一项宣言,看起来像:

void onDocumentUpdate(@Observes(during=AFTER_SUCCESS) @Updated Document doc) { ... }

如果观察不是宣布"交易",则该容器的电话的观察员立即、无注册观察员的方法后的调用期间的交易完成阶段,使用一个JTA同步。

但是:

任何 观察员的方法称为之前完成的交易可以叫setRollbackOnly()强迫一个交易rollback。一观察方法可能不会直接发起、承诺或rollback JTA交易。

如果观察方法引发的一个例外(而是本身不是"事务")除中止处理的事件。

因此,要实现的行为我寻找我相信我会寄我的观察员作为"交易性",并指定BEFORE_COMPLETION TransactionPhase.然后我会叫setRollbackOnly()如果我想要回退的事务,发起该事件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top