代码之家  ›  专栏  ›  技术社区  ›  Rodrigo Prestes Machado

从Servlet远程查找另一条Glassfish

  •  0
  • Rodrigo Prestes Machado  · 技术社区  · 10 年前

    我正在尝试从Servlet远程查找另一条Glassfish。所以,我遵循了链接文档( http://docs.oracle.com/cd/E19798-01/821-1752/beanv/index.html ). 首先,我创建了一个名为CalculatorBean的无状态会话Ben,打包在一个同名的EJBJAR(CalculatorBean)中,JNDI名称为java:global/CalculatorBean/CcalculatorBean。

    根据文档,我创建了一个Web项目,并在sub-Web.xml中声明了以下文件中的EJB:

    <ejb-ref>
          <ejb-ref-name>ejb/CalculatorBean</ejb-ref-name>
          <jndi-name>corbaname:iiop:127.0.0.1:3700#CalculatorBean/CalculatorBean</jndi-name>
      </ejb-ref>
    

    其中127.0.0.1是机器的主机(本地!),3700是查询的默认端口,CalculatorBean/CalculatorBean是全局JNDI名称。第一个问题,理论上,JNDI名称传递到一个可互操作的字符串“CalculatorBean/CalculatorBean”中,而不是“java:global/CcalculatorBean/Ccalculator Bean”,对吗?

    之后,我创建了一个Servlet,并放入以下代码片段:

    ctx = new InitialContext ();
    bean = (CalculatorRemote) ctx.lookup ("java:comp/env/ejb/CalculatorBean");
    

    其中,CalculatorRemote是我们包含在java项目中的远程接口的名称:comp/env/是访问java EE组件的目录部分,ejb/CalculatorBean是sun-web.xml文件配置中我的bean的名称 当运行我的Servlet时,我遇到了异常:

    Caused by: javax.naming.NameNotFoundException: No object bound to name java:comp/env/ejb/CalculatorBean
    

    显然,它并没有找到名称,但是,我不知道应该使用什么名称来设置查找。

    1 回复  |  直到 10 年前
        1
  •  1
  •   Teodor    9 年前

    我有同样的问题,我解决了。

    默认情况下,EJB不可见 java:comp/env/ 并且不能在InitialContext实例中查找EJB。但是,您可以在使用@EJB注释注入至少一个EJB实例后成功查找EJB,例如:

    @EJB(name = "ejb/CalculatorBean")
    private CalculatorRemote calc;
    

    之后,CalculatorRemote EJB在InitialContext实例中可见。