【问题标题】:Calling a method through a proxy that uses another method inside with Transactional annotation, would a transaction be created for the latter method?通过代理调用方法,该代理使用内部带有 Transactional 注释的另一个方法,是否会为后一种方法创建事务?
【发布时间】:2020-11-25 15:30:15
【问题描述】:

例子:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 2011-09-07
    • 2021-01-01
    • 2011-07-03
    • 2021-12-21
    • 2012-02-16
    • 1970-01-01
    • 2019-03-30
    • 2013-09-22
    相关资源
    最近更新 更多