2011-09-26 18 views
1

我從一個POJO調用EJB來進行JNDI查找。我想知道什麼是更好的查找方式,每種方式的含義是什麼?我有兩個選擇EJB 3靜態引用或運行時查找?

  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

選項1可能會失敗,如果EJB尚未部署或如果JNDI上下文不阿瓦伊拉布勒。從一個應用程序服務器到另一個可能存在可移植性問題。

根據您實例化MyPojo的頻率,選項2可能非常耗時(JNDI查找)。

另一個選擇可能是使用Bill Plugh的單例模式的實現:http://en.wikipedia.org/wiki/Singleton_pattern#The_solution_of_Bill_Pugh其中Singleton是您的EJB。 JNDI查找只會在第一次調用時只執行一次。

請注意,所有這些選項僅對無狀態會話bean有效。