0

我有一个问题,将 EJB 的引用保存为非 EJB 类的成员(在 EJB 中用作静态成员)

说我有

@EJB(...)
@Stateless
public Class SessionBean implements MySession{
   protected static MyHelper helper = new MyHelper();
}

public Class MyHelper{
   protected AnotherSessionBean ejb = lookup("jndi");

   public void doSomething(){
        ejb.foo();
   }
}

因为帮助类不是 EJB,所以我有一个查找方法,称为 int 成员实例化。使用此代码,我在运行时遇到异常 java.lang.NoClassDefFoundError: Could not initialize class on SessionBean 类。

当我将 MyHelper 更改为此时,它起作用了:

public Class MyHelper{
   protected AnotherSessionBean getEjb(){
     return (AnotherSessionBean)lookup("jndi");
   }

   public void doSomething(){
        getEjb().foo();
   }
}

想知道为什么第一种方法不起作用...

4

1 回答 1

1

这可能是因为在第一个代码片段中发生 JNDI 外观时可能尚未初始化 AnotherSessionBean。这意味着 SessionBean 首先被初始化。在初始化 SessionBean 时,调用了 MyHelper 的构造函数。对于尚未加载的 AnotherSessionBean,这又称为 jndi。

这在第二个代码片段中起作用,因为在调用 getEjb() 时,所有 EJB 都已初始化。所以JNDI 可以找到AnotherSessionBean。

于 2013-07-12T06:06:17.390 回答