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

时间:2015-03-21 08:15:30

标签: java-ee cdi jta java-ee-7

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

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

@Transactional(Transactional.TxType.REQUIRES_NEW)
public void method2() {
   ...
}

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

1 个答案:

答案 0 :(得分:4)

拦截本地方法调用对CDI不起作用,并且不能直接将类注入其自身(循环依赖)。另请参阅CDI call interceptor annotated method within same instance

自我注射问题仍然存在,请参阅https://issues.jboss.org/browse/CDI-414