【问题标题】:Remote invocation in EJB 3.0EJB 3.0 中的远程调用
【发布时间】:2011-02-21 07:53:33
【问题描述】:

我是 EJB 3.0 的新手,正在用我的 ejb 尝试 DI。

我使用 WAS 7.0 作为我的应用服务器,并且我在上面部署了两个 EAR。两者都有 ejb 3 会话 bean,我需要从耳朵 1 中可用的 ejb 调用耳朵 2 中的 ejb。

在我的两个应用程序中,我有一个包含本地和远程接口的客户端项目,一个包含由远程和本地接口扩展的接口的 commons 项目,然后是 ejb 项目和一个路由器项目(作为 ejb 的 web 服务端点)

现在进行远程调用,我尝试将客户端和公共 jar 文件放在 EAR 的 lib 目录中,更新了 ejb 项目的 META-INF 并尝试使用 @EJB 注释,但它给出了异常,即缺少 EJB。

我尝试进行 JNDI 查找,但它给出了 NamingException。

在 ejb 3.0 中执行远程 bean 调用的正确方法是什么?

请提供您的建议。

【问题讨论】:

  • 请贴出异常信息、堆栈和原因。

标签: jakarta-ee ejb-3.0 ejb rmi javabeans


【解决方案1】:

问题不在于调用,问题在于首先获得对 EJB 存根的引用。对于远程 EJB,这绝对需要 JNDI 查找(除非您想通过 SOAP 或 REST 调用它)。因此,您需要将lookup 参数添加到@EJB 注释中,并且您需要将正确的JNDI 查找名称传递给它——这是困难的部分,因为JNDI 名称的组成很复杂并且受很多因素的影响因素。

【讨论】:

  • WAS 7.0 是 JavaEE 5,不支持 @EJB 注释的查找元素。 WAS 不支持 mappedName,因此唯一可用的机制是 ibm-ejb-jar-bnd.xml 或在部署时配置绑定。 EJB 绑定的命名规则很复杂,但默认值相当简单:“ejb/{app}/{module}.jar/{BeanName}#{com.example.InterfaceName}”
猜你喜欢
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多