jakarta ee为什么我在使用上下文时会得到一个NameNotFoundException。查找(“java:comp/env/MyBean”)
为什么在使用context.lookup("java:comp/env/MyBean")
时会得到NameNotFoundException,而在使用context.lookup(MyBean.class.getName())
时却没有
错误报告“No object bound for java:comp/env/MyBean”如何绑定名称以及class.getName()
为什么仍然有效?为什么要使用java:comp/env
我使用的是Netbeans 6.5和Glassfish 2.1
# 1 楼答案
java:comp/env前缀用于称为资源引用的东西。它是您正在查找的资源和资源的实际JNDI名称之间的抽象。它允许您更改基础资源的位置(即不同的服务器和上下文),而不影响查找代码
我只在WAS中使用过它,但其思想是创建对现有资源的引用(JMS、JDBC、EJB…)对于需要访问资源的每个模块。它是部署配置的一部分
Tutorial from Sun here和Glassfish example here.
# 2 楼答案
我不确定Glassfish是否是这样,但是对于JBOSS,如果打开DEBUG,您可以注意到将使用的jndi名称
例如,在部署名为DemoBean的会话bean期间,您将在服务器中看到以下日志。日志文件:-
2009-07-24 09:08:18747调试[org.jboss.ejb3.stateless.statelementalDelegateWrapper]创建jboss。j2ee:jar=SessionBeanDemo。jar,name=DemoBean,service=EJB3 2009-07-24 09:08:18747调试[org.jboss.ejb3.ProxyDeployer]没有为DemoBean声明远程绑定 2009-07-24 09:08:18747调试[org.jboss.ejb3.ProxyDeployer]DemoBean有远程接口 2009-07-24 09:08:18747调试[org.jboss.ejb3.ProxyDeployer]默认远程绑定的jndiName为DemoBean/remote
然后在您的客户机代码中,您可以这样查找: