2011-05-05 147 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