EJB3 本地和远程接口

2022-09-02 09:43:38

我了解到本地接口是为同一容器的 JVM 实例中的客户端设计的,而远程接口是为驻留在 EJB 容器的 JVM 外部的客户端设计的。Web 应用程序客户机不是驻留在(或打包)在同一个 .ear 中,而是驻留在同一个 Java EE 服务器上,那该怎么办?


答案 1

官方注释的 Bean 只有在同一应用程序中才能访问。与 .ear(或其他 .war 或其他 .jar EJB)分开部署的 .war 是不同的应用程序,即使部署到同一应用程序服务器实例也是如此。@Local

因此,不能保证 .war 中的代码可以调用 .ear 中定义的 EJB bean。@Local

但是,在实践中,几乎所有应用程序服务器都有效。

有人请求 EJB 3.2 规范正式支持本地跨应用程序调用:https://download.oracle.com/otndocs/jcp/ejb-3_2-fr-spec


答案 2

本地接口将用于同一应用程序内的通信。这并不一定意味着JVM

关键是:即使在相同的JVM实例中,在同一台服务器上,两个不同的应用程序也无法使用本地接口进行通信(这意味着本地和无接口视图)。

如果你有一个Web组件(WAR)和一个业务组件(EJB-JAR)在同一应用程序中,那么最直观和直接的解决方案是将它们打包在一个EAR或一个WAR中(从Java EE 6开始)。


推荐