jakarta-ee - Java EE,将一个 EJB 注入(inject)另一个 EJB

标签 jakarta-ee ejb

我遇到了一个我似乎无法弄清楚的问题。我想像这样将一个 EJB 注入(inject)另一个 EJB:

@Stateless
public class MainEJB {

    @EJB
    private HelperEJB helper;

}

@Stateless
public class HelperEJB implements HelperInterface {

}

如您所见,HelperEJB 是通过无接口(interface) View 公开的(注意:HelperInterface 是来自外部库的接口(interface),它不是 EJB 接口(interface))。这不起作用,我会得到以下异常:

 javax.naming.NamingException: Lookup failed for 'org.mycompany.ejb.HelperEJB #org.mycompany.ejb.HelperEJB'

但是,如果 HelperEJB 没有实现任何接口(interface):

@Stateless
public class HelperEJB {

}

它会起作用的。如果我在 MainEJB 和 HelperEJB 之间有一个 @Local 接口(interface),它也会起作用。

为什么这不能像我第一次尝试那样通过无界面 View 来完成?

最佳答案

如果您的私有(private)字段是使用接口(interface)声明的,那么您的第一个示例应该可以工作,如下所示:

@Stateless
public class MainEJB {
    @EJB
    private HelperInterface helper; // changed this
}

@Stateless
public class HelperEJB implements HelperInterface {
}

@Local
public interface HelperInterface {
}

关于jakarta-ee - Java EE,将一个 EJB 注入(inject)另一个 EJB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6355153/

相关文章:

java - 上下文参数值不是字符串

java - weblogic服务器集群环境

jakarta-ee - EJB 中如何管理 CMT 和 BMT?

java - 无法执行目标org.apache.maven.plugins:maven-compiler

java - 如何在 JProfiler 中启用 CPU 负载?

jakarta-ee - 避免容器管理的 EntityManager 超时

java - 在无状态ejb中使用静态最终映射来保存状态可以吗?

java - 揭秘 EJB 注释和注入(inject)

jakarta-ee - 将有状态 session Bean 与 servlet 结合使用

java - hibernate 延迟加载