EJB3本地和远程接口

Thu*_*ein 21 java jvm ejb-3.0

我知道Local接口是为同一容器的JVM实例中的客户端设计的,远程接口是为驻留在EJB容器JVM外部的客户端设计的.如果Web应用程序客户端不在同一个.ear中驻留(或打包)但位于同一Java EE服务器上,那该怎么办?

Arj*_*jms 27

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

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

但是,在几乎所有应用程序服务器的实践中,这都可行.

有一个EJB 3.2规范的请求正式支持本地跨应用程序调用:http://java.net/jira/browse/EJB_SPEC-22

  • 我是唯一一个投票支持这个功能的人感到有点难过...每个人 - 随意加入,只需点击这个JIRA请求'投票';-) (4认同)

Pio*_*cki 5

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

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

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

  • 是的,但这只是理论.实际上,您有一个包含多个WAR的大型应用程序(即合作伙伴,客户和管理门户应用程序),调用相同的EJB.对于部署/减少停机时间的原因,您可能希望单独打包这些WAR,就像许多人一样. (2认同)
  • 不要让我开始JEE人.整个事情是一个工作保障项目.多年来我们一直在复杂项目中使用它,我必须说我们在PHP中的效率提高了10倍.但是现在PHP对各种认证的人来说"不酷",你今天必须有一张证书来销售卫生纸,所以我们都必须忍受臃肿的废话,而这些废话并没有做任何正确的事情.它让我想起了F-35.;) (2认同)