Java 通过本地接口从war访问ear中的ejb
是否可以使用本地接口从war访问驻留在ear文件中的ejb?Java 通过本地接口从war访问ear中的ejb,java,ejb-3.0,weblogic12c,Java,Ejb 3.0,Weblogic12c,是否可以使用本地接口从war访问驻留在ear文件中的ejb? 两者都部署在同一个应用服务器下 ejb: @Stateless(name="FirstDemoEJB",mappedName = "FirstDemoEJB/Local") public class FirstSessionBean implements FirstSessionBeanRemote, FirstSessionBeanLocal { } 现在,在测试servlet(war)中: 失败于: javax.naming.N
两者都部署在同一个应用服务器下 ejb:
@Stateless(name="FirstDemoEJB",mappedName = "FirstDemoEJB/Local")
public class FirstSessionBean implements FirstSessionBeanRemote, FirstSessionBeanLocal {
}
现在,在测试servlet(war)中:
失败于:
javax.naming.NameNotFoundException:尝试查找时
comp/env/FirstDemoEJB/Local-in/app/webapp/FirstWebEJBTest/12292093
但远程查找工作正常:
Object ob = context.lookup("FirstDemoEJB/Local#org.weblogic.FirstSessionBeanRemote");
您应该使用容器依赖注入从servlet访问ejb。问题很可能是jndi查找路径不正确。使用容器依赖项注入可以使您不必了解jndi命名方案
public class MyServlet extends HttpServlet {
@EJB(mappedName = "FirstDemoEJB/Local")
private FirstSessionBeanLocal firstSessionBeanLocal;
}
在WebLogic中(据我所知),您可以在那里使用
RemoteInterface
。容器检查它是否真的是LocalInterface
,并尽可能将其用作一个接口。规范不允许反向。我知道JBoss AS7在这方面遇到了一些问题。只是提到它来说明这可能是他们的问题。只是添加上面的注释吗?我认为您可能还需要meta inf文件夹中的一个空beans.xml文件,可能不需要。有关更多信息,请参阅:
public class MyServlet extends HttpServlet {
@EJB(mappedName = "FirstDemoEJB/Local")
private FirstSessionBeanLocal firstSessionBeanLocal;
}