WildFly如何处理@TransactionTimeout?

问题描述 投票:0回答:1

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

我已经搜索了WildFly documentationAPI 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() {
  }
}

当由客户调用时,我希望:

  • A :: t在事务中运行,超时为10分钟
  • B :: t在新事务中运行,容器默认超时(WildFly中为5分钟)
  • A :: t中的B :: t在其自己的新事务中运行,容器默认超时(在WildFly中为5分钟)

会发生什么:

  • A :: t中的B :: t在其自己的新事务中运行,超时为10分钟

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

我正在使用Java 8运行WildFly 10.1.0。

transactions timeout ejb wildfly
1个回答
0
投票

作为TransactionTimeout-Annotation状态:

“用于在调用EJB业务方法时指定新启动的事务的事务超时的注释”

这表示imO:对于新启动的事务,而不是当前正在运行的事务。因此,B:t也因为启动新事务而受到影响,如果A:t在非事务上下文之外被调用,可能也会受到影响。

© www.soinside.com 2019 - 2024. All rights reserved.