[我想知道WildFly如何处理@TranscationTimeout,尤其是在调用使用@TransactionAttribute注释但不使用@TransactionAttribute本身注释的另一个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() {
}
}
当由客户调用时,我希望:
会发生什么:
似乎@TransactionTimeout继承了嵌套的EJB方法,如果它们未以某种方式用@TransactionTimeout进行注释,则在调用它们时将分别覆盖容器默认值。是否想要这种行为?有例外吗?
我正在使用Java 8运行WildFly 10.1.0。
作为TransactionTimeout-Annotation状态:
“用于在调用EJB业务方法时指定新启动的事务的事务超时的注释”
这表示imO:对于新启动的事务,而不是当前正在运行的事务。因此,B:t也因为启动新事务而受到影响,如果A:t在非事务上下文之外被调用,可能也会受到影响。