Jakarta ee EJB调用稍后调用另一个EJB的方法->;返回空
我有一个这样的结构Jakarta ee EJB调用稍后调用另一个EJB的方法->;返回空,jakarta-ee,dependency-injection,ejb,glassfish-3,ejb-3.1,Jakarta 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();
@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中
->没有注释@无状态
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注入,它就会工作。您不想这样做的原因是什么?使用多个EJB是个坏主意吗?因为如果我照你说的做,我可能会得到5-6个EJB。就性能而言是不是很差?与将这些方法放在同一个EJB中相比?我想我要问的是EJB注入是否会影响性能?5-6 EJB是否会使项目更重?:-)。我可以想象有数百甚至数千个EJB的项目。。。依赖项注入只影响初始化时间,即首次创建bean时。他们通常是事后汇集。另外,当几行之后您将访问数据库或JMS队列时,不要担心性能问题……此外,在EJB中,无状态会话bean的注入可能非常便宜,因为容器只需向会话bean注入一种URL(代理),而不是实际的实例。