相同或不同 JVM 中的无界面视图和 @Local-ejbs's/server?

No-interface-view and @Local-ejbs in same or different JVM's/server?

我对 Ejb-Beans 中无接口视图和 @Local 视图之间的区别有点困惑。

使用无接口视图声明的 Bean 可以被同一个客户端访问 JavaEE 应用程序和实现 @Local 接口的 bean 可以被同一个客户端访问JVM 但可能在单独的 JavaEE 应用程序中,对吗?

这里JVM的具体含义是什么?具有 @Local 接口的 bean 在同一台服务器上,因为通常每个服务器有一个 Java 虚拟机?

我们还可以说,每个服务器有一个 JVM,每个从其 main 方法执行的 java 应用程序都独立使用 JVM 的一个实例吗?

抱歉新手问题。

是的,通常您会有一个 JVM 运行将一个应用程序服务器与一个或多个应用程序连接在一起,并且 @Local 接口将允许您的应用程序相互使用 EJBs.

运行 Java 应用程序通过调用它们的 main() 方法会为 运行 该应用程序创建一个新的 JVM,但我不知道这必须做什么与 EJBs.

no-interface 视图 (@LocalBean) 和 @Local 都是本地界面,几乎完全相同。唯一的区别是 @Local 使用单独的接口作为代理,而 @LocalBean 使用 bean class 本身作为代理(EJB 容器生成一个 subclass 来覆盖所有业务方法)。

EJB 规范声明 EJB 容器只需要支持同一应用程序中的本地接口。应用程序服务器可以实现 cross-application same-JVM 本地接口(@LocalBean@Local),但它们不是必须这样做。

如果您不熟悉术语,最简单的做法是将 "the JVM" 简化为 "the java process"。所以,是的,java -cp ...java -jar ... 启动包含单个 JVM 的单个 Java 进程,应用程序服务器进程通常是使用 java 启动的单个进程,因此它包含也只有一个 JVM。是的,您也可以说 @Local EJB 只能从相同的 Java 进程或相同的 JVM(或者通常甚至相同的 Java EE 应用程序调用,因为大多数应用程序都是可移植的需要 cross-application 个本地 EJB)。