【发布时间】:2015-09-21 15:08:22
【问题描述】:
我正在研究 EJB 查找的洞察力,并试图了解容器和池的工作原理。我创建了一些测试应用程序,我将逐一解释。
第一个实现:在构造函数中查找
@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?
【问题讨论】:
标签: jakarta-ee dependency-injection ejb ejb-3.0