我正在设置一个有状态 session bean,并希望使用 context.lookup(name) 调用它,但不知道如何正确定义 name 变量。
我正在使用 Intellij,据我所知,与 NetBeans 相比,无法自动生成此路径。我已经尝试了多种方法,使用我为这个名称找到的指南: java:scope[/应用程序名称]/模块名称/bean 名称[!完全限定接口(interface)名称] 但是,我总是收到以下错误 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”,但这仍然给出相同的错误。
最佳答案
您可以引用下面的Java EE tutorial :
使用无接口(interface) View 访问本地 Enterprise Bean
客户端对公开本地无接口(interface) View 的企业 Bean 的访问是通过依赖项注入(inject)或 JNDI 查找来完成的。
获取对企业 Bean 的无接口(interface) View 的引用 通过依赖注入(inject),使用
javax.ejb.EJB
注释并 指定企业bean的实现类:@EJB ExampleBean exampleBean;
获取对企业 Bean 的无接口(interface) View 的引用 通过JNDI查找,使用javax.naming.InitialContext接口(interface)的 查找方法:
ExampleBean exampleBean = (ExampleBean)InitialContext.lookup("java:module/ExampleBean");
所以在你的情况下:
RememberBean rememberBean = (RememberBean)context.lookup("java:module/RememberEJB");
关于java - 如何在有状态 session bean 上下文查找期间定义名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56710365/