我从POJO调用EJB进行JNDI查找。我想知道什么是更好的查找方式以及每种方式的含义是什么?我有2个选项
在POJO的静态块中,对EJB进行静态引用,并在所有对象中使用此静态引用
public class MyPojo
{
static {
MyEJB ejb = (MyEJB) EJBServiceLocatorUtil.fetchService(IAppConstants.JNDI_LOCAL);
}
.....
}
每次创建新对象时都进行JNDI查找
public class MyPojo
{
public MyPojo(){
MyEJB ejb = (MyEJB) EJBServiceLocatorUtil.fetchService(IAppConstants.JNDI_LOCAL);
}
}
答案 0 :(得分:1)
如果尚未部署EJB或者JNDI上下文不可用,则选项1可能会失败。从一个应用服务器到另一个应用服务器可能存在可移植性问题。
选项2可能很耗时(JNDI查找),具体取决于您实例化MyPojo的频率。
另一种选择可能是使用Bill Plugh的单例模式的实现:http://en.wikipedia.org/wiki/Singleton_pattern#The_solution_of_Bill_Pugh其中Singleton是您的EJB。 JNDI查找只进行一次并且懒惰(在第一次调用时)。
请注意,所有这些选项仅对无状态会话Bean有效。