Java glassfishbean引用查找失败

Java glassfishbean引用查找失败,java,glassfish-3,Java,Glassfish 3,这里是维尔德问题。我有一个声明了远程接口的bean和一个定义为无状态bean的实现。由于我希望能够根据实现需求用不同的bean替换bean,因此我在glassfishweb.xml中声明了一个ejb引用 如果我使用名称语法引用引用名称,比如@EJB(name=“BeanReference”),我就可以成功地注入bean。我还可以进行查找:newinitialcontext().lookup(“java:comp/env/BeanReference”) 奇怪的事情发生在我根本没有注射的时候(没有@

这里是维尔德问题。我有一个声明了远程接口的bean和一个定义为无状态bean的实现。由于我希望能够根据实现需求用不同的bean替换bean,因此我在
glassfishweb.xml
中声明了一个
ejb引用

如果我使用名称语法引用引用名称,比如
@EJB(name=“BeanReference”)
,我就可以成功地注入bean。我还可以进行查找:
newinitialcontext().lookup(“java:comp/env/BeanReference”)

奇怪的事情发生在我根本没有注射的时候(没有
@EJB
)。然后查找失败,出现“
javax.naming.NameNotFoundException:没有绑定到名称java:comp/env/BeanReference的对象”
”。如果我在“
java:comp/env
”中列出了这些对,它将确认引用不存在,除非在应用程序中的某个地方发生了
@EJB
注入。我已经检查了jndi名称条目,并确认它在初始化期间与Glassfish的输出相匹配

我还尝试使用
@Local
而不是
@Remote
,得到了相同的结果。我更喜欢
@Remote
,因为在实际部署中,
MyBean
实现可能驻留在远程glassfish实例上。它是本地的,仅用于开发和测试

使用Glassfish 3.1.1和NetBeans 7.1.2。下面的代码片段…为了清晰起见,省略了异常处理

@Remote
public interface MyBean {
    public String doSomething();
}

@Stateless
public class MyBeanImpl implements MyBean {
    @Override
    public String doSomething() {
        return "something";
    }
}

@Stateless
@LocalBean
public class MyOtherBean {
    public MyOtherBean() {
        Context ctx = new InitialContext();
        MyBean myBean = (MyBean)ctx.lookup("java:comp/env/BeanReference");
        String rc = myBean.doSomething();
        System.out.println("rc = " + rc);
    }
}

<ejb-ref>
    <ejb-ref-name>BeanReference</ejb-ref-name>
    <jndi-name>java:global/appName/MyBeanImpl!com.test.bean.MyBean</jndi-name>
</ejb-ref>
@Remote
公共接口MyBean{
公共字符串doSomething();
}
@无国籍
公共类MyBeanImpl实现了MyBean{
@凌驾
公共字符串doSomething(){
返回“某物”;
}
}
@无国籍
@本地豆
公共级肌球蛋白{
公共菜豆(){
Context ctx=新的InitialContext();
MyBean MyBean=(MyBean)ctx.lookup(“java:comp/env/BeanReference”);
字符串rc=myBean.doSomething();
System.out.println(“rc=”+rc);
}
}
BeanReference
java:global/appName/MyBeanImpl!com.test.bean.MyBean

目前,我添加了一个注入引用的虚拟bean,它可以正常工作。bean是无状态的,从未被引用过。