EJB 3静态引用还是运行时查找?

时间:2011-09-26 14:26:31

标签: java ejb ejb-3.0

我从POJO调用EJB进行JNDI查找。我想知道什么是更好的查找方式以及每种方式的含义是什么?我有2个选项

  1. 在POJO的静态块中,对EJB进行静态引用,并在所有对象中使用此静态引用

     public class MyPojo
    {      
    static  {   
        MyEJB ejb = (MyEJB) EJBServiceLocatorUtil.fetchService(IAppConstants.JNDI_LOCAL);
        }
         .....
    }
    
  2. 每次创建新对象时都进行JNDI查找

    public class MyPojo
    {
    public MyPojo(){
        MyEJB ejb = (MyEJB)     EJBServiceLocatorUtil.fetchService(IAppConstants.JNDI_LOCAL);
    }
    }
    

1 个答案:

答案 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有效。