java - TransactionAttributeType.REQUIRES_NEW 与 @Observes(during = TransactionPhase.AFTER_SUCCESS) 结合使用

标签 java transactions cdi jta

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

相关文章:

java - Spring:如何在输入@AfterReturning建议之前提交事务

sql-server - SQL Server 中嵌套事务的隔离范围是什么?

java - 在 CDI 中使用 @Typed 的子类实现出现不明确的依赖警告

java - Java 中带有 char 和整数文字的整数运算

Java:为什么用户必须满足扩展约束?

java - Android - 如何在通知面板中添加 [切换按钮]? (你可以切换 Wifi、蓝牙、平面模式等的地方。)

java - 如何手动处理Spring 4事务?

java - 带有 liberty 服务器的 JSF CDI 示例不起作用

java - wildfly - 将 CDI 与 POJO 结合使用

java - boolean[] 无法解析为变量