EJB中的代理对象

Luc*_*uke 8 java java-ee

我正在阅读Enterprise JavaBeans 3.1一书,我想知道我是否正确理解了EJB代理对象的概念.我现在知道它遵循代理模式,我已经阅读了一些关于它的内容.

当我们为bean创建接口时,我们正在这样做,因为我们希望实现代理模式.这有助于我们,因为客户端只关心我们可以做什么,而不是直接绑定到类,而是一个可以像真实对象一样工作的接口.

因此,容器可能实例化实现相应接口的代理对象,并在为我们调用真实EJB之前添加一些魔术代码(网络代码),因为代理对象是自动生成的?

我误解了这个概念吗?如果是这样,有人会告诉我什么是错的?

MaD*_*aDa 5

正确。如果您的应用程序局限于本地JVM,那么您为bean编写的接口就足够了。在这种情况下,不需要代理,因为可以实例化并直接提供实现类。

EJB的客户端无法在其实现类上工作,因为它们不在类路径中。EJB是位置透明的,您可以通过网络或从位于同一服务器上但被不同的类加载器隔离的另一个应用程序调用它们。在这种情况下,您需要具有代理对象来封送,通过网络发送和解封提供给EJB调用的参数以及收到的这些调用的结果。并且在客户端,您需要一个虚拟EJB接口实现,该接口将您的调用转发到安装了该EJB的服务器。

代理还处理其他功能,例如围绕EJB方法调用的开始/结束事务。

编辑:如果您很好奇这样的代理可以做什么,请看一下Java和AOP(在AspectJ或Spring中)的RMI概述。它将使您知道可以通过这种方式执行哪些类型的任务。