jakarta ee - 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的注入返回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注入,它就会工作。你为什么不想这么做?

最新更新