gpt4 book ai didi

transactions - EJB 3.0 事务边界从一个本地 EJB 调用另一个

转载 作者:行者123 更新时间:2023-12-04 04:46:20 26 4
gpt4 key购买 nike

设想以下两个 ejb3.0 无状态 session bean,每个都实现一个本地接口(interface),并且它们被部署到同一个容器中:

public class EjbA {
@EJB
private ejbB;

public void methodA() {
for (int i=0; i<100; i++) {
ejbB.methodB();
}
}
}

public class EjbB {
public void methodB() {
...
}
}

当调用方法 A 时,是否每次调用方法 B 都会导致新事务开始并提交?或者,由于这些都是本地 bean,是否有一个事务在 methodA 被调用并被 methodB 重新使用时开始?

干杯!

最佳答案

这取决于您的交易属性 - 您可以使用 @TransactionAttribute 注释将其设置为以下之一:

  • 需要
  • REQUIRES_NEW
  • 支持
  • 强制性
  • 不支持
  • 从不

REQUIRED 是默认值,如果没有事务,将启动一个新事务,否则容器使用现有事务。

REQUIRES_NEW 告诉容器总是开始一个新事务。

根据我的经验,其他选项不太常用 - 但它们都在 EJB 规范中定义。

例如:

@Stateless
public class EjbA {
@EJB
private ejbB;

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void methodA() {
for (int i=0; i<100; i++) {
ejbB.methodB();
}
}
}

... 将使 methodA() 始终在新事务中运行。

关于transactions - EJB 3.0 事务边界从一个本地 EJB 调用另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3609949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com