2013-07-10 108 views
0

我已經(在一個EJB用作靜態成員)從非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:無法初始化SessionBean類上的類

當我改變MyHelper這個它的工作:

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

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

想知道爲什麼第一種方式沒有工作......

回答

0

這可能是可能的,因爲AnotherSessionBean可能尚未初始化時,JNDI查找發生在第一個代碼片段中。這意味着SessionBean首先被初始化。在初始化SessionBean的同時,MyHelper的構造函數被調用。這又被稱爲尚未加載的AnotherSessionBean的jndi。

這在第二個代碼片段中起作用,因爲在調用getEjb()時,所有的EJB都已經初始化。所以JNDI可以找到AnotherSessionBean。