Spring学习笔记17

来源:互联网 发布:广告机发布系统源码 编辑:程序博客网 时间:2024/05/29 14:51

Spring远程概览

       远程涉及到客户端应用与服务之间的对话。客户端应用需要请求某些它本身不具备的功能,所以应用程序会连接到能够提供该功能的远程系统上。远程应用

通过一个远程服务(remote service)来开放它提供的功能。

       还以RoadRantz应用来说,除了用户本身的输入,我们还希望显示任何发布给一个驾驶员的交通方面的信息,而RoadRantz本身并没有这方面的记录。不过有一个第三方服务将会维护这方面的数据库信息并作为公共记录发布出来。因此RoadRantz应用就可以访问这个服务来获取相应信息了。这会涉及到一个远程调用,如图:


RoadRantz与远程服务的会话开始于一个从RoadRantz到远程服务的远程过程调用(remote procedure call)。表面上看,RPC类似于在本地对象上调用方法。他们都是同步的操作,都会阻碍调用代码的执行直到被调用过程完成。

       Spring提供了几种不同的RPC模型,包括远程方法调用(RMI)Hessian/BurlapHTTP InvokerJAX-RPC/SOAP。无论你选用那种模型,使用它们都有统一的方式。

       在所有的模型中,服务可以作为由Spring管理的bean配置到你的应用程序中。你可以使用一个代理工厂bean(proxy factory bean)来把远程服务注入到其他bean中的属性中,就像它们是本地对象那样。

       客户进行对代理的调用就好像是代理本身提供服务功能。代理既和远程服务通信也和客户进行通信。它负责处理连接和调用远程服务。

       另外,如果远程调用抛出java.rmi.RemoteException异常,代理将负责处理异常并重新将其抛出作为一个uncheckedRemoteAccessException异常。Remote异常一般都表示出现了问题,例如,网络配置无法恢复等。因为客户通常都不能从一个remote异常中恢复,所以重新抛出RemoteAccessException就是客户处理异常的优先选择。

       在服务器端,你可以开放任何Spring管理的bean的功能接口作为一个远程服务。在Spring中,我们只需要配置文件就实现远程服务或使用远程服务,你根本不需要编写任何Java代码来实现远程服务。你的服务bean也不需要知道它们包含在RPC(尽管任何被传递或从远程调用中返回的bean需要实现Serializable接口)

 

原创粉丝点击