java - 将远程 EJB 接口(interface)注入(inject)外部模块

标签 java jakarta-ee ejb

我有一个包含三个模块的 EAR 应用程序:

  • bean 位于“app-ejb”模块中
  • 远程接口(interface)位于“app-remote”中
  • 网络服务正处于“应用大战”
  • app-ejb 和 app-war 使用 app-remote 作为库。

全部打包在“app.ear”中。

这工作正常,但现在我必须在 EAR 应用程序之外使用相同的 bean,并且注入(inject)不起作用。

我在app-ejb中有:

@Stateless
@LocalBean
public class Services implements ServicesRemote {
  [...]
}

以及他在app-remote中的远程接口(interface):

@Remote
public interface ServicesRemote {
  [...]
}

在我的应用程序 war 中,我可以毫无问题地注入(inject)远程bean:

@Stateless
@LocalBean
public class UseServices {
  @EJB
  private ServicesRemote services;
  [...]
}

无论如何,在我的外部 ejb 应用程序中,作为独立部署并使用相同的 ejb-remote 作为库,如果我尝试像这样注入(inject)相同的 EJB:

@Stateless
@LocalBean
public class UseServicesFromAnotherApp {
  @EJB
  private ServicesRemote services;
  [...]
}

Glassfish (4.1) 给我一个错误“Class [ Lcom/[...]/ServicesRemote; ] not found”。

这是预期的吗?如何正确注入(inject)远程bean?

最佳答案

注入(inject)不适用于远程接口(interface)。 “可注入(inject)”的 Bean 存在于容器的 JVM 内,并且可用于注入(inject)到同一应用程序内的其他 Bean。尽管应用程序可能位于同一个 JVM 中,但访问同一容器中另一个应用程序中的 Bean 也是如此。由于远程方法源自另一个 JVM 或另一个应用程序,因此不可能进行注入(inject)。您必须使用 JNDI 查找来获取对远程 bean 的引用。

根据个人喜好,我会远离 EJB 远程接口(interface),而会使用另一种“远程处理”技术,例如 REST。

关于java - 将远程 EJB 接口(interface)注入(inject)外部模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40346886/

相关文章:

java - 如何在 OSX 上的 Java 7 中使用 32 位 native 库

java - 对文本文件中的值求和并打印它们

java - Java 线程安全单例工厂

unit-testing - 如何测试 EJB 3.0?

java - 如何使用 Activity 将值保存到特定文件以及如何使用 Android 中的服务进行访问?

java - 无法从 Eclipse DataSource Explorer 连接到 MySQl 数据库

java - 使用struts2-json-plugin时如何获取Struts2中的请求体

Java EE 和 Java ME 应用程序集成

jsf - 在 Java EE 中手动启动新线程安全吗?

java - JAX-RS 使用的无状态 EJB 中的 @Context 注入(inject)