欢迎来到天天文库
浏览记录
ID:15722862
大小:36.00 KB
页数:5页
时间:2018-08-05
《web services开发体会和项目教训》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、去年,在一个大型项目(1500w)中用到WebServices,现在项目进入了尾声,所以对以前的开发经历做一个总结。 我想大家一定会问?为什么你们项目中要用到WebServices,因为客户有如下需求: 1、客户要求项目用C/S架构,并且服务器端是IBM那一套:WebSphereAppServer+DB2+AIX5.3+RS/6000。 2、最终用户上报数据,因为网络原因,譬如Modem上网,可以离线操作,等填写了几十张报表后,可以一次提交。同时,在登录时,可以将服务端数据同步到本地Access或MSSQL
2、数据库,这样提高客户端响应速度。 3、由于有些报表以后可能需要修改,或添加一些新报表,又不想重新开发,这样客户那边工作人员可以通过客户端自定义。 如果有以上需求,我想大家应该都比较认同这种异构分布式解决方案:客户端用C#.Net开发,通过WebServices调用服务器端Java组件。 其实,上面的解决方案太过于理想,最后我们不得不面对残酷的现实:三种客户端中的两种最后被迫改为B/S。 在项目中,我主要负责WebServices和服务器端组件开发中所遇到的种种问题,相当于技术支持吧,以及部分模块的开发。 以
3、下是我们开发中遇到的实际问题,虽然最终都一一解决,但遇到了几个无法突破的瓶颈:客户端不稳定,客户端响应迟缓,后期测试和维护困难巨大。 一、异构平台的WebServices兼容性 开发过程中,我们用Axis做WebServices引擎,Tomcat做容器。因为我们只有IBM提供的RAD6.0的60天试用版。该工具超级占内存,用内置的WebSphere开发测试极其缓慢,严重影响开发效率,经过我初期试用后,基本废弃了。推荐项目组二三十开发人员用Lombozeclipse3.12开发,基本满意。 由于Axis是一个
4、嵌入式引擎,所以可以将其打包到最终的WebSphereAppServer(WAS)上,也就是说,我们没有用到WAS提供的WebServices引擎,这引出了后面会谈到的一个问题:WebServices安全性怎么部署? 用Axis时,Axis一直都有一个bug或是说缺陷,官方文档也详细注明,只是我们当时没有发现而走了很多弯路:用Axis发布的WebServices给.net客户端调用时,必须用RPC风格,不能用WebServices标准的跨平台风格Document,而后者是Lombozaxis插件的默认方式。
5、也就是说,我们发布的WebServices总是莫名其妙的不好用。我们用JBuilder2007自带的Axis插件发布,竟然非常顺利。 二、WebServices开发中服务器端组件问题 我们服务器端开发,是用Spring+Hibernate,在Spring的Service层上再封装一层,也就是façade模式了,该façade直接发布为WebServices,必须经过这个转换,一是因为性能,二是因为Hibernate的复杂Model对象,在wsdl描述后,被.net客户端识别有些问题,List、Map也会有问
6、题,总之这些对象太复杂了,我们包装成简单的VO对象。 另外一个问题是,我们的service方法,如果直接给WebWork这样的框架在服务端用的的话,是不会出问题,当提供给.net客户端用时,就会出现lazyloading的错误,因为.net客户端不能接收Proxy对象,必须将数据全部load出来,但这时Hibernate的session已经关闭。项目组很多人遇到这些问题,最后大家不约而同的全部用eager模式,导致了最后的恶果:严重的的性能问题。由于我不是leader,所以当时这个问题发现了,也没法要求别人
7、,毕竟很大的一个团队。 切身体会:一个团队,如果不熟悉Hibernate就随便上,技术风险非常大。Hibernate带来的开发效率,是以团队成员掌握它为前提。 当然,性能问题不只是由Hibernate引起,WebServices本身的性能也非常严重:XML的序列化和反序列化耗时,XML文件的膨胀导致的网络传输,HTTP的无状态导致网络IO性能。切身体会:如果系统必须用分布式,而不是追求所谓的SOA架构,WebServices应该是下下策,因为还有很多协议和方式可以选择:IIOP、RMI、Hessian、bu
8、rlap、RPC,另外,做系统集成还有Message方式。 WebServices开发中其它问题比较少,因为WebServices本身不用编程,只是部署的事情,开发工具和服务器会自动为我们做,我们只需要理解SOAP引擎的原理和使用就够了,真的遇到问题,可以通过Axis的TcpMonitor监视SOAP数据包。 开发过程中,.net客户端那边,VSStudio做得很智能,它会根据wsdl文件生成我们所要的一切,当然
此文档下载收益归作者所有