我有一个类似的结构
@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吗?
当您创建这样的对象时:
PackageProcessor p = new PackageProcessor()
EJB容器对它一无所知,容器不管理这个对象的生命周期,它也不能注入任何东西,将它封装在方面中,应用事务行为。简单地说:对于您的应用程序服务器来说,这个对象并不存在。
当然,如果您用@Stateless
注释PackageProcessor
,并将其作为普通EJB注入,它就会工作。你为什么不想这么做?