我正在设置一个有状态会话bean,并想使用context.lookup(name)进行调用,但是不知道如何正确定义name变量。
我正在使用Intellij,据我所知,与NetBeans相比,没有办法自动生成此路径。我已经使用针对该名称找到的指南尝试了多种方法: java:scope [/ app-name] / module-name / bean-name [!完全限定接口名称] 但是,我总是得到以下错误 javax.naming.NamingException:在SerialContext [myEnv = {java.naming.factory.initial = com.sun.enterprise.naming.impl.SerialInitContextFactory,java.naming.factory.state = com.sun中,“ RememberEJB”的查找失败。 corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl,java.naming.factory.url.pkgs = com.sun.enterprise.naming} [根异常是javax.naming.NameNotFoundException:找不到RememberEJB]
下面是调用函数的方法:
public Response getRememberedPost() {
try {
javax.naming.Context context = new InitialContext(); // Could also be InitialContext context = new InitialContext();
RememberBean rememberBean = (RememberBean) context.lookup("RememberEJB");
return Response.ok(rememberBean).build();
}
catch (NamingException e) {
e.printStackTrace();
return Response.noContent().build();
}
}
我希望名称变量必须类似于“ java:global / project-name / folder-for-beans / RememberEJB!src.Beans.RememberLocal”,但这仍然会产生相同的错误。
答案 0 :(得分:0)
您可以从Java EE tutorial中引用以下内容:
使用无接口视图访问本地企业Bean
可以通过依赖项注入或JNDI查找来实现对公开本地,无接口视图的企业bean的客户端访问。
获取对企业bean的无接口视图的引用
通过依赖性注入,使用javax.ejb.EJB
批注和
指定企业bean的实现类:
@EJB
ExampleBean exampleBean;
获取对企业bean的无接口视图的引用 通过JNDI查找,使用javax.naming.InitialContext接口的 查找方法:
ExampleBean exampleBean = (ExampleBean)InitialContext.lookup("java:module/ExampleBean");
所以在您的情况下:
RememberBean rememberBean = (RememberBean)context.lookup("java:module/RememberEJB");
答案 1 :(得分:0)
我尝试了艾哈迈德·拉伊(Ahmed Raaj)给出的答案,但仍然无法正常工作。我最终通过在启动时查看服务器日志找到了正确的名称,该日志显示了我的有状态bean的JNDI名称。就我而言,这是下面显示的名称。
RememberBean rememberBean = (RememberBean) context.lookup("java:global/DistributedGlassfish_ear_exploded/ejb/RememberEJB!Beans.RememberBean");
这与我以前尝试过的非常接近,我只是没想到还必须包含'_ear_exploded'。