【问题标题】:Accessing ejb in ear from war via local interface通过本地接口从war中访问ejb
【发布时间】:2014-12-27 21:14:48
【问题描述】:

是否可以使用本地接口从战争中访问驻留在 ear 文件中的 ejb?
两者都部署在同一个应用服务器下。

ejb:

@Stateless(name="FirstDemoEJB",mappedName = "FirstDemoEJB/Local")
public class FirstSessionBean implements FirstSessionBeanRemote, FirstSessionBeanLocal {
}

现在,在测试 servlet(战争)中:

InitialContext context = new InitialContext();          
Object ob = context.lookup("java:comp/env/FirstDemoEJB/Local");

失败:

javax.naming.NameNotFoundException:尝试查找时 comp/env/FirstDemoEJB/Local in /app/webapp/FirstWebEJBTest/12292093.;

但远程查找工作正常:

Object ob  = context.lookup("FirstDemoEJB/Local#org.weblogic.FirstSessionBeanRemote");

【问题讨论】:

  • 在 WebLogic 中(据我所知),您可以在那里使用RemoteInterface。容器检查它是否真的是LocalInterface,并尽可能将其用作一个。规范不允许反向操作。
  • 我知道 JBoss AS7 在这方面遇到了一些麻烦。只是提及它以表明这可能是他们的问题。

标签: java ejb-3.0 weblogic12c


【解决方案1】:

您应该使用容器依赖注入从 servlet 访问 ejb。最有可能的问题是您的 jndi 查找路径不正确。使用容器依赖注入让您无需了解 jndi 命名方案。

public class MyServlet extends HttpServlet {
    @EJB(mappedName = "FirstDemoEJB/Local")
    private FirstSessionBeanLocal firstSessionBeanLocal;
}

【讨论】:

  • 只是加上上面的注解?
  • 我认为您可能还需要 meta-inf 文件夹中的空 beans.xml 文件,也许不需要。欲了解更多信息,请参阅:oracle.com/technetwork/articles/java/…
猜你喜欢
  • 2020-09-03
  • 1970-01-01
  • 2018-01-13
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 2011-03-06
  • 2017-08-27
相关资源
最近更新 更多