关于远程调用(xfire_httpinvoker_hessian etc)及远程服务管理的一些随想

关于远程调用(xfire_httpinvoker_hessian etc)及远程服务管理的一些随想

ID:13335117

大小:214.00 KB

页数:14页

时间:2018-07-22

关于远程调用(xfire_httpinvoker_hessian etc)及远程服务管理的一些随想_第1页
关于远程调用(xfire_httpinvoker_hessian etc)及远程服务管理的一些随想_第2页
关于远程调用(xfire_httpinvoker_hessian etc)及远程服务管理的一些随想_第3页
关于远程调用(xfire_httpinvoker_hessian etc)及远程服务管理的一些随想_第4页
关于远程调用(xfire_httpinvoker_hessian etc)及远程服务管理的一些随想_第5页
资源描述:

《关于远程调用(xfire_httpinvoker_hessian etc)及远程服务管理的一些随想》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、关于远程调用(XFire/HttpInvoker/Hessianetc.)及远程服务管理的一些随想在现代J2EE企业应用系统中,存在着Hessian、HttpInvoker、XFire、Axis等多种形式的远程调用技术。尽管有Spring等框架对这些技术进行了封装,降低了使用的复杂度,但对普通程序员而言仍是复杂的——至少需要要掌握这些技术的基础知识。 无论使用那种技术,其基本原理都是一样的:服务端生成骨架,对外暴露服务;客户端生成服务代理,访问调用服务。通常情况下,生成服务代理的代价比较高昂,这也是我们第一次访问远程服务速度比较慢的原因,为每个请

2、求生成新的服务代理恐怕不是我们所期望的。更何况,如果采用这种方式,就要在代码里针对各种不同的技术(如XFire、HttpInvoker)编写不同的服务生成和调用的处理代码。不仅麻烦,而且容易出错。我想,没有人愿意去直接操作各种框架技术的底层代码,这并不是一个好注意! 作为一种替代方案,我们设计了一个“服务池”的功能,或者说“服务工厂”更贴切一点。先看下面这张类图: 如上图所示,针对HttpInvoker、XFire、Hessian等各种远程调用技术,抽象出一个“远程服务池”(服务工厂)既RemoteServicePool接口。该接口提供了获取服务

3、及一些其他的辅助功能,并针对HttpInvoker、XFire、Hessian等不同技术提供了相应的具体实现。采用这种方式,开发人员只需在代码中“注入”RemoteServicePool,并以统一的方式(如getService())获取实际的服务,只是针对不同技术在配置上有些须差异而已。该技术的原理非常简单,在应用启动之前把所有存在的服务提供者提供的服务都配置好,并为它们分配一个唯一的ID。应用启动之后,框架会自动生成和这些地址相对应的服务代理(ServiceProxy),这些代理已经是可用的服务,服务获取的细节被完全屏蔽掉,开发者只要知道如何从

4、RemoteServicePool中获取服务就可以了。看一下服务池的接口定义:/** *远程服务缓冲池。 * *

 *对于一个既定的服务契约(既接口),可以有很多服务提供者(ServiceProvider)。该接口的提出,是为了解决服务访问者和服务提供者之间“一对多”的关系。 * *@authorTony */publicinterfaceRemoteServicePool{   /**    *从缓冲池中获取一个Service。    *    *

    *此处获得的是一个Object

5、e>,需要调用者自己做类型转换。    *    *

    *参数serviceId代表服务缓冲池中的一个实例名称。服务类型采用配置文件中默认的类型。    *    *@paramserviceId    *           实例名称    *    *@return服务对象    */   ObjectgetService(StringserviceId);} 接下来看看如何配置服务:   

6、rvicePool">                com.tonysoft.demo.service.UserService                                                   http://localhost:8080/server1/service/user

7、Service?WSDL                                          http://localhost:8080/server2/service/userService?WSDL                                最后再来看一下访问服务的代码: /**服务工厂*/   publicRemoteServicePoolus

8、erServicePool;   /**    *测试新增一个不存在的用户。    */publicvoidtestAddUser(){

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。