在嵌套的@Transactional中进行独立调用

问题描述 投票:0回答:1

我正在尝试在具有事务性钩子的方法中进行以下详细的独立调用:


    @Transactional(transactionManager = "tenantTransactionManager", isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) 
    void method1(){
    //business logic 1
    metohd2();
    //business logic 2
    }

    method2(){
    TransactionSynchronizationManager.registerSynchronization( new TransactionSynchronization() {
                @Override
                public void afterCommit( boolean readOnly ) {
                      //businessLogic to be done after commit
                }
       });
    }

**EXPECTED BEHAVIOUR:**
  1. 方法1中的事务应该在发生任何异常时回滚
  2. 在任何情况下都应提交方法2中的事务
java spring hibernate annotations
1个回答
0
投票

要在单独的事务中运行method2,您必须做两件事:

  1. 将method2移至另一个类(EJB)
  2. 使用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)注释method2

由于以下原因而将其移动到另一个类(EJB):请参阅:EJB Transactions in local method-calls

您的应用程序容器(如Payara)将为@Stateless类/ EJB中的所有方法自动创建事务,就像它们都被@TransactionAttribute(TransactionAttributeType.REQUIRED)注释一样。

另请参见:https://javaee.github.io/tutorial/transactions004.html

© www.soinside.com 2019 - 2024. All rights reserved.