java EJB3本地和远程接口
我知道本地接口是为同一容器的JVM实例中的客户机设计的,远程接口是为驻留在EJB容器的JVM之外的客户机设计的。web应用程序客户端不在同一个应用程序中(或打包在同一个应用程序中)如何。ear但是驻留在同一个JavaEE服务器上
你可以在下面搜索框中键入要查询的问题!
我知道本地接口是为同一容器的JVM实例中的客户机设计的,远程接口是为驻留在EJB容器的JVM之外的客户机设计的。web应用程序客户端不在同一个应用程序中(或打包在同一个应用程序中)如何。ear但是驻留在同一个JavaEE服务器上
# 1 楼答案
官方
@Local
注释的bean只有在它们位于同一应用程序中时才能被访问。A.战争与战争分开部署。ear(或other.war或other.jar EJB)是一个不同的应用程序,即使部署到同一个应用服务器实例上也是如此因此,不能保证中的代码。war可以调用
@Local
中定义的EJB bean。耳朵然而,实际上,在几乎所有的应用服务器上,这都是可行的
有人要求EJB3.2规范正式支持本地跨应用程序调用:https://download.oracle.com/otndocs/jcp/ejb-3_2-fr-spec
# 2 楼答案
远程接口可以跨应用程序调用,可以从应用程序服务器内的任何地方调用,也可以从外部调用,甚至可以从其他主机调用
所以假设您需要远程(
@Remote
)接口。在EJB3.1中,可以使用依赖注入# 3 楼答案
您使用远程接口,但使用JNDI进行查找(我就是这么做的),这样您就可以在服务器中找到EJB实例,并在web应用程序中使用它
尽管在web应用程序项目中仍然需要一个带有EJB接口的jar
编辑我同意JB Nizet的观点,你为什么要把战争排除在外
# 4 楼答案
本地接口将用于同一应用程序中的通信。它不一定意味着JVM
重点是:即使在同一个JVM实例中,在同一台服务器上,两个不同的应用程序也不能使用本地接口进行通信(这意味着本地和无接口视图)
如果您在同一个应用程序中有一个web组件(WAR)和一个业务组件(EJB-JAR),那么最直观、最直接的解决方案就是将它们打包到一个EAR或一个WAR中(从JavaEE6开始)