Spring学习笔记17
2009-04-14 10:48
232 查看
Spring远程概览
远程涉及到客户端应用与服务之间的对话。客户端应用需要请求某些它本身不具备的功能,所以应用程序会连接到能够提供该功能的远程系统上。远程应用通过一个远程服务(remote service)来开放它提供的功能。
还以RoadRantz应用来说,除了用户本身的输入,我们还希望显示任何发布给一个驾驶员的交通方面的信息,而RoadRantz本身并没有这方面的记录。不过有一个第三方服务将会维护这方面的数据库信息并作为公共记录发布出来。因此RoadRantz应用就可以访问这个服务来获取相应信息了。这会涉及到一个远程调用,如图:
RoadRantz与远程服务的会话开始于一个从RoadRantz到远程服务的远程过程调用(remote procedure call)。表面上看,RPC类似于在本地对象上调用方法。他们都是同步的操作,都会阻碍调用代码的执行直到被调用过程完成。
Spring提供了几种不同的RPC模型,包括远程方法调用(RMI)、Hessian/Burlap、HTTP Invoker和JAX-RPC/SOAP。无论你选用那种模型,使用它们都有统一的方式。
在所有的模型中,服务可以作为由Spring管理的bean配置到你的应用程序中。你可以使用一个代理工厂bean(proxy factory bean)来把远程服务注入到其他bean中的属性中,就像它们是本地对象那样。
客户进行对代理的调用就好像是代理本身提供服务功能。代理既和远程服务通信也和客户进行通信。它负责处理连接和调用远程服务。
另外,如果远程调用抛出java.rmi.RemoteException异常,代理将负责处理异常并重新将其抛出作为一个unchecked的RemoteAccessException异常。Remote异常一般都表示出现了问题,例如,网络配置无法恢复等。因为客户通常都不能从一个remote异常中恢复,所以重新抛出RemoteAccessException就是客户处理异常的优先选择。
在服务器端,你可以开放任何Spring管理的bean的功能接口作为一个远程服务。在Spring中,我们只需要配置文件就实现远程服务或使用远程服务,你根本不需要编写任何Java代码来实现远程服务。你的服务bean也不需要知道它们包含在RPC中(尽管任何被传递或从远程调用中返回的bean需要实现Serializable接口)。
相关文章推荐
- 【Spring学习笔记-MVC-17】Spring MVC之拦截器
- mybatis学习笔记(17)-spring和mybatis整合
- Spring学习笔记(17)----使用Spring注解方式管理事务
- 传智播客Spring视频教程学习笔记17 18
- spring学习笔记17--Spring2.x+Hibernate3.x +Struts1.x整合开发(4)-----Spring提供的CharacterEncoding和OpenSessionInV
- JavaWeb学习笔记-spring-17-AOP-基于schema配置切面
- spring 源码学习笔记(一)—— spring ioc 之加载XML转换为BeanDefinition
- springboot学习笔记5(JPA 实现分页、排序、返回map集合)
- SpringMVC + Spring + MyBatis 学习笔记:SpringMVC和Spring一同工作的时候,AOP事务管理不起作用的解决方法
- Spring学习笔记二:注入方式
- Spring学习笔记之The IoC container
- Spring学习笔记(3)----------Spring快速入门
- Spring学习笔记1
- spring-boot学习笔记1
- Spring 学习笔记 整合Hibernate
- iOS学习笔记17—NSFileHandle 诸多方法理解
- Spring学习笔记(3)——快速入门
- Spring 学习笔记
- Java消息中间件学习笔记六 -- Spring JMS理论
- spring学习笔记(1)