2011-05-05 120 views
1

我有很多託管的bean,並想知道如果我可以創建一個UtilClass,我 把我的服務調用(@EJB)。我已經嘗試過,但我有一個NullPointerException。 這是我UtilClass和我的管理豆什麼樣子:託管bean EJB注入

public class UtilClass{ 
@EJB 
private static MyFirstEjbLocal myFirstService; 
@EJB 
private static MySecondEjbLocal mySecondService; 
//other services 
//getters 

} 


public class MyManagedBean{ 
    public String myMethod(){ 

    UtilClass.getMyFirstService.doSomethingInDB(); 

    return null; 
    } 
} 

回答

1

我建議你做到以下幾點,因爲很明顯你有很多的服務,並希望讓他們組合在一起,你可以創建一個「抽象」豆,讓您的託管bean延長這種「抽象」豆,這樣你可以訪問EJB的在結構和安全的方式,下面的代碼會解釋我的意思:

public class MyAbstractBean{ 
    @EJB 
    protected MyFirstEjbLocal myFirstService; 
    @EJB 
    protected MySecondEjbLocal mySecondService; 
    // All your other EJB's here 
    ... 
    // All other variables and methods you could need 
} 


public class MyManagedBean 
    extends MyAbstractBean{ 

    public String myMethod1(){ 

     myFirstService.doSomethingInDB(); 
     return ""; 

    } 

    public String myMethod2(){ 

     mySecondService.doSomethingInDB(); 
     return ""; 

    } 
} 

請參考JavaEE5 EJB FAQ如果您需要澄清關於此事的更多概念。

+0

這將工作。實際上,我遇到了轉換器的問題,我想我可以在getAsObject方法中使用我的UtilClass,但是當我使用它時發生NullpointerException。 – boskonovic 2011-05-05 20:29:25

+0

我認爲那麼你有一個與_注射相關的問題不支持POJO classes_檢查我給出的鏈接 – camiloqp 2011-05-05 20:40:44

+0

你只能執行注入到一個託管類(EJB,servlet等),並且在服務器中,靜態字段可以被注入。我建議使用一個抽象類作爲camiloqp建議。 – 2011-05-05 20:41:15