迄今为止,我们仅仅讨论了使用一个本地业务接口的会话bean。在这样的情况下。本地意味着仅仅能由执行在同一个应用程序server实例的JavaEE组件声明会话bean的依赖性。比如。远程client不可能通过本地接口使用会话bean。
为了容纳远程client,会话bean能够採用@Remote注解来标记它们的业务接口,以声明它是远程可用的。以下代码演示了前面所看到的的HelloService接口的远程版本号语法。
标记一个接口为远程的相当于使其扩展java.rmi.Remote接口。client获取的bean的引用不再是server上的一个本地引用,而是远程方法调用(RMI)的存根(stub),从而能够跨网络调用会话bean的操作。在bean类之上使用远程接口无需特别的支持。
(代码)
把接口变为远程的会影响性能以及怎样处理传递给业务方法的參数。远程业务接口能够在本地执行的server中使用,可是假设方法调用是通过RMI层进行路由。那么这样做可能仍会导致网络开销。远程接口之上的方法的參数也是按值传递。而不是按引用传递。这意味着即时client对会话bean而言是本地,也须要序列化參数。为本地client提供本地接口一般是更好的方法。
本地接口保存常规java方法调用的语义,避免了与网络和RMI相关的开销。
注意:
很多应用程序server提供选项以提高远程接口在本地使用时的性能,当中可能包含能够禁用方法參数的序列化护着坑农全然避开RMI。
当在应用程序代码中使用这些功能时要慎重。以为它们对于不同的应用server是不可移植的。