- 浏览: 800075 次
- 性别:
- 来自: 成都
-
最新评论
-
天塔上的猫:
技术孵化,任重道远啊!不过大哥能力牛逼啊,相信会有实现的一天的 ...
技术孵化的探索之路 -
SIHAIloveYAN:
谢谢分享,刚刚考上研究生,对我有很大的帮助,希望5年后再回到这 ...
我的2015 -
MUMU影子:
...
技术孵化的探索之路 -
tonyyan:
谢谢分享!
Java源码阅读的真实体会 -
cauchenlu:
http://ez.web126.cn/这个不错,完全颠覆目前 ...
一种快速开发的Java Web架构设计和实现(续)
去年,在一个大型项目(1500w)中用到Web Services,现在项目进入了尾声,所以对以前的开发经历做一个总结。
我想大家一定会问?为什么你们项目中要用到Web Services,因为客户有如下需求:
1、客户要求项目用C/S架构,并且服务器端是IBM那一套:WebSphere AppServer+DB2+AIX5.3+RS/6000。
2、最终用户上报数据,因为网络原因,譬如Modem上网,可以离线操作,等填写了几十张报表后,可以一次提交。同时,在登录时,可以将服务端数据同步到本地Access或MSSQL数据库,这样提高客户端响应速度。
3、由于有些报表以后可能需要修改,或添加一些新报表,又不想重新开发,这样客户那边工作人员可以通过客户端自定义。
如果有以上需求,我想大家应该都比较认同这种异构分布式解决方案:客户端用C# .Net开发,通过Web Services调用服务器端Java组件。
其实,上面的解决方案太过于理想,最后我们不得不面对残酷的现实:三种客户端中的两种最后被迫改为B/S。
在项目中,我主要负责Web Services和服务器端组件开发中所遇到的种种问题,相当于技术支持吧,以及部分模块的开发。
以下是我们开发中遇到的实际问题,虽然最终都一一解决,但遇到了几个无法突破的瓶颈:客户端不稳定,客户端响应迟缓,后期测试和维护困难巨大。
一、异构平台的Web Services兼容性
开发过程中,我们用Axis做Web Services引擎,Tomcat做容器。因为我们只有IBM提供的RAD6.0的60天试用版。该工具超级占内存,用内置的WebSphere开发测试极其缓慢,严重影响开发效率,经过我初期试用后,基本废弃了。推荐项目组二三十开发人员用Lomboz eclipse3.12开发,基本满意。
由于Axis是一个嵌入式引擎,所以可以将其打包到最终的WebSphere AppServer(WAS)上,也就是说,我们没有用到WAS提供的Web Services引擎,这引出了后面会谈到的一个问题:Web Services安全性怎么部署?
用Axis时,Axis一直都有一个bug或是说缺陷,官方文档也详细注明,只是我们当时没有发现而走了很多弯路:用Axis发布的Web Services给.net客户端调用时,必须用RPC风格,不能用Web Services标准的跨平台风格Document,而后者是Lomboz axis插件的默认方式。也就是说,我们发布的Web Services总是莫名其妙的不好用。我们用JBuilder2007自带的Axis插件发布,竟然非常顺利。
二、Web Services开发中服务器端组件问题
我们服务器端开发,是用Spring+Hibernate,在Spring的Service层上再封装一层,也就是façade模式了,该façade直接发布为Web Services,必须经过这个转换,一是因为性能,二是因为Hibernate的复杂Model对象,在wsdl描述后,被.net客户端识别有些问题,List、Map也会有问题,总之这些对象太复杂了,我们包装成简单的VO对象。
另外一个问题是,我们的service方法,如果直接给WebWork这样的框架在服务端用的的话,是不会出问题,当提供给.net客户端用时,就会出现lazy loading的错误,因为.net客户端不能接收Proxy对象,必须将数据全部load出来,但这时Hibernate的session已经关闭。项目组很多人遇到这些问题,最后大家不约而同的全部用eager模式,导致了最后的恶果:严重的的性能问题。由于我不是leader,所以当时这个问题发现了,也没法要求别人,毕竟很大的一个团队。
切身体会:一个团队,如果不熟悉Hibernate就随便上,技术风险非常大。Hibernate带来的开发效率,是以团队成员掌握它为前提。
当然,性能问题不只是由Hibernate引起,Web Services本身的性能也非常严重:XML的序列化和反序列化耗时,XML文件的膨胀导致的网络传输,HTTP的无状态导致网络IO性能。切身体会:如果系统必须用分布式,而不是追求所谓的SOA架构,Web Services应该是下下策,因为还有很多协议和方式可以选择:IIOP、RMI、Hessian、burlap、RPC,另外,做系统集成还有Message方式。
Web Services开发中其它问题比较少,因为Web Services本身不用编程,只是部署的事情,开发工具和服务器会自动为我们做,我们只需要理解SOAP引擎的原理和使用就够了,真的遇到问题,可以通过Axis的TcpMonitor监视SOAP数据包。
开发过程中,.net客户端那边,VSStudio做得很智能,它会根据wsdl文件生成我们所要的一切,当然,wsdl文件的变化,会导致VSStudio重新生成所有的类和接口,也很耗时,并且容易出问题。
三、Web Services的安全问题
当时解决Web Services安全问题,花了我将近一个月的时间,主要是学习和处理如下四个问题:
XML和Web Services安全规范
WAS的 Web Services引擎的安全部署
Axis和参考的Xfire引擎的Web Services安全
.net客户端WSE3.0的安全以及和WAS的通讯
最后这些问题基本上都解决了,不过还是没有用上,因为在我们已经开发的几种客户端和服务器端部署上很麻烦,还要测试,另外,客户也没法验收这个啊。
当然,我们还回避了一个严肃的问题:我们的Web Services是发布在Axis引擎上,还没有移植到WAS的Web Services引擎,而发布在这个平台,必须有RAD这类开发工具支持,几乎没法手动做。WAS引擎的Web Services安全配置异常复杂:我们当时只配置了Authentication和Integration,没有做Encryption,但完全够用。我当时用Sun的NetBean开发工具发布了一下Web Serivces,也是挺好用的,不过没有配置安全。顺便说一下,Sun的web Services引擎jwsdp2.0设计有点类似于EJB容器,很不好用,移植性特差。
我们当时用Axis引擎是1.3版本,而该版并不支持标准的OASIS的WS-Security,只有到2.0版才开始,而且几乎都是手写配置文件。
WAS的Web Services安全配置,对照IBM的红皮书,不是很难,但很复杂,安全相关的xml代码都好几百行,好几个文件。配置过程中,和.net客户端通讯时遇到一个问题,怎么也不能互通,但.net和.net客户端可以互通,Java和Java客户端也可以互通,最后我通过拦截soap包,找到了解决办法: 必须手动更改http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3 后的v3,IBM工具生成的是v1,这是标准不兼容引起的,因为当时RAD是04年底,而微软的WSE3.0比较新。后来发现这篇文章有相似的经历:[url]http://pluralsight.com/blogs/kirillg/archive/2005/04/13/7315.aspx [/url]
在处理Web Services安全过程中,我通过emule和IBM网站下载了上10本这方面的书籍,我觉得以下资料对我帮助最大:
四、开发过程中的的沟通问题
这应该不是一个技术问题,而是一个软件开发方法学的问题,但对整个软件开发过程影响极大。
我们面对的现实:.net客户端开发人员不懂服务器端Java,服务器端Java开发人员不懂.net。
除了技术壁垒外,还有业务衔接性的问题,因为我们不是纵向分模块开发,而横向开发的前提是我们服务器端开发人员很熟悉业务,知道客户端需要的接口,但实际上,业务主要由客户端推动。所以,两端的开发人员都遇到很大的沟通壁垒。
从技术的角度表达就是:客户端开发人员需要的接口,服务器端开发人员不清楚;服务器端开发人员也不知道怎么把握粒度。譬如,有个updateUser方法,但更新用户信息时,可能需要更新很多信息:用户信息、用户角色、用户所属组….。loadUser时也有同样的按需加载问题。
当然,从技术角度,开发Web Serivces有Bottom-up和Top-down两种开发模式。我们选择了前者,也是最常见的方式,也许用后者更适合我们的项目:从定义的wsdl文件开始,客户端和服务器端开发都遵循它。但问题是:我们怎么确定wsdl,也就是我们所要求的接口,因为我们自己对业务都不是很熟。
五、客户端和服务端开发测试方法
我们当时做得很笨,也最直接:等服务器端组件发布完毕后,通知客户端开发人员,然后客户端开发人员通过VSStudio提供的Web Services生成工具,根据Axis发布的wsdl文件,生成所需的.net对象,然后像本地调用一样使用。
但问题是:
wsdl随时都在变,这意味着客户端生成的组件总在变化,经常出现编译错误。
客户端开发过程中遇到的问题,一会是客户端自己,一会是服务器端组件:我要的方法包含的信息不够啊。
服务器组件测试一次,起容器特慢,而且客户端调用也慢。
我们的测试,最后走入了一个怎样的泥潭:譬如测试一张报表,都是在客户端手工填写,然后观察服务器端日志和响应。有人会问,用LoadRunner或Function Tester这类自动测试工具不就ok了吗?我都用过,它们对Web UI确实好用,后者对Swing客户端也好用,但对.net客户端,像是不太现实。
另外,Debug非常困难,因为它要求两端开发人员必须在一起密切配合。
我自己认为的解决方案,但未必真的好用:
服务器端Service方法必须写单元测试TestCase,可能代码量非常大,测试好后方发布为Web Services。
同时,服务器端提供同一套接口的Mock实现,供客户端开发测试,解决并行开发的问题。
六、其它问题
当然,上面的几点,具体到细节,我都省略了,总之问题非常非常多:技术问题、管理问题、方法和过程问题。
特别提的一点是,我们几乎开发了两套“业务层+持久化”解决方案,因为离线客户端也用了NHibernate持久化,这样导致开发测试工作量巨大,就说一点吧:两边同步是通过打包的sql语句,通过SOAP传输,但Access和DB2的sql有不兼容问题,如果要兼容,就会以牺牲性能和灵活性为代价。
另外,我们写项目建议书时很被动,但也没办法,因为有好几家公司竞争。对我们影响极大的几个问题:
当然,这个子系统只是我们那个庞大系统的一个部分。上面也就算我做的一点点总结吧,也是教训啊!不过,从个人角度考虑,学到的东西还是很多的。
这个子系统花去了我们将近200个人月,如果说那浪费的部分,估计至少是100个人月的工作量。是什么导致?从我这篇文章只能窥其一角,因为整个系统涉及CMS、OA、BI、E-commerce、GIS、IM、MIS。我自己总结一下,有以下原因:
1、项目建议书空洞,不切实际:公司也很无奈,客户也不成熟。
2、需求调研后的需求分析闭门造车:客户的合同是分阶段,我们上交需求说明书后付20%款,上交设计书后又付20%。全一个瀑布开发,虽然按RUP文档写。到半年后的实际开发时,发现很多需求都不合理。
3、整个过程都没有和客户沟通,到最后开发完毕才让客户看,那时客户也懵了:这不是我要的产品啊。改呀,改呀,熬夜啊。
4、项目团队整体技术实力薄弱,当时调来做Java开发的人员,只有少数几个以前做Java,大多数是临时学。想起那Hibernate使用,心寒啊。另外,WAS问题、AIX问题在产品环境下都出来了:系统不稳定、宕机。
5、整个开发阶段流程没有把握好,像项目规范、测试方法、日志、版本控制,这些后期都出现了,而且非常严重。就说那日志吧,最后出问题都不知道怎么查,日志一遍混乱。
6、缺乏做大项目经验,整个系统架构都比较松散,项目开始时很多都不知从何入手,也很仓促。
7、项目持续一年多,人都换了几批了,工作交接很大问题。
.....
不过,说实话,项目团队,特别是进公司一、两年的员工都很努力,没有人抱怨什么,我和他(她)们一起合作,还是很开心的。
使用webService可以有效的降低数据传输的复杂性,但是该协议还不成熟或相关lib未完成,所以还有非常多的功能不完善,可能再等一段时间以上问题就可以解决。
几年前我们试用webService解决一个异构数据集成问题,我们也遇到了以上问题由于技术力量薄弱,无法直接解决以上问题。通过重新设计数据处理流程来保证数据的完整性和正确性,性能问题通过数据组合减少XML节点,提高传输效率和解析速度(需要额外开发解析过程)。
你说的客户端是用Java开发吧,从技术的角度也许可行,我们的现实情况是:
1、会用Java的人非常少,就几个。
2、客户端工作量非常大,大约有18个模块,估计至少有10w行代码。
3、客户端的用户很多来自中小城市的企业主管,他们有些人连防火墙的概念都不知道,很多用户的电脑染上病毒的惟一解决办法是格式化硬盘。
4、上网部分是modem,高级的可能有ADSL。
我们是在这种条件下做选择的。我们有一个非常苛刻的原则:怎么让这些电脑盲正确、熟练使用我们的系统。遗憾的是,当初并没有太多考虑这些,导致后来的不可收拾。
如果是选择了C/S结构,那么客户端一定要限制,包括硬件和软件环境,这个甚至要白纸黑字写死了,不然一大堆莫名其妙的问题。windows客户端调整好了,安全性并不差。
你说的客户端是用Java开发吧,从技术的角度也许可行,我们的现实情况是:
1、会用Java的人非常少,就几个。
2、客户端工作量非常大,大约有18个模块,估计至少有10w行代码。
3、客户端的用户很多来自中小城市的企业主管,他们有些人连防火墙的概念都不知道,很多用户的电脑染上病毒的惟一解决办法是格式化硬盘。
4、上网部分是modem,高级的可能有ADSL。
我们是在这种条件下做选择的。我们有一个非常苛刻的原则:怎么让这些电脑盲正确、熟练使用我们的系统。遗憾的是,当初并没有太多考虑这些,导致后来的不可收拾。
我是一定不会同意这种原则的……
电脑盲就是电脑盲,这不是靠技术能够解决的问题
你们这个架构师不知是做什么吃的。敢这样搞。或者他说,他只是听说了WS的好处,然后把WS当作了万能的利剑。
Rod Johnson在“without EJB”中说了很多真诚的话,其中就有“以复杂性为生的行业”这样的说法。
说句实话,大多数B/S系统用asp、php就可以轻松搞定,而大多数C/S系统用传统的VB、PB、Delphi也很容易完成。硬件要求低,开发周期短。也就是说,90%的问题都可以用这些简单的技术解决。
可是,asp、VB太easy了,easy的东西自然就不值钱了。于是国际巨头们盯住了那10%,声称必须运用新一代的高级技术,如J2EE、.NET等等,可以轻松解决所有问题。新的价值链得以产生,巨头们又开心了。而程序员们怀着极大的期望投入新一轮的技术竞争。但结果是,为了那10%的复杂问题得以较容易地解决,我们把原先那90%的简单问题变得复杂。这正是笼罩在软件业头上的一道魔咒。
本人原先一直是新技术的狂热爱好者。好似一个新技术的追星族,精疲力尽之后才明白新老技术的共通性。其实做应用系统,你是用asp还是J2EE并不重要,重要的是你对业务的领悟能力和对技术的运用能力。有些业务是该用重型武器的,你得上J2EE;有些业务却是asp这样的小刀来得顺手,不可一概而论。asp用得精纯,也可以做到相当高的稳定和性能,以至于好的扩展性和可维护性;而生手弄出的J2EE,很多时候跑都跑不起来,再大的口号也是白费。
总之用什么技术并不重要,重要的是你熟不熟,精不精。整个IT技术圈子如果不能有这样的共识,就只能活跃着一大群满口新鲜术语的菜鸟,搞出一大堆费钱费力的豆腐渣工程。而国内的IT界也只能在这种烂泥潭中挣扎。
这个说的很在理~ 简单的问题,过于复杂化。
关于安全问题,不能用基于http的digest认证吗?和ws无关。
“不需要用的对象,都应该手动将其引用置空”,这么做的依据或教训是什么?愿闻其详。
使用httpinvoker算是在分布式环境中么?我在这种场景下从来没手动置空过po中不需要的属性,但也还没碰到过什么莫明其妙的问题。
有两个原因,一个是不需的对象都是cglib的增强类,序列化和反序列化需要额外的开销,第二就是如果两端jvm不一样,那么序列化和反序列化是无法进行的,因为增强类是没有指定序列化id的,所以会使用jvm默认的序列化id,两端的jvm不一样会导致序列化后无法进行正常的反序列化
做项目,我觉得特别可怕的是:总是从技术的角度考虑问题。很多企业业务系统,最核心的、最复杂、最困难理解和分析的往往是业务问题,而不是技术。
同意. 有过类似的经历.
但是问题还是出在软件开发上.
现在的ERP及其他的大型系统总是直上而下的设计和开发 无法顾及下面的具体业务需求.
ws为我们提供了一个机会 我们可以从满足一个小部门的简单业务需求开始 做一个超大规模的系统. 这样软件开发是至下而上的.
就象战争不同的武器就有不同的战术 当我们手中有了新的武器就应该有新的战术来配合 依然采用贴身肉搏火炮也不起作用.
我们的应用是不太可能采用cocoon这类xml框架,并且用xml做持久化:
1、我们项目组没有cocoon的开发经验。
2、xml数据库根本不太可能,我们的数据都涉及到国家基础数据,很多积累了上10年,海量的。
3、我们客户端提交的数据是由BO(著名商务智能软件)进行数据ETL(ETL:Extraction,Transformation,Load),最终从一批数据得到一些统计报表。
做项目,我觉得特别可怕的是:总是从技术的角度考虑问题。很多企业业务系统,最核心的、最复杂、最困难理解和分析的往往是业务问题,而不是技术。
我想大家一定会问?为什么你们项目中要用到Web Services,因为客户有如下需求:
1、客户要求项目用C/S架构,并且服务器端是IBM那一套:WebSphere AppServer+DB2+AIX5.3+RS/6000。
2、最终用户上报数据,因为网络原因,譬如Modem上网,可以离线操作,等填写了几十张报表后,可以一次提交。同时,在登录时,可以将服务端数据同步到本地Access或MSSQL数据库,这样提高客户端响应速度。
3、由于有些报表以后可能需要修改,或添加一些新报表,又不想重新开发,这样客户那边工作人员可以通过客户端自定义。
如果有以上需求,我想大家应该都比较认同这种异构分布式解决方案:客户端用C# .Net开发,通过Web Services调用服务器端Java组件。
其实,上面的解决方案太过于理想,最后我们不得不面对残酷的现实:三种客户端中的两种最后被迫改为B/S。
在项目中,我主要负责Web Services和服务器端组件开发中所遇到的种种问题,相当于技术支持吧,以及部分模块的开发。
以下是我们开发中遇到的实际问题,虽然最终都一一解决,但遇到了几个无法突破的瓶颈:客户端不稳定,客户端响应迟缓,后期测试和维护困难巨大。
一、异构平台的Web Services兼容性
开发过程中,我们用Axis做Web Services引擎,Tomcat做容器。因为我们只有IBM提供的RAD6.0的60天试用版。该工具超级占内存,用内置的WebSphere开发测试极其缓慢,严重影响开发效率,经过我初期试用后,基本废弃了。推荐项目组二三十开发人员用Lomboz eclipse3.12开发,基本满意。
由于Axis是一个嵌入式引擎,所以可以将其打包到最终的WebSphere AppServer(WAS)上,也就是说,我们没有用到WAS提供的Web Services引擎,这引出了后面会谈到的一个问题:Web Services安全性怎么部署?
用Axis时,Axis一直都有一个bug或是说缺陷,官方文档也详细注明,只是我们当时没有发现而走了很多弯路:用Axis发布的Web Services给.net客户端调用时,必须用RPC风格,不能用Web Services标准的跨平台风格Document,而后者是Lomboz axis插件的默认方式。也就是说,我们发布的Web Services总是莫名其妙的不好用。我们用JBuilder2007自带的Axis插件发布,竟然非常顺利。
二、Web Services开发中服务器端组件问题
我们服务器端开发,是用Spring+Hibernate,在Spring的Service层上再封装一层,也就是façade模式了,该façade直接发布为Web Services,必须经过这个转换,一是因为性能,二是因为Hibernate的复杂Model对象,在wsdl描述后,被.net客户端识别有些问题,List、Map也会有问题,总之这些对象太复杂了,我们包装成简单的VO对象。
另外一个问题是,我们的service方法,如果直接给WebWork这样的框架在服务端用的的话,是不会出问题,当提供给.net客户端用时,就会出现lazy loading的错误,因为.net客户端不能接收Proxy对象,必须将数据全部load出来,但这时Hibernate的session已经关闭。项目组很多人遇到这些问题,最后大家不约而同的全部用eager模式,导致了最后的恶果:严重的的性能问题。由于我不是leader,所以当时这个问题发现了,也没法要求别人,毕竟很大的一个团队。
切身体会:一个团队,如果不熟悉Hibernate就随便上,技术风险非常大。Hibernate带来的开发效率,是以团队成员掌握它为前提。
当然,性能问题不只是由Hibernate引起,Web Services本身的性能也非常严重:XML的序列化和反序列化耗时,XML文件的膨胀导致的网络传输,HTTP的无状态导致网络IO性能。切身体会:如果系统必须用分布式,而不是追求所谓的SOA架构,Web Services应该是下下策,因为还有很多协议和方式可以选择:IIOP、RMI、Hessian、burlap、RPC,另外,做系统集成还有Message方式。
Web Services开发中其它问题比较少,因为Web Services本身不用编程,只是部署的事情,开发工具和服务器会自动为我们做,我们只需要理解SOAP引擎的原理和使用就够了,真的遇到问题,可以通过Axis的TcpMonitor监视SOAP数据包。
开发过程中,.net客户端那边,VSStudio做得很智能,它会根据wsdl文件生成我们所要的一切,当然,wsdl文件的变化,会导致VSStudio重新生成所有的类和接口,也很耗时,并且容易出问题。
三、Web Services的安全问题
当时解决Web Services安全问题,花了我将近一个月的时间,主要是学习和处理如下四个问题:
XML和Web Services安全规范
WAS的 Web Services引擎的安全部署
Axis和参考的Xfire引擎的Web Services安全
.net客户端WSE3.0的安全以及和WAS的通讯
最后这些问题基本上都解决了,不过还是没有用上,因为在我们已经开发的几种客户端和服务器端部署上很麻烦,还要测试,另外,客户也没法验收这个啊。
当然,我们还回避了一个严肃的问题:我们的Web Services是发布在Axis引擎上,还没有移植到WAS的Web Services引擎,而发布在这个平台,必须有RAD这类开发工具支持,几乎没法手动做。WAS引擎的Web Services安全配置异常复杂:我们当时只配置了Authentication和Integration,没有做Encryption,但完全够用。我当时用Sun的NetBean开发工具发布了一下Web Serivces,也是挺好用的,不过没有配置安全。顺便说一下,Sun的web Services引擎jwsdp2.0设计有点类似于EJB容器,很不好用,移植性特差。
我们当时用Axis引擎是1.3版本,而该版并不支持标准的OASIS的WS-Security,只有到2.0版才开始,而且几乎都是手写配置文件。
WAS的Web Services安全配置,对照IBM的红皮书,不是很难,但很复杂,安全相关的xml代码都好几百行,好几个文件。配置过程中,和.net客户端通讯时遇到一个问题,怎么也不能互通,但.net和.net客户端可以互通,Java和Java客户端也可以互通,最后我通过拦截soap包,找到了解决办法: 必须手动更改http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3 后的v3,IBM工具生成的是v1,这是标准不兼容引起的,因为当时RAD是04年底,而微软的WSE3.0比较新。后来发现这篇文章有相似的经历:[url]http://pluralsight.com/blogs/kirillg/archive/2005/04/13/7315.aspx [/url]
在处理Web Services安全过程中,我通过emule和IBM网站下载了上10本这方面的书籍,我觉得以下资料对我帮助最大:
- Axis的若干文档:Reference、developers-guide、architecture-guide等,非常详细
IBM的红皮书:《WebSphere Version 6 Web Services Handbook Development and Deployment.pdf》、《WebSphere Application Server V6 Security Handbook.pdf》,它专门讲述了Web Services安全的原理和具体配置,非常深入浅出。
《Securing Web Services with WS-Security》:这本书很理论化,但我认为非常好,虽然Amazon排行不高。
WSE3.0的MSDN文档。
四、开发过程中的的沟通问题
这应该不是一个技术问题,而是一个软件开发方法学的问题,但对整个软件开发过程影响极大。
我们面对的现实:.net客户端开发人员不懂服务器端Java,服务器端Java开发人员不懂.net。
除了技术壁垒外,还有业务衔接性的问题,因为我们不是纵向分模块开发,而横向开发的前提是我们服务器端开发人员很熟悉业务,知道客户端需要的接口,但实际上,业务主要由客户端推动。所以,两端的开发人员都遇到很大的沟通壁垒。
从技术的角度表达就是:客户端开发人员需要的接口,服务器端开发人员不清楚;服务器端开发人员也不知道怎么把握粒度。譬如,有个updateUser方法,但更新用户信息时,可能需要更新很多信息:用户信息、用户角色、用户所属组….。loadUser时也有同样的按需加载问题。
当然,从技术角度,开发Web Serivces有Bottom-up和Top-down两种开发模式。我们选择了前者,也是最常见的方式,也许用后者更适合我们的项目:从定义的wsdl文件开始,客户端和服务器端开发都遵循它。但问题是:我们怎么确定wsdl,也就是我们所要求的接口,因为我们自己对业务都不是很熟。
五、客户端和服务端开发测试方法
我们当时做得很笨,也最直接:等服务器端组件发布完毕后,通知客户端开发人员,然后客户端开发人员通过VSStudio提供的Web Services生成工具,根据Axis发布的wsdl文件,生成所需的.net对象,然后像本地调用一样使用。
但问题是:
wsdl随时都在变,这意味着客户端生成的组件总在变化,经常出现编译错误。
客户端开发过程中遇到的问题,一会是客户端自己,一会是服务器端组件:我要的方法包含的信息不够啊。
服务器组件测试一次,起容器特慢,而且客户端调用也慢。
我们的测试,最后走入了一个怎样的泥潭:譬如测试一张报表,都是在客户端手工填写,然后观察服务器端日志和响应。有人会问,用LoadRunner或Function Tester这类自动测试工具不就ok了吗?我都用过,它们对Web UI确实好用,后者对Swing客户端也好用,但对.net客户端,像是不太现实。
另外,Debug非常困难,因为它要求两端开发人员必须在一起密切配合。
我自己认为的解决方案,但未必真的好用:
服务器端Service方法必须写单元测试TestCase,可能代码量非常大,测试好后方发布为Web Services。
同时,服务器端提供同一套接口的Mock实现,供客户端开发测试,解决并行开发的问题。
六、其它问题
当然,上面的几点,具体到细节,我都省略了,总之问题非常非常多:技术问题、管理问题、方法和过程问题。
特别提的一点是,我们几乎开发了两套“业务层+持久化”解决方案,因为离线客户端也用了NHibernate持久化,这样导致开发测试工作量巨大,就说一点吧:两边同步是通过打包的sql语句,通过SOAP传输,但Access和DB2的sql有不兼容问题,如果要兼容,就会以牺牲性能和灵活性为代价。
另外,我们写项目建议书时很被动,但也没办法,因为有好几家公司竞争。对我们影响极大的几个问题:
- 1、IBM的WAS比起WebLogic Server易用性差远了,导致部署时极其耗时。而且还有一些bug,譬如连接池资源,当时不得不和IBM工程师咨询。实际上,我们只用到强大的WAS的一个非常小的部分:Web容器。
2、我们没有针对WAS的开发工具RAD。但说实话,那试用版的RAD也是一个字:慢,而且安装时超级大,约4个G。而且和我们已经在用的版本控制工具VSS没法集成。
3、项目的C/S架构不是很合理,就是原来客户的B/S架构,也运行挺好的,而且用asp,跑在一个pc server上。我们一定程度上为了技术而技术。最后也达不到客户需求:性能+稳定。
4、自定义报表最后没有投入使用,只是一个半成品。本来自定义报表就很难,要是容易,一个软件外行人员,就可以把表现层到持久化轻松搞定,那一般MIS开发人员不要失业了,MDA也没那么强。很多OA平台一直在解决这个问题,也没有发现特别好用的。我们做技术调研期间试过MS的InfoPath和Adobe Designer,以及Excel Server,都不能满足需求。
当然,这个子系统只是我们那个庞大系统的一个部分。上面也就算我做的一点点总结吧,也是教训啊!不过,从个人角度考虑,学到的东西还是很多的。
这个子系统花去了我们将近200个人月,如果说那浪费的部分,估计至少是100个人月的工作量。是什么导致?从我这篇文章只能窥其一角,因为整个系统涉及CMS、OA、BI、E-commerce、GIS、IM、MIS。我自己总结一下,有以下原因:
1、项目建议书空洞,不切实际:公司也很无奈,客户也不成熟。
2、需求调研后的需求分析闭门造车:客户的合同是分阶段,我们上交需求说明书后付20%款,上交设计书后又付20%。全一个瀑布开发,虽然按RUP文档写。到半年后的实际开发时,发现很多需求都不合理。
3、整个过程都没有和客户沟通,到最后开发完毕才让客户看,那时客户也懵了:这不是我要的产品啊。改呀,改呀,熬夜啊。
4、项目团队整体技术实力薄弱,当时调来做Java开发的人员,只有少数几个以前做Java,大多数是临时学。想起那Hibernate使用,心寒啊。另外,WAS问题、AIX问题在产品环境下都出来了:系统不稳定、宕机。
5、整个开发阶段流程没有把握好,像项目规范、测试方法、日志、版本控制,这些后期都出现了,而且非常严重。就说那日志吧,最后出问题都不知道怎么查,日志一遍混乱。
6、缺乏做大项目经验,整个系统架构都比较松散,项目开始时很多都不知从何入手,也很仓促。
7、项目持续一年多,人都换了几批了,工作交接很大问题。
.....
不过,说实话,项目团队,特别是进公司一、两年的员工都很努力,没有人抱怨什么,我和他(她)们一起合作,还是很开心的。
评论
77 楼
lendo.du
2007-05-08
不错!
76 楼
heimu
2007-05-08
和我去年做的一个项目很相似。
问一个.net端开发的题外话,这种直接由web service取出的数据其实对于做惯.net开发的人来说相当难用(用惯了dataset),不知道楼主有没有作.net端接口的开发
问一个.net端开发的题外话,这种直接由web service取出的数据其实对于做惯.net开发的人来说相当难用(用惯了dataset),不知道楼主有没有作.net端接口的开发
75 楼
seacat
2007-05-08
我前段时间也接手了一个类似的项目,前台用Delphi,后台用EJB 2.x,通过web service调用。考察之后,我的结论是:需要一个直接的SQL->web service框架,中间不要再有任何java层,否则开发效率、运行效率都难以保证。
74 楼
hhywangwei
2007-05-06
55925384 写道
不错,我也深有体会。我们当时为香港一个航空公司做的系统架构也差不多,30多个子系统,系统分为三层 DBS(操作数据库)--->BU(业务逻辑)-->client(UI).中间全部通过webservice调用,在开发过程中我们遇到以下几个问题:
1.WebService 权限控制问题
2.跨WebService 事务控制
3.WebService调用延时(对于有些费时的功能很不好处理,以至于后来不得不在有些操作上摈弃了webservice)
4.性能&兼容性,AXIS和.net的webservice机制很多地方需要特别注意
5.调试&测试极其麻烦
1.WebService 权限控制问题
2.跨WebService 事务控制
3.WebService调用延时(对于有些费时的功能很不好处理,以至于后来不得不在有些操作上摈弃了webservice)
4.性能&兼容性,AXIS和.net的webservice机制很多地方需要特别注意
5.调试&测试极其麻烦
使用webService可以有效的降低数据传输的复杂性,但是该协议还不成熟或相关lib未完成,所以还有非常多的功能不完善,可能再等一段时间以上问题就可以解决。
几年前我们试用webService解决一个异构数据集成问题,我们也遇到了以上问题由于技术力量薄弱,无法直接解决以上问题。通过重新设计数据处理流程来保证数据的完整性和正确性,性能问题通过数据组合减少XML节点,提高传输效率和解析速度(需要额外开发解析过程)。
73 楼
mengchen
2007-05-04
我现在也在做一个小系统开发,用的差不多也是这种模式。
java开发web service,在tomcat中利用axis来发布,本来想用hibernate,不过发现很复杂,就放弃了,后来直接用sql语句操纵数据库。
.net用来开发客户端。
但感觉运行起来太慢了,而且安全也不好做。
java开发web service,在tomcat中利用axis来发布,本来想用hibernate,不过发现很复杂,就放弃了,后来直接用sql语句操纵数据库。
.net用来开发客户端。
但感觉运行起来太慢了,而且安全也不好做。
72 楼
zexunlee
2007-05-03
好文章,正好需要用到ws。
71 楼
无明
2007-05-03
zwchen 写道
你说的客户端是用Java开发吧,从技术的角度也许可行,我们的现实情况是:
1、会用Java的人非常少,就几个。
2、客户端工作量非常大,大约有18个模块,估计至少有10w行代码。
3、客户端的用户很多来自中小城市的企业主管,他们有些人连防火墙的概念都不知道,很多用户的电脑染上病毒的惟一解决办法是格式化硬盘。
4、上网部分是modem,高级的可能有ADSL。
我们是在这种条件下做选择的。我们有一个非常苛刻的原则:怎么让这些电脑盲正确、熟练使用我们的系统。遗憾的是,当初并没有太多考虑这些,导致后来的不可收拾。
如果是选择了C/S结构,那么客户端一定要限制,包括硬件和软件环境,这个甚至要白纸黑字写死了,不然一大堆莫名其妙的问题。windows客户端调整好了,安全性并不差。
70 楼
clamp
2007-05-03
zwchen 写道
你说的客户端是用Java开发吧,从技术的角度也许可行,我们的现实情况是:
1、会用Java的人非常少,就几个。
2、客户端工作量非常大,大约有18个模块,估计至少有10w行代码。
3、客户端的用户很多来自中小城市的企业主管,他们有些人连防火墙的概念都不知道,很多用户的电脑染上病毒的惟一解决办法是格式化硬盘。
4、上网部分是modem,高级的可能有ADSL。
我们是在这种条件下做选择的。我们有一个非常苛刻的原则:怎么让这些电脑盲正确、熟练使用我们的系统。遗憾的是,当初并没有太多考虑这些,导致后来的不可收拾。
我是一定不会同意这种原则的……
电脑盲就是电脑盲,这不是靠技术能够解决的问题
69 楼
wangyuanyi
2007-05-02
我对Web Services的理解:
1. Web Services只应该在系统边界使用,是对外部系统暴露的接口;
2. 如果Web Services传输的数据量大于2M,建议传输之前压缩;
3. 一个Web Services方法就应该是一个独立的事务,不应该成为其他事务的一个操作。
1. Web Services只应该在系统边界使用,是对外部系统暴露的接口;
2. 如果Web Services传输的数据量大于2M,建议传输之前压缩;
3. 一个Web Services方法就应该是一个独立的事务,不应该成为其他事务的一个操作。
68 楼
lixigua
2007-04-30
55925384 写道
不错,我也深有体会。我们当时为香港一个航空公司做的系统架构也差不多,30多个子系统,系统分为三层 DBS(操作数据库)--->BU(业务逻辑)-->client(UI).中间全部通过webservice调用,在开发过程中我们遇到以下几个问题:
1.WebService 权限控制问题
2.跨WebService 事务控制
3.WebService调用延时(对于有些费时的功能很不好处理,以至于后来不得不在有些操作上摈弃了webservice)
4.性能&兼容性,AXIS和.net的webservice机制很多地方需要特别注意
5.调试&测试极其麻烦
1.WebService 权限控制问题
2.跨WebService 事务控制
3.WebService调用延时(对于有些费时的功能很不好处理,以至于后来不得不在有些操作上摈弃了webservice)
4.性能&兼容性,AXIS和.net的webservice机制很多地方需要特别注意
5.调试&测试极其麻烦
你们这个架构师不知是做什么吃的。敢这样搞。或者他说,他只是听说了WS的好处,然后把WS当作了万能的利剑。
67 楼
dovecat
2007-04-30
李西瓜(lixigua)说得很贴切.HOHO~
非常赞同!
非常赞同!
66 楼
55925384
2007-04-30
不错,我也深有体会。我们当时为香港一个航空公司做的系统架构也差不多,30多个子系统,系统分为三层 DBS(操作数据库)--->BU(业务逻辑)-->client(UI).中间全部通过webservice调用,在开发过程中我们遇到以下几个问题:
1.WebService 权限控制问题
2.跨WebService 事务控制
3.WebService调用延时(对于有些费时的功能很不好处理,以至于后来不得不在有些操作上摈弃了webservice)
4.性能&兼容性,AXIS和.net的webservice机制很多地方需要特别注意
5.调试&测试极其麻烦
1.WebService 权限控制问题
2.跨WebService 事务控制
3.WebService调用延时(对于有些费时的功能很不好处理,以至于后来不得不在有些操作上摈弃了webservice)
4.性能&兼容性,AXIS和.net的webservice机制很多地方需要特别注意
5.调试&测试极其麻烦
65 楼
steeven
2007-04-29
lgx522 写道
zwchen 写道
3、项目的C/S架构不是很合理,就是原来客户的B/S架构,也运行挺好的,而且用asp,跑在一个pc server上。我们一定程度上为了技术而技术。最后也达不到客户需求:性能+稳定。
Rod Johnson在“without EJB”中说了很多真诚的话,其中就有“以复杂性为生的行业”这样的说法。
说句实话,大多数B/S系统用asp、php就可以轻松搞定,而大多数C/S系统用传统的VB、PB、Delphi也很容易完成。硬件要求低,开发周期短。也就是说,90%的问题都可以用这些简单的技术解决。
可是,asp、VB太easy了,easy的东西自然就不值钱了。于是国际巨头们盯住了那10%,声称必须运用新一代的高级技术,如J2EE、.NET等等,可以轻松解决所有问题。新的价值链得以产生,巨头们又开心了。而程序员们怀着极大的期望投入新一轮的技术竞争。但结果是,为了那10%的复杂问题得以较容易地解决,我们把原先那90%的简单问题变得复杂。这正是笼罩在软件业头上的一道魔咒。
本人原先一直是新技术的狂热爱好者。好似一个新技术的追星族,精疲力尽之后才明白新老技术的共通性。其实做应用系统,你是用asp还是J2EE并不重要,重要的是你对业务的领悟能力和对技术的运用能力。有些业务是该用重型武器的,你得上J2EE;有些业务却是asp这样的小刀来得顺手,不可一概而论。asp用得精纯,也可以做到相当高的稳定和性能,以至于好的扩展性和可维护性;而生手弄出的J2EE,很多时候跑都跑不起来,再大的口号也是白费。
总之用什么技术并不重要,重要的是你熟不熟,精不精。整个IT技术圈子如果不能有这样的共识,就只能活跃着一大群满口新鲜术语的菜鸟,搞出一大堆费钱费力的豆腐渣工程。而国内的IT界也只能在这种烂泥潭中挣扎。
这个说的很在理~ 简单的问题,过于复杂化。
关于安全问题,不能用基于http的digest认证吗?和ws无关。
64 楼
lixigua
2007-04-29
我经历过2个数据仓库项目,可以说都是失败的项目。客户很不成熟,只是要上这么个新玩艺。他们不知道数据仓库是用来干什么的,项目目的就决定了项目的失败的必然性。
很奇怪啊,你们的既然是数据仓库项目,怎么会涉及那么多业务操作? 这个定位也太奇怪了吧?
搞清楚啊,数据仓库项目属于OLAP而不是OLTP,把OLAP,OLTP混合搞?那比我们的项目更奇怪了,我都以为我们的项目已经够奇怪了的。
很奇怪啊,你们的既然是数据仓库项目,怎么会涉及那么多业务操作? 这个定位也太奇怪了吧?
搞清楚啊,数据仓库项目属于OLAP而不是OLTP,把OLAP,OLTP混合搞?那比我们的项目更奇怪了,我都以为我们的项目已经够奇怪了的。
63 楼
lixigua
2007-04-29
在“讨伐 ”Web Services性能的时候,考虑下,用Web Services目的是什么?如果你把一个单表的修改都用Web Services来实现,毫无疑问,你的系统性能将付出重大代价,Web Services设计本来就不是给你这样用的。Web Services的目的是提供“服务”,通常该服务的意义上来说,应该是重量级的服务。具有传输少,计算大(或者说业务复杂),一个小的数据提交上来,后台执行复杂的计算,或者复杂的业务处理,返回处理结果给前端。
我原来公司也做个一个项目,用Java写后台,CS跟J2ee服务器不停的交换表的增删改查的信息,还好这项目后来被取消了。
永远不要低估跨语言的交流的复杂性,这是我6年各种语言开发的经验之谈。
在实际使用Hibernate的例子中,我比较倾向于使用单个的PO,PO的逻辑关系由程序保证。当然这种设计不符合 Hibernate的思想,不过我的目的是解决问题,根据实际经验来看,这样做在项目中更有实际价值。我用Hibernate的目的只是不想写那么多Jdbc操作,我不打算用他来封装我的业务关系。我的业务逻辑体现是在数据库设计上体现。而程序开发的时候,表的关系是遵循模型设计开发,模型设计中会强制要求开发人员必须遵守模型的关系规则。虽然这样,会在代码中有很多不雅的代码(比起在PO表达对象关系来说),但是我觉得更可控。
我原来公司也做个一个项目,用Java写后台,CS跟J2ee服务器不停的交换表的增删改查的信息,还好这项目后来被取消了。
永远不要低估跨语言的交流的复杂性,这是我6年各种语言开发的经验之谈。
在实际使用Hibernate的例子中,我比较倾向于使用单个的PO,PO的逻辑关系由程序保证。当然这种设计不符合 Hibernate的思想,不过我的目的是解决问题,根据实际经验来看,这样做在项目中更有实际价值。我用Hibernate的目的只是不想写那么多Jdbc操作,我不打算用他来封装我的业务关系。我的业务逻辑体现是在数据库设计上体现。而程序开发的时候,表的关系是遵循模型设计开发,模型设计中会强制要求开发人员必须遵守模型的关系规则。虽然这样,会在代码中有很多不雅的代码(比起在PO表达对象关系来说),但是我觉得更可控。
62 楼
ahuaxuan
2007-04-29
sorphi 写道
ahuaxuan 写道
zwchen 写道
Web Services慢是确定的,我们测试过,另外Hibernate用得也不妥,都是eager loading。
不需要用的对象,都应该手动将其引用置空,这个我想大概是你在分布对象是hibernate的使用cglib增强关联对象造成的,这个时候应该就是手动将这个po转化为vo,特别说明,hibernate在分布式环境下会比较难用一些,很多在单jvm上能做的事在分布环境中确实是不能做的。比如说hibernate自己的集合包装类没有序列化id啊,等等,这时候就需要一个比较精通hibernate的人在团队中“不需要用的对象,都应该手动将其引用置空”,这么做的依据或教训是什么?愿闻其详。
使用httpinvoker算是在分布式环境中么?我在这种场景下从来没手动置空过po中不需要的属性,但也还没碰到过什么莫明其妙的问题。
有两个原因,一个是不需的对象都是cglib的增强类,序列化和反序列化需要额外的开销,第二就是如果两端jvm不一样,那么序列化和反序列化是无法进行的,因为增强类是没有指定序列化id的,所以会使用jvm默认的序列化id,两端的jvm不一样会导致序列化后无法进行正常的反序列化
61 楼
laiseeme
2007-04-29
系统架构的问题,技术选型的问题,不熟悉的东西把握不好最好不要用,比如hibernate,用的不好对系统性能影响不是一般的
60 楼
soleegn
2007-04-28
看到这里,暗地庆幸,去年我们的基于SOA的项目搁置了,不然又是烂摊子一堆,不过我们没有过多的牵扯到安全方面,主要还是在异构平台互相通讯的问题上。
WS的性能真的是不敢恭维啊~
WS的性能真的是不敢恭维啊~
59 楼
winterwolf
2007-04-28
zwchen 写道
做项目,我觉得特别可怕的是:总是从技术的角度考虑问题。很多企业业务系统,最核心的、最复杂、最困难理解和分析的往往是业务问题,而不是技术。
同意. 有过类似的经历.
但是问题还是出在软件开发上.
现在的ERP及其他的大型系统总是直上而下的设计和开发 无法顾及下面的具体业务需求.
ws为我们提供了一个机会 我们可以从满足一个小部门的简单业务需求开始 做一个超大规模的系统. 这样软件开发是至下而上的.
就象战争不同的武器就有不同的战术 当我们手中有了新的武器就应该有新的战术来配合 依然采用贴身肉搏火炮也不起作用.
58 楼
zwchen
2007-04-28
winterwolf 写道
可能采用xml开发框架能避免很多麻烦, 楼主的问题我都用cocoon绕开了.
ws唯一特别的地方是它按照标准格式输出xml文档. 调用WS其实很简单 用soap也可以 其实直接post就可以了. 比如rss也可以看做ws的一种.
如果系统是ws结构的 频繁的使用xml传递数据 数据库部分依然采用关系数据库 肯定要付出性能的代价. 而且有些东西保存到关系数据库是很别扭的. 最主要的是将xml映射进关系数据库 xml就死掉了 失去了xml原先的灵活和柔性. 数据被关系数据库套死 整个系统也死了.
如果是内部调用可以不用提供ws接口 但是可以保留ws接口 这样做便于测试和日后对系统进行调整. 比如将他们拆开放到其他服务器上 变集中为分布.
ws唯一特别的地方是它按照标准格式输出xml文档. 调用WS其实很简单 用soap也可以 其实直接post就可以了. 比如rss也可以看做ws的一种.
如果系统是ws结构的 频繁的使用xml传递数据 数据库部分依然采用关系数据库 肯定要付出性能的代价. 而且有些东西保存到关系数据库是很别扭的. 最主要的是将xml映射进关系数据库 xml就死掉了 失去了xml原先的灵活和柔性. 数据被关系数据库套死 整个系统也死了.
如果是内部调用可以不用提供ws接口 但是可以保留ws接口 这样做便于测试和日后对系统进行调整. 比如将他们拆开放到其他服务器上 变集中为分布.
我们的应用是不太可能采用cocoon这类xml框架,并且用xml做持久化:
1、我们项目组没有cocoon的开发经验。
2、xml数据库根本不太可能,我们的数据都涉及到国家基础数据,很多积累了上10年,海量的。
3、我们客户端提交的数据是由BO(著名商务智能软件)进行数据ETL(ETL:Extraction,Transformation,Load),最终从一批数据得到一些统计报表。
做项目,我觉得特别可怕的是:总是从技术的角度考虑问题。很多企业业务系统,最核心的、最复杂、最困难理解和分析的往往是业务问题,而不是技术。
发表评论
-
一个优秀的Java企业应用框架的设计和实现
2013-10-25 17:43 52一个优秀的Java企业应用框架的设计和实现: http:/ ... -
一个Java框架引发的思考:语言、框架、范式转换和软件生产力
2011-09-10 13:26 3721前几天,iteye上的pojo同学,发来了他四年前写的一个框架 ... -
电子商务网站,前后台是否该分离?
2011-08-21 12:44 8061做电子商务网站,一般 ... -
Java源码阅读的真实体会
2011-08-20 19:51 25842刚才在论坛不经意间,看到有关源码阅读的帖子。回想自己前几年,阅 ... -
我理解的互联网应用和企业应用开发
2011-07-12 12:01 3197前段时间,我写过一篇该主题的博客,但写完了,我觉得还是没有谈到 ... -
一个在读学生的疑问及我的回复
2011-06-24 11:39 3118我经常收到类似的站内信,然后花上半个来小时回复(我摆文字真的非 ... -
一位技术人员成长历程
2010-05-26 15:52 126474、坚持了第一个月,再坚持半年,以后的学习速度越来越快,你离 ... -
Java虚拟机技术总结(07年写的,原JavaEye精华帖)
2010-04-17 11:15 8386原文:IBM WebSphere Application Se ... -
IBM WebSphere Application Server 诊断和调优(07年写的,原JavaEye精华帖)
2009-12-19 11:07 8304这是上篇文章的续篇, ... -
JBPM源码浅析
2007-09-13 15:04 16545离职啦,工作交接中, ... -
JBPM阶段性工作总结
2007-09-12 15:20 14480快要离职了,工作交接 ... -
AIX学习总结笔记一
2007-07-03 18:07 8508公司项目用到AIX和Websphe ... -
软件开发的一点感想
2007-06-29 10:53 6114这两天,遇到工作中的两个小问题,加深了我以前对软件开发的看法。 ... -
Java线程安全系列(1)--Servlet线程安全
2007-06-16 23:19 13316刚才search的时候,竟然 ... -
从分布式系统的角度看REST
2007-05-28 20:37 3596原帖:http://www.iteye.com/t ... -
也说说项目成败、企业信息化
2007-05-19 15:25 2624这篇文章是我对nbsp同学 ... -
读HSQLDB的源码想到的
2007-05-17 10:36 9301昨天在论坛看到一篇讨 ... -
Seasar Framework介绍(一)
2007-04-21 00:18 10923近段时间,给公司一项 ... -
Struts的html:options 标签内幕
2007-04-20 18:14 7960最近用一个在日本很流 ... -
HTTP客户端POST方式中文解决方案
2007-01-17 20:26 17576这段时间,在给一个地 ...
相关推荐
项目体会WebServices开发体会和项目教训软件测试去年,在一个大型项目(1500w)中用到WebServices,现在项目进入了尾声,所以对以前的开发经历做一个总结。我想大家一定会问?为什么你们项目中要用到WebServices,因为...
全方位解析 Web Services 开发步骤
在压缩包中的"WebSerivies"文件中,可能包含了示例代码、教程文档或者完整的项目工程,这些都是学习和实践Delphi开发WebServices的重要资源。通过仔细研究这些材料,你可以掌握如何在Delphi环境中高效地创建和使用...
总的来说,《应用Java API开发Web Services》是一本全面覆盖Java Web服务开发的教材,适合有一定Java基础,希望深入理解和实践Web服务开发的开发者。通过阅读本书,你将能够熟练掌握Java API在构建高效、安全的Web...
总之,Web Services开发是一个涉及多种技术和工具的复杂过程,需要理解并掌握XML、SOAP、WSDL、UDDI等相关标准,以及如何使用开发工具如Eclipse和Axis进行服务的创建、部署、测试和维护。在实际项目中,开发者还需要...
本次实验旨在通过使用MyEclipse集成开发环境以及XFire插件来开发一个简单的Web Services示例,以此来掌握Web Services的基本开发流程和技术要点。 #### 实验准备 1. **安装MyEclipse**:确保计算机上已经安装了...
在本开发文档中,我们将深入探讨使用Apache Axis2、Tomcat服务器和Eclipse IDE进行Web Services开发的关键概念和技术。 首先,Apache Axis2是Java平台上流行的Web Services框架,它为构建和部署Web Services提供了...
本资源包“Web服务的开发图片和文档”为初学者提供了一个全面的学习路径,帮助他们理解和掌握Web服务的核心概念、技术和应用场景。 1. **Web服务基础** - Web服务的本质是通过HTTP协议进行通信,使得应用程序可以...
这是一本全面介绍使用JSWDP来开发Web服务的实用参考书。Java Web服务开发人员包(Java Web Services Developer Pack ,JWSDP)是一个工具和库的集合,设计这些工具和库使得用Java开发Web服务尽可能地简单。
Web Services 应用开发 Web 服务是一个基于 internet 的分布式计算的基本构造块,它允许在不同平台上、以不同语言编写的各种程序以基于标准的方式相互通信。Web 服务的定义尚未统一,但它通常是指在 internet 上...
Web Services系列教程四 利用UDDI发布和查询Web Services 基于WSE 3.0 的 Web Services开发(安全的Web Services 开发,Web Services路由,Web Services 附件) 下一代的Web Services 框架-Indigo
Spring Web Services项目专注于基于合同优先的Web Services开发,强调使用WSDL来定义服务契约,然后自动生成服务实现。此外,Spring还提供了对WS-Security和其他高级功能的支持。 除了这些标准和框架,开发Web ...
WebServices是一种基于...总之,"WebServices 天气预报"项目是一个实用的学习工具,它结合了WebServices与WinForm应用开发,可以帮助初学者深入理解这两种技术的结合使用,为今后的跨平台、分布式系统开发奠定基础。
本书的内容涵盖了Web Services的各种关键技术、Web Services的整体体系架构和应用体系架构,以及Web Services应用的设计和开发。本书以Web Services技术系列为主线,逐一详细分析解释包括Web Services的各种核心技术...
在描述中提到的"杨永智MCT/MVP微软校园大使Web Services 开发",这表明杨永智是一个在微软技术领域有影响力的专家,他可能在Web Services开发方面有深入的见解和实践经验,MCT(微软认证讲师)和MVP(微软最有价值...
RESTful Web服务开发的最佳实践和指导:本书不仅介绍了理论,还提供了大量的实践技巧和开发指导,这些内容对想要将理论应用于实际开发中的Web开发人员、Web架构师以及对Web开发或架构感兴趣的广大学生和技术人员来说...
本教程将通过IntelliJ IDEA(简称IDEA)这个强大的Java集成开发环境,详细介绍如何创建和使用Web服务,以及如何创建对应的客户端项目。 首先,我们需要了解IDEA中的Web服务支持。IDEA提供了一个名为"Web Services...
在整个过程中,注意理解和运用JSR181注解,以及正确配置service.xml文件,这些都是成功开发Web Services的关键。同时,对WSDL的理解也很重要,它是服务消费者与服务提供者之间的契约,定义了服务的全部细节。