CDI @Transactional REQUIRES_NEW 是否适用于本地方法

luj*_*jop 4 jta cdi java-ee-7 jakarta-ee

CDI @Transactional(Transactional.TxType.REQUIRES_NEW) 在同一个 bean 中调用时是否有效:

@Transactional
public void method1() {
    for(...) {
        method2();
    }
}

@Transactional(Transactional.TxType.REQUIRES_NEW)
public void method2() {
   ...
}
Run Code Online (Sandbox Code Playgroud)

我想它不起作用,因为代理无法拦截本地调用。在这种情况下,如果我想在新事务中管理 method2 的每次调用,推荐的使用模式是什么。显而易见的是创建另一个bean,但这是我不喜欢的。

mp9*_*1de 5

拦截本地方法调用不适用于 CDI,您不能将类直接注入自身(循环依赖)。另请参阅同一实例中的 CDI 调用拦截器注释方法

自注入问题仍然存在,见https://issues.jboss.org/browse/CDI-414