是Java EE6CDI事件的事务性的?
-
26-09-2019 - |
题
是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()如果我想要回退的事务,发起该事件。
不隶属于 StackOverflow