我最近偶然发现了下一段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 -Method:

 @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的实现),但结果应相同。

07-27 19:55