gpt4 book ai didi

java - EJB TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 不

转载 作者:搜寻专家 更新时间:2023-11-01 03:52:58 26 4
gpt4 key购买 nike

我遇到了一个奇怪的 EJB 事务属性问题。 @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 没有按预期启动新事务。

我将 EJB 3 与 Weblogic 结合使用。

伪代码如下:

@Stateless
public class EJB1 implements IEJB1
{
@EJB
private IEJB2 ejb2;

@Override
public void method1()
{
for (i=0; i<N; i++) {
ejb2.method2();
}
}
}

@Stateless
public class EJB2 implements IEJB2
{
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void method2()
{
DBpersist();
}
}

因为我为 EJB2.method2 指定了 TransactionAttributeType.REQUIRES_NEW,所以我希望为 method2 创建一个新事务。但是在测试期间我发现没有为 method2 创建新的事务,method2 与 EJB1.method1 具有相同的事务。我使用 Weblogic 的 API 来记录事务信息。

然后我做了以下代码更改:

@Override
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED
public void method1()
{
for (i=0; i<N; i++) {
ejb2.method2();
}
}

这样它强制容器为 EJB2.method2 创建一个新事务。

但我不明白为什么当我为 EJB1.method1 使用默认的 TransactionAttributeType(通过不指定任何 TransactionAttributeType)并且为 EJB2.method2 使用 TransactionAttributeType=REQUIRES_NEW 时容器没有为 EJB2.method2 创建新事务。

我搜索了与此问题相关的现有问题。但我发现的所有情况都是当您从同一 EJB 中的另一个私有(private)方法调用私有(private)方法(使用 REQUIRES_NEW)时,除非您通过 EJB 接口(interface)调用它,否则容器不会启动新事务。这不是我的情况。

最佳答案

伪代码看起来没问题。我在各种项目中都实践过这一点,所以没有错。

这可能有多种原因

  • 在解释 REQUIRES 中的事务属性或注入(inject) @EJB 时,所用 weblogic 版本中的错误
  • 交易信息 api 使用中的错误

关于java - EJB TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 不,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19935443/

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