为什么我们需要为EJB 3.0会话bean提供单独的远程和本地接口

Vik*_*dia 38 ejb java-ee ejb-3.0

我想知道为什么我们需要为EJB 3.0会话bean单独的远程和本地接口.我猜大多数时候他们都会定义相同的合同.为什么我不能有一个通用接口,在我的Bean中我应该只能说我希望远程和/或本地访问这个bean.

谢谢Vikas

rod*_*oap 15

这就是EJB规范所说的:

本地和远程编程模型之间的选择是Bean Provider在开发企业bean时所做的设计决策.
虽然可以为企业bean提供远程客户端视图和本地客户端视图,但通常只提供一个或另一个.

JSR220第3章

因此,在编写bean时,请考虑谁是客户端,本地客户端不太可能需要相同的方法,甚至是远程客户端所需的bean.


djn*_*jna 12

我不同意在设计时远程和本地应该被视为平凡的互换.

首先,远程调用存在开销,因此在设计远程接口时,需要仔细考虑是否正确的粒度和参数大小.因此,作为一名设计师,提醒这将是相对昂贵的.

此外,鉴于远程接口参数是通过值传递的,并且本地接口参数是通过引用传递的,因此两种情况之间存在基本的语义差异,因此您可能选择以不同方式设计两个接口.


ska*_*man 8

"位置透明度"的概念是一种危险的反模式.您的设计绝对需要知道它是在进行本地呼叫还是远程呼叫,原因有很多(错误处理和性能最明显).

远程EJB接口与其本地对应接口不同,因为异常签名需要不同以容纳仅在远程调用上发生的与网络相关的错误.将远程处理行李缠绕到Local接口(如EJB 1中的情况)会使代码变得非常糟糕.EJB 2引入了单独的本地接口,以简化始终本地的EJB的编程.