EJB调用一个稍后调用另一个EJB的方法 - >返回null

时间:2011-06-21 16:00:01

标签: java-ee dependency-injection ejb glassfish-3 ejb-3.1

我有这样的结构

@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的注入返回null。这是GenericEJB的内容

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

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

知道为什么注入GenericEJB会返回null?

1 个答案:

答案 0 :(得分:3)

创建这样的对象时:

PackageProcessor p = new PackageProcessor()
EJB容器对它一无所知,容器不管理这个对象的生命周期,它也不能注入任何东西,将它包装在方面,应用事务行为。简单地说:对于您的应用程序服务器,此对象不存在。

当然,如果您使用PackageProcessor注释@Stateless并将其注入普通EJB,它将起作用。您不想这样做的任何理由?