EJB3 本地和远程接口
我了解到本地接口是为同一容器的 JVM 实例中的客户端设计的,而远程接口是为驻留在 EJB 容器的 JVM 外部的客户端设计的。Web 应用程序客户机不是驻留在(或打包)在同一个 .ear 中,而是驻留在同一个 Java EE 服务器上,那该怎么办?
我了解到本地接口是为同一容器的 JVM 实例中的客户端设计的,而远程接口是为驻留在 EJB 容器的 JVM 外部的客户端设计的。Web 应用程序客户机不是驻留在(或打包)在同一个 .ear 中,而是驻留在同一个 Java EE 服务器上,那该怎么办?
官方注释的 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
本地接口将用于同一应用程序内的通信。这并不一定意味着JVM。
关键是:即使在相同的JVM实例中,在同一台服务器上,两个不同的应用程序也无法使用本地接口进行通信(这意味着本地和无接口视图)。
如果你有一个Web组件(WAR)和一个业务组件(EJB-JAR)在同一应用程序中,那么最直观和直接的解决方案是将它们打包在一个EAR或一个WAR中(从Java EE 6开始)。