2011-06-21 51 views
1

我有这样EJB调用哪个以后调用另一个EJB的方法 - >返回null

@Stateless 
public class CoreMainEJB implements CoreMainEJBRemote, CoreMainEJBLocal { 

    @Override 
    public void process(String configFileName) throws Exception { 
     ... 
     PackageProcessor p = new PackageProcessor(); 
     p.processPackage(Object something); 
    } 
} 

然后这样的结构,PackageProcesor.java - >未注释@Stateless

public class PackageProcessor(){ 
    @EJB 
    private GenericEJB genericEJB; 

    public void processPackage(Object something){ 
     genericEJB.create(something); 

    } 
    ... 
} 

GenericEJB返回的注射空值。这里是GenericEJB的内容

@Stateless 
@LocalBean 
public class GenericEJB{ 
    @PersistenceContext(unitName = "someWebPUnit") 
    private EntityManager em; 

    public void create(Object t){ 
     em.persist(t); 
    } 
} 

任何想法为什么GenericEJB注入返回null?

回答

3

当你创建一个这样的对象:

PackageProcessor p = new PackageProcessor() 

EJB容器不知道这件事,容器不管理该对象的生命周期,它也不能注入任何东西,在各方面把它包,应用交易行为。简单地说:对于你的应用服务器这个对象不存在。

当然,如果你注释PackageProcessor@Stateless并注入它作为普通的EJB,它将工作。任何你不想这样做的原因?

+0

拥有多个EJB是不是一个好主意?因为如果我按你说的做了,我可能会以5-6 EJB结束。表现方面不好吗?比较把这些方法放在同一个EJB中?我想我要问的是EJB注入对性能有什么影响?做5-6 EJB会让项目变得更加沉重吗? –

+1

:-)。我可以想象有几百甚至几千个EJB的项目......依赖注入只影响初始化时间,当bean第一次创建时。他们通常在之后汇集。此外,不用担心性能,当几行后您将访问数据库或JMS队列... –

+0

非常感谢。 + 1 –