我正在尝试从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
显然,它并没有找到名称,但是,我不知道应该使用什么名称来设置查找。