Java EJB事务-静态上下文-坏主意? 形势

Java EJB事务-静态上下文-坏主意? 形势,java,static,ejb,code-injection,Java,Static,Ejb,Code Injection,想象一下: 有这样一个枚举: enum State{ INITIAL{ @Override public void proceed(){...} }, NEXT_STATE{ @Override public void proceed(){ ... } }, //and so on TERMINATED; public void proceed(){} } 然后是一个@实体。此实体表示处理订单的应用程序中的usesase。我们称之为

想象一下:

有这样一个枚举:

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

  public void proceed(){}
}
然后是一个@实体。此实体表示处理订单的应用程序中的usesase。我们称之为
ActivationUseCase
ActivationUseCase
(与从我的
UseCase
基类继承的任何其他类一样)有一个名为state的属性,该属性包含一个
状态

putzzle的最后一部分是EJB3.1bean,它检索
ActivationSecase
并对其调用procedure()

其思想是让
@实体
保存有关其可能状态(枚举)的所有信息,并且每个状态都知道在必须
时要做什么。继续()

问题 在procedure()方法中,我们有一个静态上下文。但是我们可能想调用其他EJB。所以有人开始做JNDI查找(本地)并调用我们需要的bean。 我觉得这很难看也很危险,但这不是问题所在

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

    MyServiceBean.myServiceMethod()
    |- ActivationUseCase.proceed()
       |- ManuallyLookedUpEJB.anotherServiceMethod()
因此,
MyServiceBean.myServiceMethod()
启动一个事务,检索
activationSecase
实例以调用它的
procedure()
。然后,我们查找
手动查找pejb
(新的InitialContext()…)并调用
另一个ServiceMethod()

问题 交易发生了什么?从哪里开始?它是否会涵盖另一种服务方法()
?我如何调试这个

免责声明
我不想讨论枚举包含逻辑构造(现在)。事实上,我正在收集重构(重写)整件事的理由。我只需要一些理由来支持我的观点,即这种构造不是一个好主意。

事务将像任何其他方法调用一样传播。因此,除非
ManuallyLookedUpEJB.anotherServiceMethod()
有一个新的事务传播,否则它将在由
MyServiceBean.myServiceMethod()
启动的同一个事务中执行。谢谢您的回复。在@Entity内的静态上下文中手动查找JNDI不是问题吗?很好。你说的“在静态上下文中”是什么意思?状态为[ENUM_VALUE].continue()的代码是在静态上下文中执行的。这就是我们进行JNDI查找以手动查找EdupeJB并对其调用另一个ServiceMethod()的地方。这就是我所说的静态上下文