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