gpt4 book ai didi

java - EJB 事务 - 静态上下文 - 坏主意?

转载 作者:行者123 更新时间:2023-11-30 11:33:59 27 4
gpt4 key购买 nike

现状

想象一下:

有一个这样的枚举:

enum State{
INITIAL{
@Override
public void proceed(){...}
},
NEXT_STATE{
@Override
public void proceed(){ ... }
},
//and so on
TERMINATED;

public void proceed(){}
}

然后是@Entity。该实体表示处理订单的应用程序中的用例。我们称它为 ActivationUseCaseActivationUseCase(与从我的 UseCase 基类继承的任何其他类一样)有一个名为 state 的属性,其中包含一个 State

拼图的最后一部分是一个 EJB 3.1 bean,它检索一个 ActivationUseCase 并对其调用 proceed()。

这个想法是让 @Entity 保存关于它可能的状态(枚举)的所有信息,并且每个状态都知道当它必须 .proceed().

问题

在 proceed() 方法中,我们有一个静态上下文。但是我们可能想要调用其他 EJB。所以有人开始做 JNDI 查找(本地)并调用我们需要的 bean。恕我直言,这非常丑陋和危险,但这不是这里的问题。

为了清楚起见,这里有一堆伪调用:

    MyServiceBean.myServiceMethod()
|- ActivationUseCase.proceed()
|- ManuallyLookedUpEJB.anotherServiceMethod()

因此 MyServiceBean.myServiceMethod() 启动一个事务,检索 ActivationUseCase 实例以在其上调用 proceed()。然后我们查找 ManuallyLookedUpEJB (new InitialContext()...) 并调用 anotherServiceMethod()

问题

交易会发生什么?它从哪里开始?它会涵盖 anotherServiceMethod() 吗?我该如何调试它?

免责声明

我不想讨论 enum-contains-logic 构造(现在)。事实上,我正在收集重构(重写)整个事情的理由。我只需要一些理由来支持我的说法,即这种构造不是一个好主意。

最佳答案

事务将像任何其他方法调用一样传播。因此,除非 ManuallyLookedUpEJB.anotherServiceMethod() 具有 REQUIRES_NEW 事务传播,否则它将在与 MyServiceBean.myServiceMethod() 启动的事务相同的事务中执行。

关于java - EJB 事务 - 静态上下文 - 坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15880088/

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