有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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


共 (2) 个答案

  1. # 1 楼答案

    java:comp/env前缀用于称为资源引用的东西。它是您正在查找的资源和资源的实际JNDI名称之间的抽象。它允许您更改基础资源的位置(即不同的服务器和上下文),而不影响查找代码

    我只在WAS中使用过它,但其思想是创建对现有资源的引用(JMS、JDBC、EJB…)对于需要访问资源的每个模块。它是部署配置的一部分

    Tutorial from Sun hereGlassfish example here.

  2. # 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

    然后在您的客户机代码中,您可以这样查找:

            InitialContext ctx;
            try {
                ctx = new InitialContext();
                DemoBeanRemote demo = (DemoBeanRemote) ctx.lookup("DemoBean/remote");
                System.out.println(demo.sayHello());
            } catch (NamingException e) {
                e.printStackTrace();
            }