我正在研究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