Glassfish 为EJB提供JNDI

Glassfish 为EJB提供JNDI,glassfish,ejb,jndi,Glassfish,Ejb,Jndi,我已经创建了一个带有远程接口的EJB: @Stateless public class TestSessionBean implements TestSessionRemote { public void businessMethod() { System.out.println ("***businessMethod"); } } 我希望通过以下方式从服务器上运行的另一个组件(例如servlet)访问它: ic = new Initial

我已经创建了一个带有远程接口的EJB:

@Stateless
public class TestSessionBean implements TestSessionRemote 
{

    public void businessMethod() 
    {
            System.out.println ("***businessMethod");
    }
}
我希望通过以下方式从服务器上运行的另一个组件(例如servlet)访问它:

ic = new InitialContext();
ic.lookup("myEJB");
我正在使用netBeans 6.5.1和glassfish v2

我该怎么做

谢谢,
实际上,ejb3使用了默认的命名约定,我还没有找到一种解决方法

您的bean的名称类似于: TestSessionBean#package.TestSessionBean

要访问远程服务,您可以执行以下操作

InitialContext ctx = new InitialContext();
ctx.lookup(interfaceClass.getSimpleName()+"#"+interfaceClass.getName());
其中interfaceClass是远程接口的类

请注意,您尚未为该Web服务器定义远程接口(或本地接口)。您可能无法从其他上下文访问EJB


至于改名,实际上我认为通过募捐是不可能的。不过不确定

抱歉,差不多一个月后又重新出现了这个问题。在GlassFishV2中,您可以执行@Stateless(mappedName=“fooBean”),然后可以使用“fooBean”进行查找。这是特定于供应商的,不可移植。但是要小心,因为在GlassFish3(EJB3.1)中,这会改变一些。您仍然可以在远程接口查找中使用mappedName,但是现在有了一个标准化的java:全局命名设置。看看你是否还不够困惑。