我正在研究EJB查找的洞察力,並試圖瞭解容器和池如何工作。我創建了一些測試應用程序,我將解釋每一個應用程序。EJB內部查找:構造函數,@PostConstruct
先執行:查找內部構造函數類的構造函數(糟糕的做法)內進行
@Stateless
public class EjbTest {
protected EjbInjectedLocal ejbInjected;
public EjbTest() {
InitialContext ic = new InitialContext();
ejbInjected = (EjbInjectedLocal)ic.lookup("java:comp/env/ejb/EjbInjected");
ic.close();
}
public void test() {
ejbInjected.callSomeMethod();
return;
}
}
注射,但一切正常。構造函數檢索EJB的代理。當我調用方法test()
時,它會正確執行。
第二實施:查找內部@PostConstruct
@Stateless
public class EjbTest {
protected EjbInjectedLocal ejbInjected;
public EjbTest() {
}
@PostConstruct
public start() {
InitialContext ic = new InitialContext();
ejbInjected = (EjbInjectedLocal)ic.lookup("java:comp/env/ejb/EjbInjected");
ic.close();
}
public void test() {
ejbInjected.callSomeMethod();
return;
}
}
如在現有例子中,查找工作正常,以及所述方法測試。
三實現:構造函數和函數執行
@Stateless
public class EjbTest {
protected EjbInjectedLocal ejbInjected;
public EjbTest() {
InitialContext ic = new InitialContext();
ejbInjected = (EjbInjectedLocal)ic.lookup("java:comp/env/ejb/EjbInjected");
ejbInjected.callSomeMethod();
ic.close();
}
}
內查找使用這種實現,查找工作正常,但功能停止/凍結線程,因爲容器尚未準備好來無回代理實現,但是整個EJB和函數都無法執行。
當構造函數被調用時,bean尚未被初始化並且沒有依賴被注入?只有代理被返回,但它尚不可用,無法從池中檢索整個EJB?
調用方法EjbTest()時,EJB代理可用,但在調用@PostConstruct方法(類構造函數完成之後)之前,EjbTest EJB尚未準備好。但是第三個例子很少有工作正常..這只是一個時間任務完成的問題? – StarsSky