WildFly 如何处理@TransactionTimeout?

How is @TransactionTimeout handled by WildFly?

我想知道 WildFly 是如何处理 @TranscationTimeout 的,尤其是在调用另一个使用 @TransactionAttribute 注释但不使用 @TransactionTimeout 本身注释的 EJB 方法时。

我进行了搜索 WildFly documentation, API Docs,当然还进行了谷歌搜索,但我找不到任何声明。

考虑以下场景。我们有无状态的 EJB A 和 B。

@Stateless
public class A {

  @Inject
  private B b;

  @TransactionTimeout(unit = TimeUnit.MINUTES, value = 10)
  public void t() {
    b.t();
  }
}

@Stateless
public class B {

  @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
  public void t() {
  }
}

当客户端调用时,我预计:

会发生什么:

如果嵌套的 EJB 方法未以某种方式使用 @TransactionTimeout 进行注释,则 @TransactionTimeout 似乎会继承它们,分别在调用它们时覆盖容器默认设置。这种行为是想要的吗?有例外吗?

我是 运行 WildFly 10.1.0 和 Java 8.

TransactionTimeout-Annotation 所述:

"Annotation for specifying the transaction timeout of a newly started transaction when invoking an EJB business method"

这意味着 imO:对于新开始的交易,而不是当前的 运行 交易。因此,B:t 受到影响,因为它开始了一个新的事务,A:t 也可能受到影响,但前提是它是在非事务上下文中调用的。 (默认 @Requires 可能意味着事务已经 运行。)

这将符合您的观察。