我最近偶然发现了下一段 Java EE6 代码:
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void example(@Observes(during = TransactionPhase.AFTER_SUCCESS) final ExampleEvent exampleEvent) {
真的需要REQUIRES_NEW
吗?
我的意思是示例方法将始终仅在任何先前的事务成功结束后被调用(因为TransactionPhase.AFTER_SUCCESS
)。
或者我错过了什么?
最佳答案
您仅观察ExampleEvent
,因此您的example()
方法不会被自身调用(基于@TransactionAttribute
)除非你做这样的事情:
@Inject
private Event<ExampleEvent> exampleEvent;
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void example(@Observes(during = TransactionPhase.AFTER_SUCCESS) final ExampleEvent exampleEvent) {
ExampleEvent event = new ExampleEvent();
exampleEvent.fire(event);
}
保留@TransactionAttribute
是有意义的,因为上一个事务刚刚完成(AFTER_SUCCESS
),因此没有当前事务,因此需要创建一个新事务。即使没有注释,这也可能会自动完成(取决于 AS 实现),但结果应该是相同的。
关于java - TransactionAttributeType.REQUIRES_NEW 与 @Observes(during = TransactionPhase.AFTER_SUCCESS) 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45397311/