首页 > 解决方案 > 通过代理调用方法,该代理使用内部带有 Transactional 注释的另一个方法,是否会为后一种方法创建事务?

问题描述

例子:

class Example {
@Inject
Bee b; // proxy
public void exec() {
 b.exec();
}

class Bee {
  public void exec() {
  exec2();
 }
 @Transactional
 public void exec2() {}
}

正如我最近注意到的那样,这行不通。我对吗?您是否有一些指向说明该行为的文档的链接?IMO 这种情况可以在未来处理,因为从直觉上看它应该可以工作。

标签: javatransactionscdijava-ee-7jta

解决方案


CDI 规范的相关部分是第 7.2 节(容器调用和拦截)。由于exec2()不是通过上下文引用调用的,因此它的调用不构成业务方法调用。由于它不是业务方法调用,因此不会调用负责实现 by 规定的行为的拦截器@Transactional


推荐阅读