我正在尝试从Servlet运行到另一个Glassfish的远程查找。因此,我一直在关注链接文档(http://docs.oracle.com/cd/E19798-01/821-1752/beanv/index.html)。首先,我创建了一个名为CalculatorBean的Sateless Session Ben,包装在同名(CalculatorBean)的EJB JAR中,JNDI名称为java:global / CalculatorBean / CalculatorBean。

根据文档,我创建了一个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 / CalculatorBean / CalculatorBean”,对吗?

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

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


其中,CalculatorRemote是我们包含在java项目中的远程接口的名称:comp / env /是访问Java EE组件的目录部分,ejb / CalculatorBean是在sun-web配置中我的bean的名称。 xml文件

当运行我的Servlet时,我得到了异常:

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


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

最佳答案

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

缺省情况下,您的EJB不可见到java:comp / env /中,并且您无法在InitialContext实例中查找EJB。但是,当使用@EJB注释注入至少一个EJB实例后,您可以成功查找EJB,例如您的示例:

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


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

关于java - 从Servlet远程查找另一个Glassfish,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29061821/

10-10 08:21