我有这样的结构
@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?
答案 0 :(得分:3)
创建这样的对象时:
PackageProcessor p = new PackageProcessor()
EJB容器对它一无所知,容器不管理这个对象的生命周期,它也不能注入任何东西,将它包装在方面,应用事务行为。简单地说:对于您的应用程序服务器,此对象不存在。
当然,如果您使用PackageProcessor
注释@Stateless
并将其注入普通EJB,它将起作用。您不想这样做的任何理由?