EJB3本地和远程接口

时间:2011-12-15 20:31:18

标签: java jvm ejb-3.0

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

4 个答案:

答案 0 :(得分:26)

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

因此没有保证你的.war中的代码可以调用.ear中定义的@Local EJB bean。

然而,在几乎所有应用程序服务器的实践中,这都可行。

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

答案 1 :(得分:5)

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

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

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

答案 2 :(得分:0)

您使用远程接口,但是使用JNDI进行查找(这就是我的工作方式),这样您就可以在服务器中找到EJB的实例,并可以在Web应用程序中使用它。

虽然您仍然需要在Web应用程序项目中使用带有EJB接口的jar。

编辑,我同意JB Nizet,你为什么要在EAR之外使用WAR?

答案 3 :(得分:0)

可以跨应用程序,应用程序服务器内部以及外部甚至其他主机调用远程接口。

因此假设您需要远程(@Remote)接口。在EJB 3.1中,您可以使用依赖注入。