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() {
}
}
当客户端调用时,我预计:
- A::t 在超时为 10 分钟的事务中运行
- B::t 在容器默认超时(在 WildFly 中为 5 分钟)的新事务中运行
- A::t 内的 B::t 在其自己的新事务中运行,容器默认超时(在 WildFly 中为 5 分钟)
会发生什么:
- A::t 内的 B::t 在其自己的新事务中运行,超时为 10 分钟
如果嵌套的 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 可能意味着事务已经 运行。)
这将符合您的观察。
我想知道 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() {
}
}
当客户端调用时,我预计:
- A::t 在超时为 10 分钟的事务中运行
- B::t 在容器默认超时(在 WildFly 中为 5 分钟)的新事务中运行
- A::t 内的 B::t 在其自己的新事务中运行,容器默认超时(在 WildFly 中为 5 分钟)
会发生什么:
- A::t 内的 B::t 在其自己的新事务中运行,超时为 10 分钟
如果嵌套的 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 可能意味着事务已经 运行。)
这将符合您的观察。