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



我正在尝试在具有事务钩子的方法中进行独立调用,其中包含以下详细信息:


@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 中的事务在任何情况下都应提交

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

  1. 将方法 2 移动到另一个类 (EJB(
  2. 用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW(注释方法2

将其移动到另一个类 (EJB(,因为: 请参见:本地方法调用中的 EJB 事务

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

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

最新更新