基于SCA的SOA架构研究与实现(硕士论文)

scwsl

贡献于2014-04-24

字数:0 关键词: WEB服务/RPC/SOA

中山大学 硕士学位论文 基于SCA的SOA架构研究与实现 姓名:廖煜嵘 申请学位级别:硕士 专业:软件工程 指导教师:汤庸 20090606论文题目:专业:硕(博)士生:指导教师:基于SCA的SOA架构研究与实现软件工程廖煜蝾汤庸摘要随着企业的不断发展,应用系统不断增多,并且变得越来越复杂,其中更存在着大量的异构系统,这些系统有的用不同语言编写,有的运行在不同的系统平台上。因此,对遗留系统的整合集成是企业面临的一大难题,尤其是如何既保护原有的投资,又能很好地解决不同系统间的整合问题,最大限度提高企业资源利用率,已成为急待解决的问题。在这种背景下,面向服务的体系架构(SOA)应运而生。SOA是一种全新的系统开发体系架构,使用SOA架构的系统是松耦合、高度灵活的,能很好地实现异构系统间的无缝结合。在SoA体系结构中,目前在实现方面最重要的有服务组件体系结构(SCA)编程模型。SCA是一个规范,它描述用于使用SOA构建应用程序和系统的编程模型,其松耦合的特性使得构建SOA系统变得灵活,高效。本文的研究工作主要围绕以下方面进行:首先对SOA架构的理论体系进行了分析研究,其次,重点分析了SCA编程模型的技术规范,提出了构建基于SCA的SOA架构的方法,最后结合SOA架构的理论以及SCA、Spring等相关技术,以实际系统为例,论述了如何构建基于SCA的SOA应用系统。关键词:面向服务体系架构、服务、SCA编程模型m前tle:Major:Name-Supervisor:ResearchandImplementationoftheServiceOrientedArchitectureBasedOilSCASoftwareEngineeringLiaoYuRongTangYongABSTRACTTheenterpriseapplicationsystemisincreasinggraduallyandgettingmoreandmorecomplexwiththedevelopmentoftheenterprise.Therearelotsofheterogeneoussystems,someofthemareprogrammedwithdifferentlanguages.somearerunningondifferentsystemplatforms.Henceaggregationandintegrationoflegacysystemisabigproblemtotheenterprise,especiallythathowtobothprotectoriginalinvestmentandsolvetheaggregationproblemsamongdifferentsystemsandmakegoodUseoftheenterpriseresourcebecomesanurgentproblem。Underthisbackground。Service-OrientedArchitecture(SOA)comeswiththetideoffashion.SOAisakindofenterprisearchitecture,ThesystemdevelopedbySOAisloose-coupledandhighly—flexible,whichcanseamlesslycombineheterogeneoussystems.Cu邝enflythemostimportantaspectsinimplementationisServiceComponentArchitecture(SCA)inthearchitectureofSOA.SCAisaspecificationwhichusedtodescribemakinguseofSOAtoconstructapplicationandsystemmodel,whoseloose-coupledfeaturemakesSOAsystemmoreflexibleandeffective.Thethesiswillmainlycoverthefollowingcontents:firstlyitwillanalyzetheSOAarchitecturetheorysystem,secondlyfocusontheanalysisoftheSCAspecifications,thenproposethetheoryaboutconstructSOAsystembasedonSCA.Intheend,combiningwiththeSOAtheoryandSCA、Spnngtechnology,wemakeadiscussionofapracticalsystemonhowtomakeenterpnseapplicationsystembasedonSOA.Keywords:SOA,SCA,Service烈学位论文原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。学位论文作者签名:拗日期:2咿q年b月b日I学位论文使用授权声明本人完全了解中山大学有关保留、使用学位论文的规定,即:学校有权保留学位论文并向国家主管部门或其指定机构送交论文的电子版和纸质版,有权将学位论文用于非赢利目的的少量复制并允许论文进入学校图书馆、院系资料室被查阅,有权将学位论文的内容编入有关数据库进行检索,可以采用复印、缩印或其他方法保存学位论文。学位论文作者签名:獬导师签名:/飞名~日期:10口气年b月■日Ⅱ中山大学硕士学位论文1.1论文的研究背景第1章绪论计算机软件发展到今天,经历了不同的发展阶段,已经变的越来越复杂。软件的本质在于其复杂性,因此人们不断尝试使用各种方法,去降低软件的复杂性,提高软件的可重用性,以适应不断发展的业务需求。其中,对软件体系结构方面的改良,一直是业界着重研究的课题。回顾过去,软件体系结构以及软件设计方法经历了如下不同的发展阶段。早期,由于受到计算机软硬件条件的限制,大部分软件应用系统,都是运行在单机应用环境中。在该结构下,客户、数据和程序被集中在一台机器上。可见,这样的计算环境无法承担复杂高性能的计算工作,随着计算机的不断发展,该体系架构已经逐渐被淘汰。为解决单机计算环境的缺陷,人们提出了客户/服务器架构。在该体系架构中,形成了客户端和服务端两层结构。其中,应用程序的业务计算逻辑以及数据库都位于PC服务端。用户从客户端发出请求,请求到达服务端后经过业务逻辑计算并将结果返回客户端。客户/服务的体系架构对于小型应用来说,有着不少优点,但对于中大型应用来说,依然在性能上不能满足需求。随着Internet的发展,企业应用系统需要更灵活和高性能的计算环境,新的软件体系架构便应运而生:三层/多层分布式计算环境。三层体系结构分为:客户层、业务逻辑层,数据层。其中,客户层主要的任务是向业务逻辑服务层发出请求,典型的客户层如浏览器。业务逻辑层的功能主要是接收来自客户层的请求,并且进行业务逻辑计算,向数据库服务器提交数据处理请求,并处理数据层返回的数据。数据层则主要有数据库服务器充当,在数据层中主要实现对数据进行相关的处理,并把运行结果返回给业务逻辑服务层。三层/多层的分布式体系结构,其主要优点在于把业务逻辑层单独分离出中山大学硕士学位论文来,大大减轻了客户端和服务端的负担,多层结构之间互相独立,任何一层的改变都不会影响其他各层的功能,具有很高的可伸缩性。与此同时,软件设计方法论的发展也经历了三个不同阶段。首先是面向过程的分析技术,主要强调的是模块化的设计。而20世纪90年代普遍流行的面向对象的分析技术,主要强调的是问题域中客观存在的各项事物建立相应的对象,它的属性和方法分别描述事物的静态特征与动态行为,对象间的交互是通过对其方法的调用进行的【ll。同时,人们也提出了面向构件的软件开发,其根本目的在于快速通过一系列可重用的构件去搭建软件,提高软件的可重用性,降低软件的复杂性。近年来,随着Internet的高速发展,企业应用系统变得复杂和庞大。其主要体现在:1.企业的分布式计算环境变的越来越复杂,一个企业内部,往往存在不同的操作系统平台,运行着大量历史遗留信息系统,这些历史遗留信息系统,有用不同语言编写的,有按照不同的业务规则运行的,相互之间的互联互通存在不少问题。同时,企业及合作伙伴之间的企业应用系统,同样存在着互联互通的问题,这使得各个信息系统之间不能有效地实现信息及资源的共享,形成了“信息孤岛",从而导致企业运营的成本增加,效率降低。2.业务需求规则的不断改变。在商业竞争日益激烈的环境下,企业的应用系统必须做到随需而变。这要求一个优秀的企业应用系统,必须能满足不断变化的商业需求,对于业务需求规则的改变,能作出最准确最迅速的响应。然而,传统的软件体系结构及开发方法在某些方面显得不能满足上述需求。一方面,目前大部分企业应用系统,其设计都是处于封闭或半封闭的状态,信息系统其中的很多部分,都是紧耦合的,并且都是把业务逻辑规则与代码混杂在一起,这将导致当业务逻辑规则更改时,不得不大幅地去修改相应的代码,一方面增加了系统的复杂性,另一方面使得代码难以重用,增加维护成本。而传统的面向对象的设计方法,需要依赖具体的编程语言,而且封装粒度小,耦合度高,暂时不能完全达到完整的可重用性和互操作性要求,因此,迫切需要一种新的软件体系架构及相应的设计方法的出现。在这样的大环境下,SOA(Service-OrientedArchitecture,面向服务的2中山大学硕士学位论文体系结构)便应运而生,由于其高度的开放性,可伸缩性,可扩展性,可复用性而发展迅速。SOA的重要意义在于,它是业务驱动的,是以业务为核心的软件体系架构,这将改变以往的“以技术为驱动"的体系架构。“以技术为驱动"的软件体系架构,往往分析考虑的是细粒度的实体,容易造成开放性差,耦合度高等问题。而以业务驱动为核心的体系架构,则更注重将技术和业务更紧密结合起来,使得软件体系结构最大限度去适应业务需求的变化。SOA架构以粗粒度的业务服务为基础对业务建模,会产生更加简洁的业务和系统视图;以服务为基础来实现的IT系统更灵活、更易于重用、更好地应对变化;以服务为基础,通过显式地定义、描述、实现和管理业务层次的粗粒度服务(包括业务流程),提供了业务模型和相关IT实现之间更好的”可追溯性’,减小了它们之间的差距,使得业务的变化更容易传递到IT系统【2l。SOA是一种松耦合的软件体系架构,同时也包括利用面向服务体系结构思想的一系列方法论,包括建模、设计、编程和管理。SOA以其与平台,协议无关性,以编程语言无关性,拥有松耦合的优势,使得在构建企业应用系统时,能充分做到以IT业务服务需求为主导,将业务放在第一位,技术能充分响应业务需求并拥有快速应变的能力,真正体现技术的服务价值。1.2国内外研究现状在国外,SOA的概念最早是在1996年,由著名的国际IT咨询机构GartnerGroup首先提出。在2002年,Gartner再次提出了SOA是“现代应用开发领域最重要的课题”。其中,IBM、BEA,Oracle,SAP等国际知名软件厂商,在SOA相关标准规范的制定工作中走在前沿,它们纷纷联合制定了许多标准规范以及推出了一系列基于SOA的商业产品及解决方案。如IBM最早推出了覆盖整个SOA生命周期的工具及解决方案,典型的商业产品有WebsphereESB,WebsphereProcessServer等;Oracle公司的系列产品如OracleJdeveloper,OracleApplicationServer也对SOA提出了强大的全面支持。微软公司在新发布的.Net3.5平台基础上,明确提出了针对SoA的WCF(WindowsCommunicationFoundation)框架。3中山大学硕士学位论文与此同时,国际上的不少标准化组织或同盟,也一直致力于对SOA进行相关标准或技术规范的制定工作。除了著名的W3C组织制定了一系列与Web服务相关的标准外,如结构化信息标准促进组织(OrganizationfortheAdvancementofStructuredInformationStandards,OASIS),致力于电子商务相关标准的制定和推广,也是目前制定Web服务标准最多的一个组织,其理事会成员几乎全部来自微软、I酬、BEA、Oracle、Sun、SAP等业界大公司,OASIS制定了一系列关于Web服务的安全标准。而开放SOA合作组织(OpenSOAC011aboration,OSOA),则是一个非正式的厂商联盟,目的是使得各厂商能够共同开发一个语言中立的编程模型,目前已经得到象IBM,BEA,ORACLE,SAP等20家业界知名厂商的加盟,也在为SOA相关的技术规范实现作出贡献。国内对SOA研究方面是近两年才发展起来。国内的一些知名厂商,如金碟、用友、东方通、晋元等,纷纷推出了基于SOA的中间件产品及解决方案,其中晋元更加入了国际OSOA组织,成为制定SOA编程模型SCA委员会中的一员。同时,中国电子技术标准化研究所(CESI)互联网标准开放实验室(ISOL)于2007年3月开始SOA标准研究,发布了《SoA标准体系V1.0》。同时,ISOL与15家合作单位结合中国在金融、电信、烟草、医疗卫生、公共服务等各行业的案例剖析,编撰了《SoA用户指南》[31。随着应用集成技术在国内的逐步推广,国内的许多企业都逐步开始关注并投入人力物力到基于SOA架构的应用集成中来,在未来的二到三年,基于SOA架构的应用集成技术将成为系统建设和企业信息化建设的方向【4l。但总的来说,国内目前对SoA的研究工作还处在理论探索研究阶段,SOA的具体应用也仅限在一些如银行,电信等的大型企业应用,中小企业在应用SoA方面还处于起步状态,而对于SC)A编程模型SCA的研究更处在起步阶段。1.3本文研究内容与论文组织结构4中山大学硕士学位论文1.3.1本文研究内容本文主要的研究工作是,在对面向服务的体系结构进行深入分析研究的基础上,研究了目前SOA中编程规范模型SCA的技术规范,提出了如何对使用SOA架构的企业信息系统进行合理分层的方法,并针对目前中小企业的实际情况,提出如何结合已存在的框架和技术构建基于SCA的SOA应用系统。1.3.2论文组织结构全文分为七章。第一章绪论,介绍本文的研究背景及内容,国内外相关研究状况,研究意义和文章组织结构。第二章面向服务的体系结构概述,介绍SOA的相关概念,基础技术概况及设计原则。第三章SOA程序设计模型SCA,本章介绍了实施SOA中最重要的编程模型SCA的相关概念以及具体的技术规范。第四章基于SCA的轻量级SOA架构设计。本章详细论述了如何使用SCA编程模型,构建松散耦合的SOA系统。提出了如何针对基于SOA的应用系统进行合理分层,如何使用SCA编程模型充当服务层的方法。第五章基于SOA的企业应用系统设计方法。本章中,对SOA的需求分析、设计、技术选型、监管等各方面进行详细论述,并提出一套适合中小企业进行SOA架构建设与实现的方法步骤。第六章案例分析。本章以实际项目为背景,详细介绍了如何运用ApacheTuscanySCA,结合原有项目的框架技术构建SOA应用系统。第七章总结与展望。对全文作出了总结,并提出了进一步的设想和展望。5中山大学硕士学位论文第2章面向服务的体系结构概述2.1SOA概述2.1.1SOA的概念面向服务的体系结构(Service-OrientedArchitecture,SoA)的概念,最早是由著名的国际IT咨询机构GartnerGroup首先提出,最初的定义为:客户端朋艮务器的软件设计方法,一项应用由软件服务和软件服务使用者组成,其中的应用包括软件服务和软件服务消费者(也称客户端或服务请求者)。SOA与客户端/服务器模型的不同之处,在于它着重强调软件组件的松散耦合,并使用独立的标准接口151。由于当时的技术条件限制,一直没受到关注。直到20世纪90年代后期,随着WebServices技术的快速发展,SOA的概念得到了进一步的演化和提升,并逐渐为业界所接受。目前,对SOA的概念,业界有不同的定义描述,其中IBM对其定义为:SOA是一种IT体系结构风格,支持将业务转换为一组相互链接的服务或可重复业务任务,可在需要时通过网络访问这些服务和任务。SOA体系结构允许进行可重用的构建,允许以更加松散耦合的方式工作。SOA是真正支持使用可重用的组件或服务装配业务流程的体系结构,这些组件或服务独立于应用程序和它们运行的平台16]。Service-architecture.con]将SOA定义为:“本质上是服务的集合。服务间彼此通信,这种通信可能是简单的数据传送,也可能是两个或更多的服务协调进行某些活动。服务间需要某些方法进行连接。所谓服务就是精确定义、封装完善、独立于其他服务所处环境和状态的函数。"17]学术界认为嗍:“SOA是设计和构建松散耦合软件的解决方案,能够以程序化的,可访问软件服务的形式公开业务功能,以使其他应用程序可以通过己发6中山大学硕士学位论文布和可发现的接口来使用这些服务。一综合来说,业界目前对SOA的定义,主要分为两种,一种认为SOA是一种软件体系架构风格,另一种认为SOA不仅是体系架构,而且还包含了以面向服务为原则,覆盖完整的软件工程生命周期:建模一设计一编码一整合一部署一治理等一系列方法论的完整体系理论。本文中,将SOA定义为:SOA首先是一种基于分布式体系的软件体系架构,在该架构中,运用面向服务的设计思想,将应用系统按照业务需求划分为不同的服务组件,不同的服务组件之间通过定义良好的接口和契约联系起来,接口采用中立的方式定义,服务之间的交互不依赖于特定的硬件平台,操作系统和编程语言及通讯协议,服务之间必须满足松耦合,可重用等特性。其次,SOA从广义的概念来说,还应该包括以面向服务的指导思想为原则,覆盖了完整的软件工程生命周期:建模一设计一编码一整合一部署一治理等一系列方法论的完整体系理论。面向服务的体系结构是一种应用程序架构的概念,将应用程序及资源以重复使用的服务方式呈现,使用标准化的服务相互沟通,借此提供更高弹性、更高效率及资讯整合的IT环境【虮。SOA设计的首要目标是为了让IT技术更好地与业务紧密结合,更好为业务服务,支持业务的快速变化,可以认为,SoA是为了敏捷业务两生。当今的企业应用系统面临的一大难题就是IT架构复杂,难以适应业务快速变化的需求。造成其主要原因是传统企业应用系统,注重的只是技术的实现手段,对现实世界的抽象与业务需求有很大距离。IT人员往往要花费大量的精力从事业务需求的调研但却经常不能取得好的效果,而从事业务的人员也不可能去面对各类IT技术。因此当业务发生变化时,业务的变化不能很好被体现到IT系统中。可见,SOA并不是一项具体的技术,也不是具体的技术规范标准,也不涉及具体的实施方式,而是一种新的软件体系架构体系以及一系列方法论和架构思想。从历史演变的角度来看,早期通用对象请求代理体系结构(CommonObjectRequestBrokerArchitecture,CORBA)其基本概念与SOA有所相似,而CORBA虽然表面上是厂商独立的,但是在实施中还是和厂商有关,而且其复杂性导致其发展缓慢。随着XMLWebServices的发展,由于XML是中立的数据交换标7中山大学硕士学位论文准,因此业务服务的描述和相互沟通变得容易,从而导致SOA更能满足业务系统的需要。2.1.2SOA的特征SOA是一种服务架构,其服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型,其主要特征如下。1.松散耦合SOA架构最重要的特征是松散耦合。松散耦合的最大优点在于服务提供者和服务使用者间通过定义良好的服务接口和服务实现而达到分离。服务的使用方无需要知道服务提供方内部实现相关情况,只需要调用服务提供者的相关接口。而服务实现者如果需要修改内部实现,则不会影响服务调用者的正常调用。SOA松散耦合特性的另一表现在于,当需要对已有的应用系统进行扩展时,新增加的组件部分,只需要符合SOA编程模型的规范,则可以做到与原有的系统无缝连接,而不需要理会原来系统的操作平台,编程语言和通信协议。2.粗粒度服务服务粒度指的是服务所能操作的范围,一般分为细粒度和粗粒度的服务。在SOA架构造中,细粒度服务是指那些实现功能相对简单,提供少量业务流程可用性的服务。粗粒度服务是那些能够在业务流程方面,可以提供业务级重用的服务。SOA的一个重要特征,是提倡在基于业务上多采用粗粒度的服务,因为粗粒度的服务的抽象程度更高,是针对业务的,细粒度的服务往往关注的是具体的组件和实现方法。SOA通过使用粗粒度服务,可以更好地把应用系统中的细粒度服务组件进行封装,并与其他应用系统服务进行交互。3.标准化的接口SOA通过中立的接口语言来对服务进行描述,使得服务可以跨平台,跨语言,跨协议被调用。目前,在实现SOA的具体技术上,XMLWebServices由于凭借其标准化和可扩展性,已经成为实现SOA架构的首选技术实现。4.服务具有可组合性企业应用系统是由不同功能的模块所组成,往往必须对不同的服务进行功8中山大学硕士学位论文能组合,以构建复用度更高的流程服务。在SOA架构中,不同应用对外提供的服务,应该具备可组合性。目前,可以使用业务流程执行语言BPEL。BPEL是业界认可的标准,也是SOA实现组合服务和服务编排的重要技术。2.2SOA基础技术概况目前,在实现SOA的具体技术规范上,主要分为两类,一类是实现SOA所需要的基础技术体系,包括了如WebServices,另一类是各类相关的编程模型,及技术,如SCA,BPEL等,本节主要介绍实现SOA的一系列基础技术。2.2.1WebServices体系结构根据IBM关于Web服务的定义,WebServices是一种接口,它描述了一组操作,可以使用标准的XML消息传递技术,经由网络访问这些操作。WebServices可完成指定的任务或任务组。WebServices采用标准的、形式化的XML概念进行描述,称之为服务描述。服务描述提供了与该服务进行交互所必须的所有细节,包括消息格式、传输协议和位置【∞1。WebServices有如下特性:1.良好的互操作性WebServices独立于实现的技术,可以在不同平台和语言环境中运行。所有的消息交换通过HTTP/SoAP协议交换,由于HTTP协议能够很容易的跨越系统的防火墙,因此具有良好的互操作性。2.松散耦合由于WebServices封装了业务组件的逻辑功能,当服务端业务逻辑改变后,只要不改变WebServices的接口,客户端并不需要修改代码。3.标准协议的规范性作为WebServices,其所有公共的协约完全需要使用开放的标准协议进行描述、传输和交换。WebServices的体系结构由服务的请求者,服务的提供者,服务注册中心三者组成,并且它们之间存在发布、查找和绑定三类操作。这三个角色的协作体9中山大学硕士学位论文系如图2-1。服务请求(SOAP绑定)图2-1Web服务体系结构服务请求者:服务请求者在需要请求服务时,它发起对注册中心的服务查询,得到相关服务的信息,然后通过传输绑定服务,并且执行服务功能。服务提供者:服务一般有定义良好的接口(对内的和对外的),并且接口的定义是平台和语言中立的,接口的描述信息被发布到服务目录(或称为服务注册表)中,这样就可以被动态发现和调用。服务注册中心:服务注册中心提供了服务目录的功能,是沟通服务请求者和服务提供者的桥梁。它包含一个可用服务的存储库,并允许感兴趣的服务使用者查找服务提供者接口。在这三者上定义了相互的三种操作:●发布为了使服务可访问,需要发布服务描述以使服务请求者可以查找它。●查找查找操作中,服务请求者直接检索服务描述或在服务注册中心中查询所要求的服务类型。10中山大学硕士学位论文●绑定在绑定操作中,服务请求方通过分析从注册服务器中得到的服务绑定信息,包括服务的访问路径、服务调用的参数、返回结果、传输协议、安全要求等,对自己的系统进行相应配置,进而远程调用服务提供者所提供的服务。2.2.2XML概述XML(ExtensibleMarkupLanguage)[hi源自标准通用标记语言(StandardGeneralizedMarkupLanguage,SGML),但由于SGML过于复杂,只能应用在学术界,因此没得到大规模的应用。为了克服SGML的种种缺点,1996年W3C组织对SGML进行了精简,形成了XML。XML本身是一套定义语义标记的规则,即“定义语言的语言"。目前,XML已经成为数据交换的事实标准。XML的出现,克服了传统HTML语言的缺点,由于HTML是面向呈现的标记语言,语言结构固定,难以扩展,而且HTML本身缺乏必要的语义信息,因此不利于数据的交换。XML是一种简单、与平台无关并被广泛采用的标准。XML相对于HTML的优点是它将用户界面与结构化数据分隔开来。这种数据与显示的分离使得集成来自不同源的数据成为可能。由于XML的语言/平台无关性,优良的结构化特点,极强的扩展能力,是数据信息表示的最佳语言【12】。2.2.3SOAP概述SOAP(SimpleOhjetAccessProtoc01)1131是一种轻量级的基于XML的简单通信协议,它定义了一种通过网络传送X札消息的格式。该消息由一个SOAP信封(envelope)元素和被信封元素包围的一个可选择的SOAP头元素和一个必须的SOAP体元素组成。SOAP是为了解决互联网中的互操作性问题而出现的。其中,HTTP用于SOAP的消息传输,而XML是SOAP的编码模式。SOAP各个组件协作的组成可以参阅图2-2。中■^学Ⅲ十学位论文图22SOAP消息格式图SOAP在请求者和提供者对象之间定义了一个通信协议。这样,在面向对象的环境中,请求者对象执行一个对提供者对象的远程方法调用。SOAP的优点在于它与厂商无关,可独立于平台、操作系统、目标模型和编程语言而实现。另外,传输和语言绑定以及数据编码参数选择都是由具体实现决定的。SOAP为在一个松散的、分布的环境中使用)【ML对等地交换结构化的和类型他的信息提供了一个轻量级的机制。SOAP规范由四个部分组成11”。●SOAP封装封装定义了一个描述消息中的内容是什么.是谁发送的,谁应当接受并处理它以及如何处理它们的框架。●SOAP编码规则定义了用以交换应用程序的数据类型实例的一系列机制。●SOAPRPC表示定义了一个用来表示远程过程调用和应答的协定。中山大学硕士学位论文●SOAP绑定定义了一个使用底层传输协议来完成在结点间交换SOAP信封的约定。2.2.4WSDL概述WSDL的全称是WebServicesDescriptionLanguage[15J,是基于XML描述Web服务的标准语言,其主要目的在于WebServices的提供者将自己服务的所有相关内容,如服务的传输方式、服务的方法接口、接口参数、服务路径等,生成相应的文档,发送给使用者。使用者通过这个WSDL文档,创建相应的请求消息给服务提供者,而服务在完成以后,服务请求者会根据WSDL文档把返回的服务结果消息解析成自己能理解的内容。WSDL1.1于2001年3月15日获得W3C的认可,正式成为标准。WSDL文档的组成分为如下几个部分:(1)Type:类型定义。定义了WebServices使用的所有数据类型集合,可被Message部件引用。(2)Message-消息定义。定义了WebServices所有的请求消息、响应消息。(3)PortType:该部分描述了Web服务的接口定义,可以看作类似JAvA语言的抽象接口。(4)Binding:包含了如何将抽象接口的元素转变为具体表示的细节,具体表示也就是指特定的数据格式和协议的结合:特定端口类型的具体协议和数据式规范的绑定。(5)Port:定义为协议/数据格式绑定与具体Web访问地址组合的单个服务访问点。(6)Service:这是一个命名的元素,代表端口的集合和相关服务访问点的集合。2.2.5ESB企业服务总线概述ESB(EnterpriseServiceBus,企业服务总线)是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。它支持SOA中的服务交互并对其进行管理。使服务交互13中山大学硕士学位论文在服务提供者和服务请求者之间进行,并可以使用各种中间件技术和编程模型加以实现,使服务交互参与方不直接交互而是通过总线进行交互。它为SOA提供与企业需要保持一致的基础架构,提供虚拟化和管理功能来实现和扩展SOA的核心定义。ESB作为SOA的切入点,使企业以最小投入将已有系统纳入到SOA架构中来【16l。ESB的概念类似公司前台人员的作用。试想如果没有前台工作人员,人们用打电话的方式,要在一个庞大的公司寻人并不容易,要需要记住很多人的电话号码。而如果在需要找人时,首先通过致电前台工作人员,经过前台工作人员代为传达则可以容易地找到人。在这种方式下,无需要关心前台人员是通过什么方式去找人的,只需要对前台发出找人的请求。ESB主要的具体功能有:1.消息中介功能主要实现数据在不同信息系统之间的传送和协议转换。由于不周信息系统之间存在不同协议,因此就需要ESB充当“协议转换’’的角色,ESB将负责处理不同的协议和不同的消息格式,它将一种消息格式转换为另一种消息格式,如可以实现将JavaP3iI转换为HTTP/SoAP,从而正确无误的完成各个系统之间的数据交换。服务的请求者只需要和ESB打交道,因为ESB将真正的服务提供者的地址和传输协议等都隐藏了。2.消息路由功能在一个大型的企业应用系统中,由于存在不同的应用,服务请求者在将消息发送到服务接收者的过程中,消息的传递必然会经过复杂的传递路径。因此,ESB在这里充当了路由的角色,负责可靠地将源消息发送到目的地,在整个通信过程中,提供者和使用者都不会意识到彼此的存在,只有ESB知道将请求和响应消息路由到何处,同时,ESB提供位置透明性的服务路由和定位服务、多种消息传递形式(请求/响应,单路请求,发布/订阅等等)、支持广泛使用的传输协议。可以说,ESB是在服务调用方与服务提供方之间的一个中介,它屏蔽了请求方与响应方在协议,消息方面的差异性,并为服务提供了消息路由,协议消息转换、安全监控制及日志服务等管理功能。2.3SOA与WebServices关系14中山大学硕士学位论文目前,有不少人错误地认为,SOA其实就是WebServices技术。这其实是一种错误的观点。首先,SOA不是WebServices,WebServices只是目前最适合实现SOA的技术之一。SOA和Web服务是两个不同层面的问题,前者是一种架构模式,其中也涉及到相关的方法论,而后者则是只是实现该架构模式的一种具体技术手段。目前用Web服务来实现SOA有一定的优势,比如Web服务所采用的SOAP/)(ML可以做到以真正与平台无关的方式来描述任何数据,这是以前的任何一种技术如CORBA,EJl3或DcoM都不能做到的。用Web服务实现SOA以可以实现一个中立的平台,来获得服务,而且随着越来越多的软件商支持Web服务规范,会取得更好的通用性。本文要特别指出的是,只要符合SOA的架构原则的应用,则可以被认为是实践了SOA架构,并不一定要非使用Web服务不可,比如在本文中谈到的SOA编程模型SCA,提供了一种构建松耦合应用的编程规范,其中可以不涉及使用Web服务,但构建出来的应用依然是符合SoA架构原则的应用系统。所以,从本质上来说,SOA是一种架构模式,而Web服务是实现其SoA的一组技术规范和手段,Web服务只是目前实现SOA中较为优秀的方式,但随着SOA的不断深入发展,必定为有更多的实现SoA的技术标准规范出现。2.4SOA设计原则要成功地在一个企业应用系统中应用实践SOA的架构思想,必须要良好的SOA设计原则及方法作为指导,目前业界对SOA设计方面一般有如下认识。·业务驱动服务,服务驱动技术,业务和IT对齐。从本质上说,在抽象层次上,服务位于业务和技术中间。面向服务的架构设计师一方面必须理解在业务需求和可以提供的服务之间的动态关系:另一方面,同样要理解服务与提供这些服务的底层技术之间的关系07]。在设计SOA应用系统时,必须首先将业务放在考虑的第一位,所有的IT设计应该围绕业务的敏捷变化进行,能适应业务的发展变化。这将要求充分重视业务流程中服务的概念,将服务看作沟通业务和IT间的桥梁,所有的设计应该围绕着如何设计服务进行,面不是象传中山大学硕士学位论文统设计中的按功能模块进行。理想的SOA设计应该是业务模型能跟具体的技术实现无关,设计者只需要关心业务模型的核心逻辑,而不需要关注其具体技术实现。·服务的设计应该遵循一定的原则,如服务间的保持松耦合,基于开放的标准,服务的接口描述与具体实现无关。在设计中,尽可能进行粗粒度建模。通过一组有效设计和组合的粗粒度服务,业务专家能够有效地组合出新的业务流程和应用程序。一个典型的SOA架构必须符合以下基本要求。1.SOA在相对较粗的粒度上对应用服务或业务模块进行封装与重用。2.服务间保持松散祸合,基于开放的标准,服务的接口描述与具体实现无关。3.拥有灵活的架构。服务的实现细节,服务的位置乃至服务请求的底层协议都应该透明。2.5本章小结在本章中,主要介绍了SOA的相关概念,特征以及体系结构,同时论述了SOA体系结构中重要的基础技术,如)(MLWebServices,SOAP,WSDL,ESB。最后阐述了SOA与WebServices的关系以及指出了SOA设计中要注意的原则。16中山大学硕士学位论文第3章SOA程序设计模型SOA3.1SCA的起源SOA概念提出后,人们不断在思考一个问题,那就是如何在SOA的体系结构中,寻找一种良好的程序设计模型去实践SOA,让SOA这一架构思想尽快“落地’’。在传统的组件架构中,组件之间的互相调用存在不少问题,比如受到平台的制约,如.NET平台和J2EE平台架构下的组件,它们都有基于自身平台的规范,在互相调用时,都必须知道对方组件使用的是协议和消息的格式。也就是说,在企业应用的集成过程中,调用方必须知道被调用方的很多技术细节。因此,在构建基于SOA的应用时,人们希望能达到这样的一个效果:能否象我们小时候玩搭积木那样,可以对已存在的各类不同的组件应用进行自由的组合,这样可以让人们尽可能去专注于业务逻辑组件的构建,而减少对底层平台协议等技术细节的依赖,从而能够很轻易地把由不同语言及不同平台上实现的组件组合起来,达到松散耦合的效果。在这种情况下,IBM首先提出了SCA相关的概念。SCA是一组规范,描述了SOA体系结构构建应用系统的模型。SCA构建于Web服务系列标准等开放标准之上,而又扩展了以前用于实现服务的方法。SCA强调将服务实现和服务组装,即服务的实现细节和服务的调用访问分离出来,SCA组件在业务的级别进行操作Il。1。SCA的出现,将传统组件编程从业务逻辑中分离出来,从而使人们可以集中精力编写业务逻辑,而不必将大量时间花费在更为底层的技术实现上。SCA把传统的面向对象的组件编程,上升到了实现业务服务的组件编程模型,这些组件可以使用不同编程语言实现,如JAvA,C抖,PHP,也可以是Javascript,Ruby等脚本语言,甚至可以是BPEL或XSLT等相关技术。SCA还充分利用了IOC(InversionofControl,控制反转依赖注入的思想),把业务组件的接口定义和实现,部署及调用彻底分离开来,采用了XML配置文件的形式,可以很方便17中山大学硕士学位论文地实现组件之间的灵活组装配置,彻底实现松耦合的目标。SCA最早的应用是在IBM的产品WebsphereProcessServer中,在得到初步试验成功后,2005年11月,IBM、BEA,Oracle、SAP、Sybase一起宣布开始联合制定SCA规范,并成立了开放SOA合作组织(OpenSOACollaboration,0SoA),目的是使各厂商能够共同发展SCA,并推出了0.9的版本。到2007年,oSoA已发展成包括IBM,BEA,Oracle,SAP,Sybase以及国内中间件厂商普元软件等20多间著名厂商组成的联盟。在2007年3月21日,osoA正式发布了SCA相关系列技术规范标准1.0,并提交给结构化信息标准促进组织(OrganizationfortheAdvancementofStructuredInformationStandards,OASIS)进行审批。与此同时,各大厂商也推出了实现SCA的相关产品,如IBM的WebsphereProcessServer,Oracle的Tibco,还有开源组织的Apache的Tuscany等。3.2SCA简介在本节中,将介绍SCA规范中的主要组成部分n91。1.组件(Component)组件是SCA中最基本的元素和结构组成单元,是业务功能的基本元素,组件是服务的提供者,也可能是服务的消费者。组件的结构如图3一l所示。sor'vJcolImplementation—Java—BPEL—Composite;referencesSCAComponerI'l:Diagram图3—1SCA组件模型图18中山大学硕士学位论文一个SCA组件有四个主要组成部分。·服务(Services)在一个组件中,可以对外暴露服务,以供其他组件引用。一个组件可以对外提供多个服务功能。服务实际上是一个接口,目前SCA规范规定了两种形式,即基于Java的接口,以及基于WSDL的PortType接口。·属性(Property)在一个组件中,可以设置该组件的属性。一个组件中可以有多个属性,既有简单属性,也可以有复杂属性。组件的属性用于配置其实现的属性,进而影响实现的行为。·引用(Reference)在一个组件中,可以通过引用而获得其他组件提供的服务。一个组件可以引用多个服务。引用的典型例子如下。</compolnent>在该例子中,通过reference标记,指出了所引用的服务的名称是IBook,而IBook的具体实现由组件BookComponent提供。◆实现(Implementation)由于SCA是基于服务接口的编程,因此对于一个组件来说,必须有具体的实现。目前SCA规范允许从广泛的实现类型中选择任何一种技术,比如Java、BPEL或C++。每种类型都代表了特定的实现技术,该技术不仅仅简单定义实现语言,如Java、C++以及各类象PHP,Groovy,Ruby等的脚本语言,而且也可以定义使用某个特定的框架或运行时环境,例如包括Spring、EJB,BPEL等。因此,只需要设计好业务逻辑的接口,至于使用什么编程语言和技术去实现业务逻辑,完全可以根据实际情况去指定。2.构件(Composite)19中山大学硕士学位论文Composite构件是Component的组装单元,是部署的最基本单位,一个Composite构件可以包含0个以及0个以上的Component组件、服务、引用和属性。构件的业务逻辑包含在其组件的实现中。Composite构件如臣f13-2所示:毫■蝻∞·臼*毒面目薛觚R—■愀.Jav3i俚蜘毫图3-2SCA构件示意图陷埔叼黼翱嘲S锚点壤搬墓构件的主要作用是按照一定的业务逻辑进行分组,同时把一个分组内的各个组件按照一定的方式连接在一起,构件中的各组件之间,通过连接(wire)而进行相互调用。构件通过提升(promote)内部组件的服务、引用和属性形成自己的服务、引用和属性。同样地,构件可以向外提供服务,该服务是以接口的方式提供的,目前支持的是Java接口和WSDL的端口类型。构件的服务对外提供的访问方式是通过绑定(binding)来描述的,比如WebB艮务绑定表示可以用Web服务的方式来调用该服务,目前还支持如SCA,JCA,3Ms等各类协议的绑定。3.绑定(Binding)绑定是SCA与其他技术进行整合的主要方式,目前SCA规范中制定多种绑定不同协议的规范,如Web服务、BPEL、SCA、EJB、3MS,RMI和Spring等。SCA的绑定可以用在服务和引用中。如果绑定是用在服务里,表示该服务的客户端调用该服务时所需要使用的访问机制;如果绑定是用在引用中,则表示该引用‘耄呐~姒擞溺中山大学硕士学位论文调用其他服务时所使用的访问机制。在SCA规范中,规定了SCA绑定和Web服务绑定是每个SCA运行时容器必须提供的。SCA绑定一般用于本地服务,Web服务绑定一般用于远程服务。4.域(Domain)一个SCA的域指的是这样的一系列服务:它们提供了由某个组织进行控制的一组业务功能。SCA域是一个完整的运行配置,通常是由一系列相互连接的运行时节点组成的一个分布式环境‘刎。SCA中的每个域是针对于一个业务功能进行划分的。每个域对应一定的业务范围,这个业务可能是一个子系统,也可能是一个模块。每个域通过一个URI进行标识。图3-3是SCADomain的结构图。图3-3SCA中的域示意图21中山大学硕士学位论文3.3SCA规范简介2007年3月,开放SOA合作组织颁布了SCA规范1.0,并提交OASIS予以审批。SCA规范主要包括以下两个方面:·SeA的组装模型。SCA组装模型通过连接来处理各组件之间的连接关系。组装模型是独立于语言的。●实现规范的服务客户端的实现。每种语言都有自己的客户端和实现规范。目前SCA1.O版本中,已经制定了有如JAVA、Spring、BPEL、C++、WebServices、3MS和EJB的相关实现。目前,更多语言或者框架的相关实现正在颁布或实现中。此外,OpenOSA还成立了6个技术委员会,进一步发展SCA规范标准。而Apache软件基金已经发布了基于SCA规范的第一个开源实现TuscanySCA。3.4SCA的优势SCA的出现,可以说是SoA架构实践中十分重要的一环。SCA的主要目标,是为了更方便地进行系统间的集成。因为在以往的企业应用系统集成中,往往需要了解对方系统的详细情况、技术上的细节等。例如在调用WebServices时,调用方的代码中,依然要使用各类WebServices框架的API。对服务的调用者来说,任何服务的调用都应该以一致的,易于理解的方式进行,不应该因为语言和协议等差异而有所不同。而在企业应用的集成中,各企业系统往往十分复杂,使用了不同的技术,不同的协议,为了尽最大可能简化企业应用集成,而使得用户更专注在业务逻辑的编写上,因此需要一种简化应用程序开发和实现的新技术,因此SCA编程模型正好能满足这种需求。SCA具有以下优势:1.SCA简化了业务组件的开发。SCA编程模型中,很好地实现了接口和实现的分离,调用者只需要调用服务的接口,无需了解服务的内部细节。SCA使得开发人员可以灵活地创建组合各类组件服务,可以集中精力编写业务逻辑,而不必将大量的时间花费在更为底层的技术实现上。SCA提供了一种统一的调用方式,中山大学硕士学位论文从而使得客户可以把不同的软件模块通过服务构件的标准化统一地封装起来和调用访问。这种面向服务构件的编程模型可以大大简化客户的编程,提高应用的灵活性,从而实现松耦合的目标。2.SCA编程模型实现的组件服务具有良好的扩展性。由于SCA编程模型中只规定了组件的实现、声明、引用等规范方式,因此只要符合SCA编程模型规范的组件或构件,都可以用不同的协议、语言去实现。如目前SCA的~个开源实现TuscanySCA,已经实现了EJB、WebServices、JMs等协议的绑定,支持JAvA,C++,BPEL,同时支持PHP和Ruby等脚本语言,而且新的技术和协议可以陆续添加进来。3.SCA编程模型具有很好的重用性,能很好地整合原有的技术,保护原有的IT资产。SCA编程模型并不跟目前已经存在的技术相矛盾,原有的技术无需做任何改变,相反,它们之间是有益的互相补充,原有的技术会发挥的更好。在企业要进行服务整合时,只需要在原先的系统上添加基于SCA的组件实现,即组件服务层,就可以很容易地把系统原有的功能,按整合的需要发布成不同的协议或服务,从而轻易地进行整合。因此,SCA是一种简化SOA中应用程序开发和实现的新技术。借助于SCA,客户能够更容易创建新服务或者将现有的IT资产转化为可重用的服务,这些服务可快速适应不断变化的业务需求,而这正好是SOA要实现的目标。3.5本章小结本章介绍了SOA架构中的重要组成部分SCA编程模型规范的相关概念及SCA的优势。目前,由于各大厂商的协作努力,使得SCA规范的制定正逐步完善。可以说,正因为SCA的出现,使得长期讨论的SOA架构在具体的技术实现上得到强有力的支撑,真正让SOA落地。同时,SCA由于将组件的重用级别从以往的面向对象,面向组件提升到目前的面向企业服务级别,更关注于IT的业务敏捷性,能快速地将不同语言,不同平台,不同框架和不同协议上产生的组件组装起来,大幅降低了由于编程语言和部署平台的不同而产生的应用开发复杂性,提高了生产效率,满足了不断变化的业务需求。可以预见,SCA中山大学硕士学位论文今后的发展将会更为迅速,能象EJB,Spring等先进技术规范和框架那样被大规模应用起来。24中山大学硕士学位论文第4章基于SeA的SOA架构设计4.1ApacheTuscanySCA简介SCA规范在制定后,目前在技术规范的实现方面,有Apache开源组织的Tuscany以及BEA的Fabric3。其中TuscanySCA是SCA规范目前推荐的一个SCA开源实现。Tuscanysea目前提供Java和C++两种运行时实现。目前,Tuscany已成为Apache的顶级项目(http://tuscany.apache.org),其中ApacheTuscanySCAJava的最新版本是1.4。ApacheTuscany的体系结构如图4-1所示12n。图4-1ApacheTuscany的体系结构图上图是Tuscany运行时的一个层次结构图,其中包括以下关键模块。1.SCA规范API:SCAJAVA客户端的API和执行规范。2.TuscanyAPI:实现SCA规范的TuscanyAPI。中山大学硕士学位论文3.TuscanyCore:Tuscany的运行时核心部分。在该部分中,支持了在SCA开发中的各类服务组建的创建、服务间的组合相互调用等功能。4.接口绑定:支持接口的绑定类型,目前支持WSDL和Java的绑定。5.数据绑定:实现对不同服务之间的数据类型的绑定,例如SDO、JAXB,Axiom。6.实现类型绑定:提供不同语言技术的实现。7.协议绑定:把服务绑定到不同的协议上,支持SOAP、JSONRPC、跚I、JMS等。8.策略类型(PolicyType):Tuscany支持目前的各类Web服务安全策略和事务标准。9.运行时容器(TuscanyHosting):提供Tuscany运行时的环境,目前可以运行在Tomcat,Jetty,Geronimo,OSGI等容器环境中。4.2使用sea开发soA应用scA将构建soA应用程序分为如下四个步骤:·设计服务的接口·实现组件的业务逻辑代码·组装组件。通过使用服务组件定义语言,对各组件及构件进行配置·客户端进行调用在本节中,将分别介绍在SCA开发中的上述四个步骤。4.2.1设计服务的接口由于SCA的开发是基于接口的编程开发,因此必须首先针对服务设计接口。以使用Java语言开发SCA为例,设计服务的接口与普通的设计Java接口是完全一样的。如果该接口是属于远程接口,则需要添加@Remotable注解标签,如下所示。@RemoNble中山大学硕士学位论文publicinterfaceIBooksWSservice{ListgetbooksO;4.2.2实现组件的业务逻辑代码SCA的Java实现规范中,实现组件的逻辑代码可以说跟普通的Java接口的实现是基本一致的。如果在实现中需要引用其他组件或者服务的,则可以通过使用@Reference注释标签指定,如下所示。publicclassTfiplmplimptementsTrip{@ReferenceprotectedCurrencyConvertercurrencyConverter;⋯⋯)4.2.3组装SCA应用最后,通过搿服务组件定义语言’’SCDL(ServiceComponentDefinitionLanguage)来定义组件的配置,即通过配置来创建组件的实例。SCDL是基于XML的描述语言,一个组件装配文件通常是形如X)【)【.composite的文件格式,其中通过XML配置描述各组件之间的调用关系,如下所示。中山大学硕士学位论文</component></composite>在上例中,将设置组件的名称为TripComponent,指出其实现的类为TripImpl,通过reference标记,指出了需要引用的服务组件。可见,在接口的实现中,通过@Reference标记指出的引用的类,在组件装配文件中,通过reference标记指明其具体的位置。而SCA运行时会通过依赖注入的方式,把@Reference标签所引用的组件,使用标记所指向的组件或服务进行赋值。4.3SCA与SpringSpring框架普遍用于构建Java应用。它的目标是要减少编程环境的复杂度,与SCA有许多相同的设计原则。特别地,Spring提供了依赖注入机制的运行时容器,能避免应用组件之间的相互依赖,从而达到松散耦合的目的。Spring是面向接口编程的,而SCA是面向服务编程的。在SCA中,如果不明确指定服务的提供方式,则使用默认的SCA绑定,这时与Spring相似,使用的是面向接口的编程,可以说,面向接口编程是面向服务编程的一种特殊形式。由于SCA与Spring在这方面的相似性,因此在SCA的Java实现中可以很好地结合Spring。如图4-2所示,在该SCA应用中,构件CompositeA和CompositeB的实现都是由Spring所实现的,每个复合构件都声明了一个服务。复合构件A由两个Springbean组成,其中beanX通过一个SCA服务暴露给SCA,BeanY有一个对外部SCA服务的引用。该服务引用被连线到另一个Spring上下文即复合构件B上,复合构件B有一个连线到BeanZ的服务声明入口。使用Spring作为实现方式的构件可以连线到SCA的服务和引用,而不需要在Spring配置中引中m太学硕±学位论文入SCA元数据。Spring上下文对SCA环境知之甚少。所有的策略的执行都发生在SCA运行时的实现中,并不会进入到Spring的空间中m’。图4—2SCA与Spring交互图SCASpring的组件实现规范指定TSpring框架在SCAcP如何做为组件实现技术使用。在靼粒度级别上,提供了在scA中支持Spring框架。在sc^中可以使用己存在的Springapplicationcontext作为组件实现。SCA规范中使用如下的三个扩展标记与Spring进行集合。●:在Spring中指定向scA提供服务:●:在Spring中引用SCA外部容器的服务;●:该元素定义了代表某个SCA构件的property。SCA与Spring的关系可以总结为如下几点。1.Spring的关注点在于在单一的Jv^l内对接口与实现进行解耦,而SCA的关注点在于分布式计算环境。Spring与SCA都是采用了依赖注入的思想对接口跟实现进行分离,从而更好地让业务跟技术分离。曲中山大学硕士学位论文2.Spring里所有POJO的层次都是相同的,而在SCA里,划分为组件Component和构件Composite,并定义了其他如引用服务等规范。3.Spring并不支持多种协议的绑定,而SCA允许在底层实现中绑定各类通讯协议和不同类型的技术框架。因此,可以认为,SCA很好借鉴]'Spring的依赖注入的思想,并把其提升到了服务的更高级层次,它们之间可以无缝结合,从而构造扩展性很强的SOA系统。4.4SCA的调用方式在SCA中,调用方式分为同步调用方式和异步调用方式。同步调用方式指的是客户端发起请求后,一直等待服务端服务返回结果,在此期间客户端一直处于等待状态,不能进行其他的操作,因此耗费的时间较长,效率较低。异步调用的方式指的是客户端发送请求后,在等待服务端返回结果的同时,可以继续进行其他操作,当服务端完成操作后,可以通过回调等方式告知客户端。在SCA中的异步调用有三种方式。·单向调用单向调用指的是客户端发出请求之后就不再关心服务端的情况,包括是否执行成功,返回值是什么,继续按照客户端原本的执行顺序进行操作。在TuscanySCA中,要标注某个方法为单向调用,可以在该方法前加入注释标记@OneWay,并且该方法规定不能有任何的返回值,包括不能抛出异常。●延迟响应延迟响应方式是指客户端在发出调用请求之后,获得一个票据,然后继续执行,经过一段时间之后,客户端再调用相应的方法去检索服务端服务所返回的结果根据调用的结果而执行进一步动作。◆请求回调请求回调方式指的是客户端在发出请求后,可以继续原有的工作流程,当服务端的服务完成后,通过回调机制,由服务端主动调用客户端的方法以告知返回的结果。这与普通编程语言中的请求回调机制有相似之处。中山大学硕士学位论文4.5SEA应用方案架构设计4.5.1设计目标目前有不少厂商都提出了很多关于SOA的整套系统解决方案,但其中不少都是属于比较庞大的解决方案,需要投入昂贵的资金及资源。对于中小型应用系统,由于业务迅速发展的要求,因此往往更应该从长远的角度着手,提早布局进行SOA的相关实施,这将会大大提升企业的竞争力。本文提出基于SEA的SOA架构,就是要充分运用SEA编程模型的特点,在尽可能少的对原有系统框架进行修改的基础上而总结出的一套架构方法,其中设计的目标为如下两个。1、系统具有良好、灵活的分层架构,各层之间具有SO^的松耦合特性,易于与其他系统进行整合。2、能根据业务需求,轻易地将原有系统的功能组件包装成SOA架构中的服务组件,并且可以灵活地以不同的技术和协议对外发布。4.5.2基于SEA的SOA架构分层在构建基于SOA的应用时,对架构进行合理的分层尤为重要。SOA的重要特征是松散耦合,因此在分层中要实现各层之间达到松耦合,以利于系统的扩展和修改。本文提出了在构建SOA系统时,使用SEA编程规范构建服务层的观点。在该分层架构中,对原有的MVC三层/多层架构进行扩展,增加了服务层、业务流程层和企业服务总线集成层。其中,视应用系统规模大小,业务流程层和企业服务总线集成层为可选的分层。该分层体系架构中,最大的优点是使用了SCA编程模型构建服务层,使得可以轻易对原有系统的各功能模块进行组装和重用,保护了原有IT系统的相关投资。对于一些大型的SOA整合应用,同样可以使用该分层架构,因为SCA编程模型能与BPEL和ESB企业服务总线等技术很好地进行整合,可以把需要整合的系统模块功能用SEA封装成组件,BPEL或ESB则可以调用这些组件进行服务。图4-3为该分层SOA架构图。31中山大学硕士学位论文Ill用户袋现堪AJ^XF鼬llll八l绷;l与>建,敬II|妙I氽业服务总线袋城层毯sBlIli,。糊凇锨匮瑚llrjl服务层l鼢嘲秤llsc确箨lj‘l逻辑组件屡|滋絮昝l辆I/\妙数黝牙艨l缆勰叫:7习黢魏曜图4—3基于SCA架构的分层结构图在该分层结构示意图中,括号中指出了在该层中所采用的技术或框架。1.数据访问持久层在数据访问持久层中,主要的功能是对数据库进行访问。目前在开源框架中普遍使用的是Hibernate。Hibernate是一种Java语言下的对象关系映射解决方案,Hibernate不仅负责从Java类到数据库表的映射,还包括从Java数据类型到SQL数据类型的映射,并且还提供了面向对象的数据查询检索机制,从而极大地缩短了处理SQL和JDBc上的开发时间[231。32中山大学硕士学位论文在数据访问层中,采用的是J2EE设计模式中的DAO模式。DAO模式的一个显著优点,在于分离了业务逻辑层和数据持久层。业务层的逻辑代码不直接跟数据库打交道,而是通过调用具体DAO的存取方法对数据库进行操作,方法的实现由具体的DAO实现类去处理,业务对象不关心实现细节。2.逻辑组件层在逻辑组件层中,主要作用是封装了系统的业务逻辑,执行相关的业务功能,并调用数据访问持久层进行数据的持久化工作。目前可以使用如开源框架中的Spring或者传统的EJB技术构建逻辑组件层。3.服务层服务是指用来满足某个特定业务功能的一系列动作,从技术角度来看一个服务就是一系列技术资源(比如数据库,程序,设备等)通过公开其接口互相交互协作的综合表现‘241。SOA中的服务指的是可以向其他组件模块或外部系统提供的,封装一定功能集合的业务组件实体。服务通过定义了良好的接口,可以被公开通过访问的,它接受请求方对其发出的服务请求调用。在一般的J2EE应用系统中,可以不存在服务层。但如果企业的信息系统要实现SOA整合,则必须添加服务层。服务层的作用在于对信息系统中需要对外提供的服务进行包装。由于有了SCA编程模型,因此可以参照设计模式中的门面模式(FacadeDesignPattern)进行相关设计。设计模式中的门面模式,其意图为子系统中的一组接口提供一个一致的界面,门面模式定义了一个高层接口,这个接口使得子系统更加容易使用1251。门面模式的示例图如图4-4所示。33中山大学硕士学位论文图4-4门面模式示意图在门面模式中,门面充当的角色,知道子系统中各模块的职责和功能,会将来自客户端的请求逐一委派到相应的子模块中去。门面模式的优点为向客户端提供了简单的统一的接口,客户端只需要调用门面角色提供的接口,即可完成对子系统中各模块的调用,屏蔽了子系统中各模块的复杂性,减少了系统间的耦合性,提高了系统的可重用性。同时,如果子系统中的各模块的接口进行了修改后,只要门面接口没有修改,则不影响客户端的调用,客户端无需修改相关代码。同样,在SOA设计中,也可以充分利用门面模式设计服务层。在以往的设计中,客户端直接通过Web服务的方式对服务端提供的服务进行调用,这往往使双方形成紧耦合,当企业应用系统中有大量的遗留系统时,必须把遗留系统中需要提供服务的模块都通过WebServices的形式对外发布,客户端必须逐一通过WebServices去访问这些服务。如果服务端的系统功能模块等进行了修改,则必须重新发布这些WebServices,大大增加了系统的复杂性。为了进一步降低客户端与服务端的耦合,理想的设计目标应该是客户端调用服务端的服务功能时,并不直接与其打交道,而是通过访问门面模式中的门面角色服务,就可以完成一系列对服务端服务的访问。根据门面模式的设计,可以把需要包装成服务的逻辑组件定义为SCA中的组件,最后通过SCA中的装配模型,把组件绑定到相应的协议中去。由于使用了SCA的编程模型,因此其他需要引用服务的客户端,只需要通过调用SCA封中山大学硕士学位论文装的组件即可,而无需要关心其服务的内部具体实现,如下图所示。图4-5SCA构建服务层上图中正方形方框的部分表示的是系统原来的业务逻辑组件层和数据持久层部分。从上图中可以看到,假设系统中的某个功能需要对外提供服务,则可以通过SCA编程模型,把原先通过Spring封装的组件使用SCDL组装起来,从而形成一个构件,该构件对外绑定为某种协议,如WebServices、RMI、JMS等。客户端如果需要调用该服务,则只需要跟SCA包装好的构件通讯即可。由于SCA构件在这里充当了门面模式的作用,同时由于SCA跟Spring可以互相整合调用,使得在SCA组件中,可以调用通过使用Spring封装好的业务逻辑组件,这时完全不需要更改系统原先由Spring封装好的逻辑代码。客户端不必了解服务端具体使用的技术以及业务逻辑,只需要同样运行在遵守SCA规范的运行时容器中,并获得要调用服务的接口及服务的调用地址即可。假设在上图中,系统不使用Spring,Hibernate而使用EJB等技术,则将上图中正方形方框部分的更换即可,而对外的服务接口不需要作任何的修改。35中山大学硕士学位论文而在SCA编程模型出现前,客户端调用服务端的服务,必须要通过各类技术框架,把业务逻辑代码经过适当的修改和配置,才能发布一个服务,同时客户端必须通过诸如使用各类框架的API,加入调用服务端服务的相关代码,这就使得业务逻辑与技术实现形成了紧耦合,不利于系统的应用扩展。4.业务流程控制层在这一层中,可以利用服务层中已经封装好的各种服务来进行组合编排,构建应用系统中的商业流程。SCA规范只是规范了如何对组件进行封装和连接,并未对在业务流程中,以何种顺序对组件调用作出规范说明。目前,BPEL(BusinessProcessExecuteLanguage,业务流程执行语言)【261是用于实现业务流程控制的业界标准。BPEL语言基于XML,通过对Web服务的包装,同时指定了要以什么样的顺序进行调用。如果说,服务层把业务逻辑组件用SCA进行了良好的包装,那么业务流程控制层,就相当于一个指挥官,控制了组件的调用流程。BPEL支持将XMLSchema定义的元素或数据类型作为BPEL的变量进行操作,同时,BPEL以Web服务为服务的包装标准,其服务提供和服务调用均由WSDL文件来描述,这与SCA的服务描述相一致。BPEL可以直接引入SCA组件的WSDL描述而对SCA组件进行调用。BPEL流程本身也可以作为SCA的一种实现,像其他SCA组件一样对外提供服务。本文认为,如果企业在实施SOA的过程中,并不强调各服务流程的调用顺序,则可以暂时不使用业务服务流程层。5.企业服务总线集成层在第二章中,已经对ESB企业服务总线作了相关介绍。企业服务总线集成层所应用到的主要架构模式是企业服务总线,设置该层的主要的目标是为不同系统之间消息传输过程中的协议、数据格式转换,消息路由提供可靠的基础保障。要注意的是,在SCA规范出现之前,ESB的架构模式已经出现,如IBM,BEA,Oracle等各大厂商也推出了许多用于具体实现ESB架构模式的产品。ESB跟SCA其实并不矛盾,在IBM的思路中,SCA是实现的基础编程模式,也就是说,ESB中的功能模块是由SCA包装的,并且SCA是ESB与外部系统的一种连接方式。同时,由于目前各大厂商的ESB产品均提供了很好的如消息路由、协议转换、中山大学硕士学位论文数据映射转换和消息传输安全保障等功能,因此如果企业信息系统十分庞大复杂,遗留系统中跟现有系统的数据消息格式有很大的不同,则建议在实施SOA的过程中增加企业服务总线集成层,并使用相关的ESB产品。在图4—3中,F.SB企业服务总线把应用1,应用2以及正方形三个方框的内的三个应用连接起来,从而实现企业应用系统间的整合。6.用户表现层在基于SOA架构的企业应用系统中,用户表现层同样显得十分重要。随着Web2.O越来越受到广泛关注,可以将Web2.0的各类具体技术实现,如AJAX或Flash等,与SOA的具体技术实现结合起来,构建“富客户端’’的用户应用,大大提升用户体验。同时,由于TuscanySCA已经能和如DWR,JSONRPC等AJAX框架进行绑定,因此可以在集中编写好业务逻辑组件后,使用SCA的绑定功能,TuscanySCA会相应生成对应的Javascript代码,在前端的页面中,则可以通过AJAX直接调用SCA包装的业务组件服务,省去了以往使用某种AJAX框架时,需要进行大量AJAX配置文件的工作,提高了开发效率。4.6本章小结本章首先介绍了SCA开源实现ApacheTuscanySCA的相关情况,接着分别介绍了如何使用SCA开发SOA应用程序的一般步骤,以及SCA对Spring的支持和SCA的调用方式。最后本章介绍了基于SCA的轻量级SOA分层架构方案,重点介绍了如何让SCA实现SOA分层架构中的服务层的方法。随着SCA编程模型规范的逐渐成熟,使得在构建SOA应用程序方面,有了真正的可以予以具体实施的技术规范。SCA凭借其与具体技术、平台和协议无关的特性,使得可以轻易地与原先系统的技术框架进行整合,保护了原有的IT投资。目前在对企业的信息系统进行整合时,可以首先考虑使用SCA编程技术为系统添加服务层,这样可以有利于适应将来更大规模,更深层次的信息资源整合。中山大学硕士学位论文第5章基于SOA的企业应用系统设计方法在本文的前几部分,系统论述了SOA的基础理论和体系架构,分别介绍了目前SOA技术体系中重要组成部分SEA编程模型的相关理论及技术细节,那么在实践中,如何在系统设计的生命周期中贯彻SOA的原理和思想,构造出符合SOA设计原则的企业应用系统呢?接下来的本章,将详细介绍如何利用SOA的架构体系思想方法对系统进行相关的系统分析,提出了其中的注意事项和相关经验。在此基础上,本章提出一套适合中小企业应用系统进行SOA架构建设与实现的方法。5.1基于SOA的分析设计方法SOA的设计方法理论贯穿于系统设计的各个方面,如系统分析和设计,系统的实施,系统的部署和系统的监控和管理等。本文提出,在应用SOA进行系统设计时,一般需要经过以下几个阶段,并且在设计的过程中,要充分运用敏捷的开发理论方法实践,因为SOA方法学的重要特征之一就是强调“敏捷的业务,敏捷的开发方式一。1、基于SoA的需求调研。2、现有业务系统的业务分析3、服务的设计和实现4、SOA的治理无论企业系统的规模如何,在使用SOA的方法论架构企业应用系统时,都必须经过上述的四个阶段。5.1.1基于SOA的需求调研基于SOA的需求调研阶段,其目的是从在项目的建设初期,从业务的角度出发进行需求调研,考察需要使用SOA设计的可行性。在这个阶段可以进一步划分为如下三个步骤:系统现状的分析、SOA的策略制定、SOA的生命周期设定。1.系统现状的分析中山大学硕士学位论文首先,必须对系统的使用现状进行细致深入的分析,以便找出存在的问题,为下~阶段使用SOA的方法论进行架构奠下良好的基础。要注意的是,这里所说的系统现状分析,不单是对系统目前使用情况的简单罗列,而应该包含对业务系统的现状分析和IT系统的现状分析。因为SOA的理念在于要将业务和IT很好地结合起来,所以要分别考察系统目前的业务和IT架构现状,才能真正得到系统的真实情况。在对业务系统的现状分析中的一个最重要目标,就是找准系统使用SOA的切入点在哪里,即解决的是“为什么系统的建设要涉及到SOA层面一的问题,千万不能认为凡是信息系统都一定要实施SOA战略。本文建议使用的方法是横纵对比的方法,如图5-1所示。图5-1SOA切入点分析示意图企业应用系统要实施SOA的一个重要目标,就是要利用SOA的敏捷特性,让IT更好地随业务的需求而变化,为企业创造更大的效益,因此,在实施前,必须知道企业应用系统分别在业务和IT架构上具体有哪些不足,才能更好地找出问题的症结所在。同时,必须要对系统的可预见性收益进行相关的估算,估算当系统采用SOA的架构后,对业务系统能预期带来的收益是多少。最后,可中山大学硕士学位论文以通过评估目前系统的扩展整合能力,看系统能否具备良好的可扩展性以适应新业务的发展需要,是否具备良好的服务整合能力以便同异构的系统进行整合。而在这个阶段的分析过程中,不妨采取横纵向对比的分析方法,就是将系统与其他同类型的先进系统进行横向对比,找出目前系统的不足之处,同时在系统内部进行纵向的对比,分析系统在不同的时期里遇到的种种问题。通过以上四个环节的分析以及横纵向的对比,可以比较清楚地得出SOA的切入点在什么地方,清楚的评估出实施SOA的架构后能给企业的业务带来多大的提升空间。2.SoA的策略设定在确立了系统项目可以使用SOA进行构建扩展后,必须明确进行SOA的策略和目标设定。SOA的策略主要分为两大类:大规模策略及中小规模策略。大规模策略主要针对一些大规模的应用,比如电信,金融企业等。在采用大规模SOA战略时,实施的周期较长,需要投入较多的人力和资源。而中小规模的SOA策略,一般适用于普通的中小型企业使用。本文主要探讨的是中小规模的SOA策略应用。在指定SOA策略的时候,必须要根据本企业信息系统的实际情况而量力而行,一般来说,要关注到以下几个方面。●SoA的切入点项目选择由于是采用中小型规模的SOA策略,因此,在之前第一阶段得出SOA切入点的成果上,就要进一步选择具体的项目作为SOA启动的项目。建议不必要马上在整个企业或组织范围部署SOA,这往往会因为涉及到的业务及部门繁多而难于协调。在项目初期,可以选择一些对提高业务有关键作用的,业务清晰而且有一定IT基础的系统进行试点作为建设,可以降低项目的难度,而且可以给后续项目的开展积累成功的经验。·SOA策略指导委员会为了统领整个企业的SOA项目建设,必须成立SOA策略指导委员会。该委员一般由企业高层领导、CIO、CTO、系统架构师、业务流程分析师、系统分析师及系统的各应用单位部门负责人、系统最终使用用户等组成。成立SOA策略指导委员会的目的在于从宏观上制订项目实施SOA的方针策略,采用的技术路40中山大学硕士学位论文线手段、运营维护的策略,进行项目管理、安排调配系统的人力、资金等各种资源等。委员会必须首先要统一认识,对系统实施SOA有充足的信息和共同的目标,并形成一套具体的管理章程规范。要注意的是,在SOA策略指导委员会中,要充分重视如业务流程分析师、各业务部门负责人及最终用户的意见,他们必须在委员会中占有绝大多数,因为SOA是沟通业务和IT的桥梁,所以要十分重视业务部门的作用。·SOA的实施技术人才SOA与传统IT项目的一个很重要区别,在于SOA项目更重视和适应业务的需求变化,因此在项目初期,就要建立一支复合型的IT团队。团队中除了配置系统架构分析师,系统分析员,程序员,测试专员外,还需要既熟业务流程,又有过硬专业IT技术的人才。特别是在与业务部门沟通时,这类型人才要承担起业务流程分析师的作用,不仅要深刻理解业务,还要分析业务,抽象出可重用的业务服务并进行合理的建模。3.SOA的项目周期设定SOA的项目实施周期一般建议采用迭代的周期控制,即把一个SOA项目的周期进行拆分,从而避免项目周期过长,一般宜控制在3-6个月为宜。在每个周期中,使用敏捷软件工程方法,尽快让项目能在短时间内有可发布的版本出现,而在下一个周期中,将就前一个周期中遇到的问题予以改进,不断完善。如此一来可以更加贯彻SOA敏捷的方法论。4.SoA的具体技术选择由于SOA目前依然在不断的发展中,存在各类的技术标准,因此采用符合发展趋势和标准化的规范将尤其重要。在普通的SOA应用中,简单的可以采用如WebServices的方式,而对于流程应用应该采取BPEL技术规范,而随着SOA中编程模型规范SCA的不断成熟,应该采用SCA的编程规范作为异构平台系统整合服务流程的首选方式。41中山大学硕士学位论文5.1.2服务的设计和实现在明确了SOA应用的业务需求后,可以开始着手进行企业应用系统的设计和实现。在设计和实现阶段,有如下需要注意的事项。1.服务粒度的设计所谓服务的粒度就是指一个服务包含的功能大小。粒度分为粗粒度和细粒度。在SOA架构中,细粒度服务是指那些实现功能相对简单,提供少量业务流程可用性的服务。粗粒度服务是那些能够在业务流程方面,可以提供业务级重用的服务【2"。细粒度的服务提供相对较小的功能单元,或交换少量的数据。完成复杂的业务逻辑往往需要编排大量这种细粒度的服务,通过多次的服务请求交互才能实现。相反,粗粒度的服务则是在一个抽象的接口中封装了大块的业务/技术能力,减少服务请求交互的次数,但相应也会带来服务实现的复杂性,交互大量的数据,并因此而不能灵活更改以适应需求的变化。就像任何事物都有两面性一样,服务粒度不能太大或者太小,而应该大小合适。一个良好的SOA架构设计,必须在服务粒度设计上维护一种平衡,以获得成本降低,灵活响应的好处。2.服务的发现方法目前在建立服务模型阶段,对于如何发现服务,普遍使用的方法是IBM提出的SOMA方法。IBM的SOMA将面向服务的分析和涉及分为服务发现,服务规约和服务实现。其中服务的发现方式又分为自上而下的设计方法和自下而上的设计方法,以及中间汇合设计的方法【圳。·自上而下的分析方法自上而下(业务领域分解)方式从业务着手进行分析,将业务进行领域分解、流程分解,以及进行变化分析。业务组件模型是业务领域分解的输入。根据业务组件模型的详细描述,我们可以将业务领域按照业务职责细分为业务范围,并直接其映射到IT范畴的子系统,实现业务与IT的无缝连接。顶级的业务流程是流程分解的输入。将业务流程分解成子流程或者业务活动,逐级进行,直到每个业务活动都是具备业务含义的最小单元。流程分解得中山大学硕士学位论文到的业务活动树上的每一个节点,都是服务的候选者,构成了服务候选者组合。自上而下的分析方法的优点在于可以从企业业务的整体层面出发进行SOA设计,但其缺点在于投资大,周期长,涉及的范围广等。●自下而上的设计方法在自下而上的方法中,要通过分析企业中现有应用来定义服务。企业系统通常会有各种遗留系统,因此可以通过分析现有系统的功能,考虑将其包装成服务。通过自下而上设计方法确定的一般是粒度较小的服务,其优点是该方法投资小,见效快,但不足之处在于着眼于局部,不一定能考虑到全局的流程。·中间对齐的设计方法中间对齐的方法力求联合自上而下方法和自下而上方法来达到业务与遗留资源开发的服务的匹配,目的是帮助发现与业务对齐的服务,并确保关键的服务在流程分解和已有资产分析的过程中没有被遗漏。5.1.3SoA的治理SOA项目要取得成功的话,必须要有很好的治理方法。SO^中的治理,指的是在SOA生命周期管理中确立负责人所使用的流程,以及应做的相应操作,它为SO^计划提供引导和监督【291。由于服务的使用者和服务提供者一般都是处在不同的开发环境、部署环境中,由不同的部门开发和管理,为了能正确运行,需要进行大量的协调工作,在IT和业务职能部门之间建立更加密切的协调关系,因此必须制定出一套行之有效的规章制度。SOA的治理必须贯穿在整个项目中的不同阶段。本文认为,企业在架构基于SOA的应用系统时,应着手搞好如下几个方面的SOA治理工作。1.必须建立SOA治理委员会,负责项目治理策略的制定、修改和表决。委员会应当由企业高层领导、CIO、CTO、系统架构师、系统分析员、各业务部门的负责人联合组成。在项目的启动阶段,委员会在负责制定相关的SOA策略时,还要制定各业务使用部门使用SOA服务的策略,如哪些部门有权限使用某公开的服务,使用的时间是多长,使用是否需要支付费用(如果是商业用户),当使用服务遇到意外问题时的处理方法等。此外,由于SOA项目肯定要涉及到不同业务部门的业务流程,因此委员会还要协调各业务部门的相关利益,以使整个中山大学硕士学位论文业务流程能顺利运行。2、对SOA的服务质量做好相关的保证工作。比如在设计的前期,对于服务的设计,要规范好双方的接口,遵循一定的设计标准,如双方都遵循WSDL、SOAP标准。服务的提供者和服务的使用者双方的设计人员应该做好沟通工作,对服务的版本更替,服务的迁移,服务的安全等问题都考虑得十分详细。3、SOA治理委员会要在项目完成后,定期对其SOA策略作修正和检讨。SOA项目不可能是一蹴而就的,要经过不断的改进和发展。在项目初期完成后,委员会不仅要针对项目的功能作出评估,更重要的是要评估当初制定的SOA策略是否能得起到很好的作用。比如评估项目在使用SOA的架构方法后,是否能真正提升业务的效率,提高经营效益,是否能改进企业原有的IT架构,是否能让IT更好的促进业务的发展,是否能让业务领域比实施SOA项目前更好更快地适应市场竞争的需要。5.2本章小结本章介绍了如何利用SOA的架构体系方法对系统进行相关的系统分析,在此基础上,提出了一套适合中小型企业进行SOA架构建设实现的方法和步骤。在该套方法中,从业务的需求调研、现有业务系统的业务分析、服务的设计和实现、SOA的治理四个方面探讨了在设计一个基于SOA的企业应用系统时的具体步骤和要注意的问题。中山大学硕士学位论文第6章应用案例设计实现6.1系统需求概述本项目背景来自于对某报纸媒体下的新闻门户网站A网站的一系列信息系统的整合和扩展。A网站集新闻信息、服务信息与电子商务为一体的传媒企业网站,日点击率3000多万人次。目前,作为本地区新闻资讯网站之一,同时也作为传统媒体与互联网相结合的企业,在当今互联网竞争日趋激烈的情况下,网站的进一步发展必须适应新的形势,特别是如何充针对集团内已有的各系统资源进行有效的挖掘,如何充分将网站内部的业务进行优化,发挥出优势已成为急待解决的问题。根据第五章提到的方法,首先对目前的系统进行现状分析。1.业务系统目前的不足目前,网站主要有新闻,电子商务,旅游,短信等10多个频道,而且还拥有相当多数量的专题活动网站和专门为集团其他子公司部门搭建的网站系统。总的来说,业务系统比较多有一定的规模,各子系统运行保持稳定。但随着集团及网站业务的不断发展,给各业务系统带来了一定的运营压力。集团目前下属有网站,报纸,发行公司,广告公司等不同的子报子公司,由于历史的原因,一些子公司相互之间的IT系统建设并不完善,甚至有重复建设的现象。与此同时,网站的发展越来越依靠与集团其他子公司的相互合作,从而实现互利互惠,而这也依赖与相互IT系统之间的更紧密联系。2.I,r系统目前存在的不足目前,由于历史遗留问题及客观原因,包括A网站在内的整个集团的信息系统中,历史遗留的系统比较多,有用不同语言编写的信息系统,也存在不同的操作系统平台。比如集团有的属下子公司的系统是购买第三方的,有的是外包编写的,有的则是自主开发的。因此,IT系统的多样性和复杂性,很大程度上影响了业务上的高效率运作,形成了不少信息孤岛。45中山大学硕士学位论文3.可预见的收益要特别注意的是,往往企业高层认为实施SOA战略后就一定能给企业带来可观的收益,这其实是一种误解。SOA的成功实施,需要系统本身存在SOA改造的必要性以及各相关条件的有效配合,否则只能是空中楼阁。本文认为,在实施SOA战略的前期,应该对可预见性的收益作出合理的评估,其中可预见性收益应该包括在SOA项目实施后的一段时间内,项目干系人间接和直接获得的收益,其中比较重要的包括时间成本、技术成本、人力资源成本的节约所带来的收益。目前,应该意识到靠网站自身的单一模式发展,难于在激烈的竞争中胜出,应该与集团的各兄弟子公司紧密合作,达到双赢的目的。因此可以考虑跟集团的如发行公司,广告公司,报纸本身进行全方位的合作。4.扩展整合能力的判断系统是否具备很好的扩展整合能力,是判断系统是否需要进行SOA规划的一个重要依据。判断系统当前是否具有强的扩展和整合能力的一个比较好的方法,是从战略上考察能否将当前的系统与其他有相关战略利益的不同部门,不同应用的系统进行扩展整合。在本案例中,发现公司的网站群中的电子商务网站,与集团的发行公司有一定的战略合作关系,但考虑与其扩展整合的话,则暂时没能实现,因此,可以考虑将此作为SOA系统建设的一个切入点。经过上述的四个步骤的分析,初步认为,目前应该有计划有步骤地实施SOA策略。本次针对应用系统的SOA规划改造中,应本着“由点及面,部分试点,普及全局"的原则进行。系统的设计采用的开发工具是Eclipse3.3,SCA容器采用的是ApacheTuscany1.4。6.2使用SCA设计实现灵活的新闻发布功能6.2.1系统设计目前,网站使用的新闻发布系统是外购的新闻发布系统,由于使用时间较中m大学磺j岸垃论文长,而且系统本身是非开源产品,在可扩展性上有不足,不能很好地适应用户的需求。其中比较集中的问题在于新闻的重用问题,举例说明如下。网站出于运营需要,有时候需要单独建立一些子网站或信息系统,这时就只能新设计相关的程序。由于历史遗留原因,目前既有象P[iP开发的系统.也有用开源框架开发的J2EE系统。使用开源框架开发的系统,有比较高的灵活性,可以根据用户的需要定制需求,修改代码。然而,假设这些系统需要用到主网站的新阐信息,目前采用的策略是重新搭建新的新闻发稚系统,而所发布的新闻信息,都是来自主网站新闻发布系统已经发布过的新闻.这时编辑要重新进行相同信息的重复发布,耗费了大量人力和时间.无法提高工作效率。为了尽最大可能实现新闻信息的组件化.可以考虑使用SCA编程模型构造新闻信息的组件,从而摄大限度实现新闻功能的复用。下面为采用SCA编程模型设计的新闻组件示意图。图6-1SCA设计新闻组件示意图由于网站新闻发布系统中,并束提供如WebServices等接口,只提供了中山大学硕士学位论文RSS形式的接口,因此,在设计中使用了一个组件NewsComponent。该组件的主要作用是根据新闻栏目的ID编号,读取新闻系统对外公布的RSS文件,其功能由程序NewsComponentImpl实现。同时,NewsComponent组件,通过SCA的绑定机制,可以绑定为WebServices,以方便客户端调用。由于有了SCA编程模型,假设新闻发布系统今后不提供RSS方式的接口,而提供如跚I的接口,则NewsComponent组件通过SCh中的引用功能,可以很方便地进行调用跚I接口,而对于新闻发布系统本身以及NewsComponent组件,不需要重新编写或者修改其业务逻辑代码。同理,在图6-1中,使用开源软件Spring等搭建的子网站,如本案例提到的快乐购子网站,同样可以运用SCA封装其新闻资讯为一个单独的组件对外提供服务。由于SCA能与Spring无缝结合,原本用Spring制作的网站新闻发布系统,无需要做任何的代码修改。可以看到,这时NewsComponent组件充当了服务层的角色,客户端只需要与该组件进行交互,无需要在其代码中直接对新闻发布系统进行调用,而NewsComponent组件则通过SCA编程模型中的引用机制,完成对新闻系统所提供的组件服务的调用。6.2.2系统实现本节将针对图中NewsComponent组件充当的服务层进行设计。首先针对第一种情形,即将主站新闻发布系统用SCA进行封装。具体设计的UML图如下所不o48中山大学硕士学位论文钒。^。r一”穆0《幽l崮缸e)I》7i0翻如瓜∞秀譬《洲叫搬"秀。。瓣鬈Il|郴F柏如。i糍i№幽旗纛募锄D呻oIeIlI荔●驴№喊矾】:嗷●州∞:Lid●甜R哟:voic△.一L^0洲J:喱·..且I⋯一:._’.Iul、午Ji牟lI,IIlIIIIIIlII诌NencIi,ntZm一’7震I$NmjcoEnponenlImpl+墨lane孵I洲伽-州籀№妇allel一荔Or埘ac吐:11eI~fKade●geI怕砷:妇触●归¨删:懈董“●臼唧=veil●捌h如嗍:№西“响:州●删妇卸=vdd●ge|№埘瑚:盖●9eIl删;强0gd',le,,w5ti,tO:嗽图G-2新闻发布组件结构图由于新闻发布系统目前只提供了基于RSS的接口,为了更灵活地进行调用,可以单独通过程序把RSS形式的新闻列表内容进行处理,如转换为Java语言中的List类型。目前有很多方法可以方便地对RSS格式的X儿文件进行格式转换,本文借助开源工具包ROMEt30I进行转换。其中,上图中NewsFacade接口以及其实现类NewsFacdelmpl,是负责读取新闻发布系统RSS接口的组件,转换后返回List类型的新闻列表形式。而NewsCompont组件的接口和实现类分别为上图中的NewsComponent和NewsComponentlmpl,其中NewsComnponentlmpl类中,通过使用SCA模型中的引用,引用了RSS组件中的处理结果,关键代码如下所示。@RemotablepublicclassNewsComponentlmplimplementsNewsComponent{privateNewsFacadenewsfacade;publicListGetNewsList(intid){retumnewsfacade.getnewslist(id);}@ReferencepublicvoidsetNewsFacade(NewsFacadenewsfacade)(this.newsfacade=newsfacade;)中山大学硕士学位论文最后,通过SCA中组件装配规范,将各组件装配,关键的代码如下。</component协</component></binding.WS></service>可以看到,在SCA的装配模型中,通过reference标记指出在NewsComponent组件中,需要引用到RssComponent组件。同时,通过service标记,将NewsComponent组件对外绑定发布为WebServices.同理,对于客户端需要调用组件NewsComponent,只需要拥有NewsComponent组件的接口文件,即NewsComponent.java即可。同样通过reference标记引用NewsComponent组件,如下所示。publicclassNewsClientlmplimplementsNewsClient{privateNewsComponentnews;@ReferencepublicvoidsetNews(NewsComponentnews){ttlis.news=news;)publicListgetNewsList(intid){retumnews.getNewsList(id);)同时只需要在客户端的SCDL装配文件中,进行如下设置。</component>客户端在使用NewsComponent组件时,只需要按以下步骤调用即可。SCADomaindomain=SCADomain.newlnstance(”client.composite”):NewsComponentclient=domain.getService(NewsComponent.class,”NewsClienf’):中山大学硕士学位论文Listnewslist=client.getNewsList(1);假设要原先的新闻发布系统是用Spring等开源框架搭建的,那么依然可以运用图中的架构,此时,NewsComponent组件中的实现类NewsComponentlmpl中的引用newsfacade,为变成了被Spring容器托管的对象。这时,可以通过使用标签,将Spring容器中托管的bean组件作为服务,让SCA组件能访问,这时可修该Spring的配置文件如下。</property></bean>同时,在SCDL装配文件中,设置如下:</component></component>在上述文件中,通过使用标签,指出了其中newsFacade的引用,需要SCA调用Spring配置文件applicationC0ntext.ml中的已经被暴露为服务的bean组件newsservicebean。可以看到,使用SCA编程模型充当的服务层,充当了门面模式的作用,在客户端和服务端之间建立了沟通桥梁。6.2.3系统改进考虑到在调用A网站的新闻系统Web服务时需要耗费一定的时间,可以通过使用AJAX技术,先显示请求新闻服务页面的其余部分,这样可以避免用户陷入等待中。同时为了能判断A网站的新闻列表是否成功返回,可以通过使用SCA的请求回调方式,将服务返回的成功或失败的状态返回给客户端。如果A网站不能成功返回新闻列表给客户端,则调用方可以作出相应的处理,如显示一些友好的提示信息等,减少了因为系统故障而给用户带来的影响。5l中山大学硕士学位论文在6.2.2的基础上,使用SCA请求回调方式时,先设计好服务端回调用的接口RssServiceCallBack,其中的方法setCallBack返回的是Web服务的调用状态,如下所示。@RemotablepublicinterfaceRssServiceCallBack{publicvoidsetCallback(Stringstatus);)对于接口NewsComponent,增加方法getStatus,目的是获得回调方法中服务端提供的服务返回的状态,如下所示。@Remotable@Callback(RssServiceCallback.class)publicinterfaceNewsComponent(publicListRssList(intid):publicStringgetStatusO;)在服务端的实现NewsComponetImpl中,增加其回调方法的引用,如下所示。privateRssServiceCallbackrssServiceCallback;pdvateStringstatus;@CallbackpublicvoidsetRssServiceCallback(RssServiceCallbackrssServiceCallback){this.rssServiceCallBack=rssServiceCallback;}其中使用@Callback注解指出SCA运行时注入一个表示客户端回调接口的引用对象。在设计中,当调用服务端新闻列表成功或者出现异常失败后,可以将代表返回成功或失败的标记,以字符串的方式通过如下方法设置回调给客户端。本例假设以字符串success代表服务成功返回,以字符串exception表示服务端的调用出现异常。部分主要代码如下所示。publicvoidsetStatus(Stringstatus){this.status=status;rssServiceCallback.setCallback(status);)52中山大学硕士学位论文在调用A网站新闻服务的客户端,与6.2.2中所述一样,客户端的组件实现NewsClientlmpl,要实现回调接口RssServiceCallBack,并在回调方法中根据返回的回调信息进行相关处理,如根据回调返回的结果,相应设置NewsClientImpl中类的属性status的值。其余与6.2.2中所述代码是一样的,主要代码如下所示。publicclassNewsClientlmplimplementsNewsClient.RssServiceCallback{privateStringstatus;publicvoidsetCallback(Stringstatus){行(status.equals(”Success”)){this.setStatus(”success");)If(status.equals(”exception”)){this.setStatus(”exception“):’’为了让用户浏览包含调用A网站新闻列表服务的页面时,在等待新闻列表返回前可以先看到页面的其他部分,可以采用DWR(DirectWebRemoting)AJAX框架对页面的表现层进行加工处理。为了更好地实现系统分层,应该再划分出页面逻辑层,该层主要接收由NewsClientlmpl返回的结果,并且交由DWRAJAX框架进行处理。这样分层的优点在于不需要修改原来系统业务逻辑层的功能代码,并且页面部分只跟页面逻辑层交互,不会混杂复杂的业务逻辑判断代码,提高了系统的可扩展性。页面逻辑层设计中,设计接口RssFacade以及其实现RssFacadelmpl,其中在RssFacadelmpl中,通过SCA调用获得新闻列表的返回结果以及返回成功与否的标志,关键的方法代码如下所示。publicMapgetRss0tSCADomaindomain=SCADomain.newlnstance(”client.composite”):NewsComponentclient=domain.getService(NewsComponent。class,”NewsClienf。);53中山大学硕士学位论文Listall=client.RssList(5);Stringsuccess=client.getStatusO;this.setSuccess(success);Mapmap=newHashMaPO;行(success==“exceptiorl“)‘map.put(”SUCCESS",success);}else{map.put(”rss”。a11);map.put(”SUCCESS",success);)returnmap;)在上述代码中,首先通过SCA调用获得了返回的新闻列表以及是否成功返回的标志success,并将它们放置到HashMap中,方便DWR框架的页面调用。接着可以对DWR框架进行配置,DWR框架的最大优点在于可以利用Javascript代码直接调用远程的Java方法,如可以将Spring托管的类和方法暴露给Javascript代码,是一种RPC风格的A.础框架。配置文件如下。</create>其中使用标记指出要将Spring托管的RssFacadeImpl类中的方法暴露为可供Javascrpt调用,通过Javascript调用的方法为引用RssNews。最后,页面的Javascript代码如下所示。functionrss(){RssNews.getRss(showResult);lfunctionshowResult(data){document.getElementByld(”rsshtml”).innerHTML=。”;中山大学硕士学位论文document.getElementByld(“rSS”).style.display=”block”;伽果不能正确返回A网站的新闻列表if(data[”success”】=一exception”){document.getElementById(”rsshtml”).innerHTML=”对不起,网站维护中,请稍等”;}else{sir=”。;∥显示A网站返回的新闻列表for(vati=O;i”+data[”rSs”】【i】.title+”</a></li>。;’document.getElementByld(”rsshtml”).irmerHTML=str;,}在上述代码中,showResult(data)方法为回调方法,其中DWRAJAX框架通过调用RssFacadeImpl类返回新闻列表,返回的数据臣OHashMap存放在JSON格式的data中,最后通过Javascript把数据显示出来。6.2.4实现效果目前,在A网站的一些子网站或单独建立的信息系统中,如果有需要对主站的新闻进行调用,则通过上述方法,对封装好的SCA组件进行调用,大大提高了编辑的工作效率,同时让编辑能投入到更多的自主采编活动中。图6-3为A网站的子网站快乐购购物网站中,调用主站新闻SCA组件获得的新闻列表内容。55中m大学颢十学位论文首页时尚精晶特色推荐霞!●■■■■■■■■■●■■■■■■■●■■●●●●■●●●■一■■■■■■■■■■■■■■■■■■一·叠枣置改叠t矗研究所甘求精价上调已量必蟪·百重毕膏区溅帽赫蠢十名正工停工抗议·嚏慧罗彰●rt■名10年北豪户口I皂键连镑·机州飘车●事彳●名由准目院再■t黻不同·地性虹矗不孵气体三^亡砒气体乜末主教图6_3通过调用SCA新闻组件效果圈6.3使用SCh设计实现灵活的短信互动平台6.3.1系统设计目前.^网站建立了一个网上报料平台,提供了一个可以供广大网民网上提交El常碰到的突发事件、见闻和投诉的平台。随着竞争对手的进步,该报料甲台也暴露出不少问题。平台的运作流程目前是用户在网上提交报料信息,网站编辑首先通过审核,把符台条件的信息予以发布.同时。会选取具新闻价值的信息,通过F既IAIL或电话荨方式通知报纸相关版面的记者。由于记者职业的特殊性,往往很难经常访问网站的报料平台去逐一收集信息,而网站编辑又要用人工方式去定期通知记者,降低了工作效率。由于目前网站与第三方的短信服务提供商SP(ServiceProvider)签定了合作协议.并且A网站的短信运营平台一直都由该提供商提供,运行良好。囚此,从SOA的架构策略上看,可以考虑把目前的报科平台跟短信提供商的平台进行有机结合。当编辑选定有价值的用户报料短信后,可以在系统中直接提交到短信平台,短信平台可以把相关的提示信息,以手机短信提示的形式直接发送到报纸编辑的手机中.这样可以及时提醒记者去跟进相关的报料信息,既提高了网站编辑的工作效率,又能让记者及时把握到有新闻价值的信息。由于目前报料平台是使用PHP设计搭建的,而sP的短信发送平台是用基于中山大学硕士学位论文J2EE系统的,因此对于这种情况的异构系统整合,可以考虑使用SCA编程模型进行设计。如下图所示。图6—4SCA设计短信平台组件示意图要注意的是,由于SP所使用的短信平台是一个面向全国各内容提供商的平台,运行着上百类不同的应用项目,因此在设计中,应该把接收由报料平台提交的报料信息这个功能单独封装成一个组件,该组件并且以WebServices的形式绑定,报料平台只需要以调用这个组件,就可以把报料信息提交到短信发送平台。图6—4中,可以看到,SP短信平台为了满足不同客户对短信定制的发送要求,把对应的功能封装为不同的组件,这些组件的功能为接收来自客户端的请求,并进行适当的处理,在处理完毕后,再调用短信平台中真正发送短信的模块组件进行短信的发送。同理,为了充分利用合作方短信发送平台的优势,可以考虑在目前的一些主题为投票选举的网站系统中,加入如手机短信投票的功能。在设计上,同样是参照图6-4,用户使用手机短信发送要投票的序号信息,信息通过移动的网中山大学硕士学位论文关后再到达SP的短信接收系统,该系统会存储所接收的短信内容等详细信息,然后SP系统中的短信投票平台处理组件,会通过SCA编程模型中的引用,调用短信接收系统中所保存的短信信息,然后再通过SCA中的绑定,将其发布为WebServices,这样客户端如果需要获得实时的手机投票票数,则可以通过SCA引用该WebServices方式获得。6.3.2系统实现在SP短信系统为报料平台设计的SCA组件中,其中接收客户端的参数为报料标题,内容摘要,报料人姓名,联系方式,接受信息的记者手机号码。报料平台的编辑首先选择有新闻价值的报料信息,并点选“发送到记者手机",如图6-5所示。雳照2篓煮罨幺燃黔麓默纂堡塑翳皂黧照;土繁篓墨照曼慰黧巍乞级觞钒。搦%僦;⋯|m氟黛it《☆‘,、Ⅵ÷^_啪‰M《一,hi,t一÷々*÷i0‰?∞删%=‰Y*4嘶嚏%#,社》锩%州mn帆w嬲;g|骣“一≈甜一。盛?”≈8一一一搿嬲地㈣鸸≈班㈨赫蚴糌≈蛹鼬蝴僻删㈣*%∞‰维黼删∞%‰%%+所有{餮辩+已窜狠辩+豪审援瓣+琶撼理视臻+耒处嬲荔=糊鲤”:黼太箍袭黼涮∞l200卜O争约lI:l●:铷t糠授龋嗨锄细踟纠挣圆15:53:28啪搜略嘲魃魁瓞~~舞鬈⋯⋯⋯。一。il缮鬟饕曩蓊攀蔹j消撇)Hitdt窜瓣誉滚麓透銎宅者手娩锻捧l曩lj缸蔓玺敬酒覆嚣辜碳缓缛图6-5选择要发送到记者手机的报料信息接着,编辑适当编辑报料内容,并选择需要哪个部门的记者进行跟进,点提交按钮,系统通过调用SP短信提供商提供的SCA组件,将要发送的信息最后发送到记者的手机中。如下图所示。中山大学硕士学位论文+lti:l!tl瞪q+己审摄饕·来摹援辩+己处建规夔+宋魁理≈£须孑褥鬻篓馨盔热燕攫登筮塞发送曩逮鲞差垫生.i消费筘激鬻龟馕晒123—4567—8———————————————————————弋龟馕l终L————————ww______∞∞E*m_z*#%%z自_#___日#_∞∞≈z#※z_∞目目∞%%《自_______#__%__《目_女_%_∞∞a_*∞_自%■E_%_%自%__≈※_z_∞自∞__R蒯《lIl辔象警辩簿彩蝴0麟筵麓0鬟麓攀箨缎0笼方谴麓!辨嬲,_707蝴+彬,~舶毪黼端鞠糊榴%捌鼬翰‰峁鼍糍膨犍鳓渤地㈣并雹”靓僦捌蘩鳓鳓蜥∞《《n丽广]r1门r1■--------o_-o一’●●●--_-·--_--_图6-6编辑并提交发送信息到SP短信系统由于目前报料平台使用PHP语言进行设计,而目前PHPScA的实现方面,已经有PHPSCA开源项目(311进行了初步的实现,同样可以调用SP系统封装好的SCA组件。关键代码如下所示。,,引用PHPSCA实现的基础类包include‘SCA/SCA.php’:,,弓I用SP短信系统提供的wsdl文件$baoliao=SCA::getService(‘http://sp.com/baoliao.wsdl。):,,提交要发送的报料信息Sbaoliao->send($title。$content,$contacterStel,$depadment);6.4使用SCA设计实现灵活的电子商务系统6.4.1系统设计本文中的第三个案例项目是A网站属下的快乐购电子商务网站,它是一个时尚产品购物网站,成立至今两年,目前拥有会员10万。在当今互联网竞争日中山大学硕士学位论文趋激烈的情况下,网站如何更有效进行资源整合,发挥优势已成为急待解决的问题。在SOA的服务发现及设计方面,本文提出利益目标驱动设计方法。首先,由于SOA设计中必须涉及到服务,而服务必须是由利益目标驱动的。因此,在设计基于SOA的应用系统时,当涉及多个子系统或模块的整合时,不妨从利益目标方面,考虑服务组件设计的粒度,可以取得事半功倍的效果。在应用该方法时,首先可以列出各子系统中有相同或类似功能的模块,并且注明其用户,利益相关者,当前系统的优势及不足之处,以及用户对系统的愿景。然后分析这些子系统中,功能相似或接近的模块间如果进行了SOA整合而带来的商业价值利益。如果发现在商业价值利益上有可互补或合作的地方,则可以进一步标出这些功能模块之间的接口作进一步分析。因此,我们可以根据利益目标驱动的设计方法,考察A网站及其下的各类子网站或信息系统,也同时考察集团属下兄弟子公司的网站资源,以统一进行规划分析。首先,考察集团中兄弟公司的情况。目前,集团属下的报纸发行公司,有一个专门的读者俱乐部专题网站,该网站拥有独立的读者会员系统,凡是报纸的订户在注册确认后,都可以得到一个读者会员卡号。同时,注意到发行公司目前跟银行建立了伙伴合作关系,双方签定了协议,发行了银行信用专属卡,持卡用户除了享受普通信用卡的功能外,还可以享受如订报纸,指定商务优惠等折扣服务。发行公司网站目前的资源优势在于拥有了比较庞大的读者用户群,不足之处在于目前读者俱乐部的用户能享受到的各类优惠还是不太多。而快乐购网站本身的用户群需要进一步拓展,以吸引更多的用户进行网上购物,同时网站本身也需要大量的时尚潮流资讯以吸引用户浏览。在货品的到货发货方面,目前还只是靠传统的邮件通知以及用户登陆网站查看。综合上述分析,可以归纳出目前快乐购网站,A网站以及发行公司读者俱乐部网站之间的相似功能模块如下。●新闻发布系统●用户系统中山大学硕士学位论文其中,快乐购网站与发行公司读者俱乐部网站之间,可以实行一定的折扣互惠互利的策略,可以吸引来自读者俱乐部的庞大用户群。采取这一措施后,可以预计双方都能获得很大的商业利益。同时,将短信平台纳入整合的范围,可以考虑充分利用短信平台的功能,为客户提供发货或到货等个性化短信信息服务。根据上述分析,在SOA架构设计中的服务发现阶段,可以使用思维导向图来辅助设计,如下图所示。图6-7SOA业务分析导向图针对上图,新的业务方案设计如下。·吸引来自读者俱乐部的用户群假设某用户已经是读者俱乐部的用户,则在注册开心网网站时只要输入会员卡编号,通过验证,快乐购的网站会通过调用读者俱乐部网站以SCA封装好的组件,判断其输入的会员卡编号是否正确,如果输入正确,则可以同时获得该读者用户的相关信息,如订阅报纸的时长,可以在业务上考虑制定出相关的61中山大学硕士学位论文连带销售策略,如根据读者订阅报纸的时间长短给予在购物时的优惠折扣等。·与主网站的新闻发布系统的整合由于销售的是时尚精品系列的商品,因此网站中也需要与此相关的时尚类资讯,与6.1中论述的系统相类似,可以调用经过SCA包装好的A网站新闻发布系统组件,同样,快乐购网站本身新闻发布系统所发布的新闻,也可以使用SCA编程模型将其包装为SCA组件,从而被其他的信息系统引用。·与SP短信系统业务整合既然公司目前存在第三方SP短信平台,那么可以充分将其利用与目前网站进行整合,如可以将发货、缺货等信息通过SP短信系统发送到用户的手机中,能让用户及时了解目前的订单信息。·与银行的信用系统卡系统整合目前,由于发行公司的读者俱乐部网站跟银行有信用卡的合作业务,凡是加入读者俱乐部的用户,在申请该专属卡的时候,都可以获得更多的优惠。因此,可以考虑进行如下的设计:根据用户在注册时输入的读者俱乐部的卡号,调用银行的信用卡系统,从而得到用户的信用卡积分。最后,根据调用读者俱乐部SCA组件所得到用户订报时长,以及调用银行信用卡系统得到信用积分,可以根据两者综合考虑,制定一个优惠折扣。综合上述,该案例的SCA模型设计可以如下图所示。中山大学硕士学位论文图6-8使用SCA设计灵活的电子商务系统在图6-8中,当某读者俱乐部的用户在购物下订单时,会调用GetDiscount组件。该组件的作用为根据用户的读者会员卡编号,得出该会员应该享受的折扣优惠。在GetDiscount组件中,分别引用了组件GetSubscribe和组件Bank。其中,组件GetSubscribe由读者俱乐部网站提供,对外绑定发布为WebServices,其作用在于根据读者会员卡编号返回该用户订阅报纸的时长。同样,银行的信用卡系统封装了一个专门SCA组件Bank,该组件的功能在于根据用户输入的读者俱乐部的卡号,返回其用户的积分。当GetDiscount组件得到了用户的订报时长及用户的信用卡积分后,则可以根据预先制定的商业规则,返回用户应该享受的折扣优惠。而GetDiscount组件通过SCA的绑定绑定为WebServices,使得可以被其他业务系统灵活地调用。在该案例中,由于Spring跟SCA能无缝结合,原来使用Spring框架开发的购物网站,可以调用该SCA组件GetDiscount。由于银行信息系统的复杂性,在图6-8中,假设为了返回用户的信用卡积中山大学硕士学位论文分,必须先根据读者俱乐部的会员卡号,查询出用户申请的专属信用卡编号,然后再通过根据信用卡编号查询出用户的信用卡积分。其中,查询信用卡编号是通过组件GetCreditCard实现,该组件对外假设绑定为WebServices形式,而查询用户积分的功能由组件GetCredit提供,该组件对外绑定为RMI形式。则组件Bank同样以SCA中的引用方式,调用这两个组件,从而获得用户的信用卡积分。根据上图的设计,可以进一步看到SCA编程模型的优势。无论银行信用卡系统内部的各子系统使用不同的协议,如EJB,跚I,COBRA,JMS,WebServices等,都可以通过SCA编程模型进行引用连接。所有以SCA编程模型封装的组件都具有良好的可组合性,可扩展性,客户端对服务组件的调用将变得更简单,不需要理会服务组件的实现细节以及调用的细节。6.4.2系统实现根据6.4.1的设计中,首先设计用户注册步骤。用户在注册时,可以通过使用页面中“检测’’按钮提供的功能,检测用户名是否已经被注册,如果已经被注册,则系统使用AJAX技术中JSON框架,马上在当前页面显示提示用户信息。在旧有的设计方式中,对“注册时判断是否已经存在该用户一这个功能的设计往往停留在只针对本系统的层面上。如果运用SOb的架构方式去思考,应该把这个功能封装为组件,以供其他系统予以调用。假如考虑如下的情景:假设其他系统需要根据某用户输入的用户名,判断该用户是否为快乐购的注册用户,那么就可以重用该组件。有了SCA编程模型后,只需要编写好核心的判断用户是否存在的代码,通过SCA的绑定机制,可以既同时绑定为AJAXjsoN协议,又能绑定为WebServices,以供其他系统调用。其中,判断注册用户名是否存在的SEA组件设计如下。中m大学碰t学位论文</sewjce></component>与6.1中的原理相似,在UserExistComponent的SCA组件中,通过调用原来系统中判断用户是否存在的Spring组件实现该功能,同时。通过service标签,同时将该组件绑定为WebServices和JSONRPC。客户端进行如下调用。IsUserExistJSONgetMemberForNam“usemamevalue.showResult);其中showResult为AJAx的回调函数,用于显示提示信息,username.value为前端页面输入的用户名。注册页面如图6-9所示。l::蟛皇售皇ojg:咖■一≈{射饿{Ⅱ舳嘲嚏雌∞,口E蚰怖=j8tB.^挑S:t■:F月r女£B:固¨t“№ⅦBMf*fdn☆-●_::和■目:‘棘*iI.口吣■f●,●'图6-9注册界面同时,在用户注册环节中,要判断注册快乐购网站的用户是否同时为读者俱乐部用户。如果用户输入了正确的读者会员卡编号后,系统将通过调用由读者俱乐部封装好的SCA组件,判断该用户是否同时为读者俱乐部的用户,如果是来自读者俱乐部的用户.则在新增注册用广时设置数据库中相关表的标记,以方便今后判断所用。设计图6-9中的组件GetSubscribe时,考虑到由于判断用户是否读者俱乐部用户以及返回读者订阅晚报时间,这两个功能同扁于该组件提供的服务,囡中山大学硕士学位论文此针对组件GetSubscribe的接口设计如下。publicinterfaceIGetSubscribeI,服据会员卡号判断是否读者俱乐部用户publicbooleanIsReaderClub(Stdngidcard);,/根据会员卡号返回该用户订阅晚报的时长publicintGetSubscrible(Stringidcard);)对图6—9中组伺:GetCreditCard的接口设计如下:publicinterfaceIGetCreditCard{,,丰艮据读者会员卡编号,返回该读者对应很申请的信用卡号码publicStringGetCreditCard(Stringreadercardno);对图24中组件GetCredit接口的设计如下:publicinterfaceIGetCredit(){,,根据信用卡编号查找出该用户的积分publicintGetCredit(Stringcreditcardno);}其中,值得一提的是GetCredit组件以RMI形式绑定对外发布,如下所示</service></component>对于银行组件bank,通过引用机制分别调用GetCreditCard组件和GetCredit组件,得出最后的会员的积分。最后以WebServices的形式进行绑定。下面给出其装配模型文件示例。‘!一引用GetCredit组件,获得用户信用积分一></reference>中山大学硕士学位论文</component>.c!一将Bank组件对外发布为WebServices形式—》</binding.WS></service>最后,根据图6-9,我们设计GetDiscount组件。同样,GetDiscount组件分别引用了组件GetSubscribe和组件Bank返回的结果,并根据一定的商业规则,得出用户最后应该获得的折扣。为了让设计更符合SOA架构的思想,这里同样将组件绑定为WebServices,这样可以让其他系统方便重用。为了能让原来购物系统中的Spring封装的组件能访问GetDiscount组件,调用的时机可以设计为当用户每次登录快乐购网站后,就得到用户最新的优惠折扣率。下文指出在Spring编写的登陆控制器Logincontr01ler中,调用GetDiscount组件的关键代码。publicLoginControllerextendsSimpleFormController{privateGetDiscountgetdiscount;protectedModelAndViewonSubmit(HttpServletRequestrequest。HttpServletResponseresponse,Objectcommand。BindExceptionermm)throwsException{肼艮据用户的读者卡编号,得到该用户的折扣doublediscount=getdiscount.getdiscount(readerclubcardno);'@ReferencepublicvoidsetGetdiscount(GetDiscountgetdiscount){this.getdiscount2getdiscount;'在Spring容器中调用SCA组件,同样需要如上所示,引用reference标签,指出要被引用的SCA组件,同时在Spring的配置文件中,使用标签,指出要引用的SCA组件名称,如下所示。67中m大学厩十学位论文下图为当用户登录后,在下订单时,系统根据用户的折扣,计算出应付款.坐塑固!!塑!!堑!型!塑塑Ⅻ+函I’●EEa“∞-m¥霄mI圃圆6.5本章小结图6lO根据用户享受折扣计算付金额在本章中,以A网站目前在业务和IT系统上存在的问题入手,通过使用SOA的架构思想和方法进行分析,充分利用SCA编程模型的优势,在已经使用开源框架设计的系统基础上,对系统需要进行SOA整合的部分进行了改造。在系统设计中,使用SCA编程模型,并利用设计模式中的门面模式构造了服务层,客户端只需要跟服务层交互,即可实现对服务的调用与整合。SCA编程模型与语言。相关协议无关的优势,使得构造的SOA系统具有可插拔性,可扩展性。中山大学硕士学位论文第7章总结与展望本文主要研究了基于SCA编程模型下,如何运用SOA的相关的架构理论搭建符合SOA规范架构的企业应用系统。本文的主要工作成果有如下:1)研究了面向对象服务架构的基础理论,技术体系结构及相关特征。2)研究了SOA体系结构中重要的编程模型SCA的相关技术规范,分析了SCA在服务的应用集成方面的优势,论述了如何应用SCA进行服务集成的相关方法步骤。3)结合SCA编程模型的特点,提出了在构造基于SoA的应用系统时架构的分层模型,详细论述了如何使用SCA编程模型构建系统的服务层的方法。4)结合当前企业在实施SOA战略时遇到的问题,提出了一套适合中小企业进行SOA业务分析、架构分析、SOA策略分析的方法。5)通过A网站中一系列信息系统在实施SOA战略时遇到的问题为案例,详细讲解了如何运用SCA编程模型,结合原有的开源框架技术,对企业应用信息系统进行服务整合。本文提出了使用SCA充当SOA分层模型中服务层的观点,并通过利用SCA对A网站一系列信息系统的服务整合,大大改善了原有系统的业务流程,达到预期的目标。SOA体系结构十分庞大,发展迅速,由于个人精力所限还不能继续对该其进行更深入的研究,今后可改善的部分还比较多,比如在实践中,可以进一步考虑研究SCA如何跟BPEL、OSGI、EJB、邮等技术相结合。当前,面向服务组件架构被誉为继面向组件的体系结构后的又一个里程碑,发展相当迅速,各大IT厂商和国际组织都投入了大量的人力物力进行相关研究。其中,基于SOA的体系结构下,有不少的相关标准、开发模式、编程模型及开发工具,而目前最被广泛认可的就是SCA,ESB以及BPEL,它们三者是当前SOA体系中的重要组成部分。在SCA编程模型的标准方面,今后随着各大IT厂商及组织的大力推广,以及相关更多标准规范文件的出台,SCA的发展将会变得更趋成熟,相信今后将会能成为开发SOA应用中的首选编程模型。中山大学硕士学位论文参考文献[1]王恩德.构造SOA实现架构变迁.软件世界,2006,5:60[2]毛新生,金戈,黄若波,易立.SOA原理方法实践.北京:电子工业出版社,2007[3]中国电子技术标准化研究所.SOA用户指南.北京:电子工业出版社,2008[4]楠文.EAI-是挑战也是机遇.通信世界,2004,(23):12[5]Versata.WhitePaper,UnderstandingServiceOrientedArchitecture.http://searehwebserviees.bitpipe.eom/detail/RES/1098984949_119.html,2004,10[6]DickMcCarric.面向服务的体系结构.http://www.ibm.com/developerworks/cn/workplace/soa/index.html,2006,2[7]Service-architecture.Service—orientedarchitecture(SoA)definition.http://www.service-architecture.com/web—services/articles/service—orientedarchitecturesoadefinition.html.2006[8]叶社,应时,李伟斋,张韬.面向服务体系结构及其系统构建研究.计算机应用研究,2005,22(2):32—34.[9]ThomasErl.Serviee--orientedArchitecture.PRENTICEHALLPTR,2004:48-87.[10]HeatherKreger,IBMSoftwareGroup.WebServicesConceptualArchitecture.http://www.ibntcom/developerworks/webservices/ws-wsca/partl/,2001,5[11]W3C.org,ExtensibleMarkupLanguage(KML)1.0(FifthEdition),http://www.w3.org/TR/xml/,2008[12]张玲,马范授.EAI在企业关键业务数据集成中的应用.计算机工程.2004,30(12):460—461[13]W3C.org.SOAPVersion1.2.http://www.w3.org/TR/soapl2一partO/,2007[14]柴晓路.WebServices技术,架构和应用.北京:电子工业出版社,2003.[15]w3c.org.WSDL1.1。http://WWW.W3.ORG/TR/wsdl,2001[16]相鹏,段友翔.企业服务总线(ESB)一企业集成关键技术初探.信息技术与信息化,2006,6中山大学硕士学位论文[17]JasonBloomberg.TheroleoftheService-OrientedArchitecture.http://www.ibneorn/developerworks/rational/library/content/RationalEdge/may03/bloomberg.pdf[18]IBM,ServiceComponentArchitecture.http://www.ibm.com/developerworks/webservices/library/specification/WS—sca/,2006[19]0soA.ServiceComponentArchitectureSpecifications.http://www.osoa:org/display/Main/Service+Component+Architecture+Specifications.2007[20]王紫瑶,南俊杰.SOA核心技术原理.北京:电子工业出版社,2008:70[21]ApacheTuscany.SCAJavaDocumentation,http://tuscany.apache.org/java-sca-documentation-menu.html,2008[22]OSOA.SCASpringComponentImplementationV1.00,http://www.osoa.org/download/attachments/35/SCA_SpringComponentImplementationSpecification—V100.pdf?version=l,2007[23]张俊青,李嘉涛.在SCAModule中使用Hibernate框架实现数据持久层,http://www.ib儿com/developerworks/cn/webservices/06121ijt/,2007[24]Dr.JimWebber.DemystifyingService-OrientedArchitecture,http://soa.sys—con.com/node/39908,2003[25]EGamma,RHelm,RJohnson.设计模式:可复用面向对象软件的基础.北京:机械工业出版社,2000.[26]Oasis.WebServicesBusinessProcessExecutionLanguageVersion2.0。http://docs.oasis—open.org/wsbpel/2.O/wsbpel—v2.0.html[27]彭辉.服务颗粒度的困扰.信息系统工程.2007,11:19[28]金戈,姚辉,赵勇,谭佳.SOA快速指南第2部分:服务建模,http://栅.ibm.com/developerworks/cn/webservices/06lOjingge/index2.html,2006[29]单建洪,卢中延.SOA整合之道.北京:电子工业出版社,2008:10[30]AlejandroAbdelnur,PatrickChanezon.RomeDocumentation.http://wiki.java.net/bin/view/Javawsxml/Rome,2009中山大学硕士学位论文[31]ThomasFoster.PHPSOAGettingStarted.http://硼w.OS08.org/display/PHP/Getting+Started,2007中山大学硕士学位论文致谢完成本论文,首先要感谢我的导师汤庸教授,汤老师严谨的治学态度和一丝不苟的精神,鼓励了我的学习。从开题、撰写到最终的评审,汤老师都给了我很大的指导和支持,使我得以顺利地完成论文的写作。其次,我要感谢软件学院的所有任课老师,他们兢兢业业地教学,提高了我的理论知识水平和实践能力,使我有开阔的视野完成论文的写作。由于SCA的发展和研究还处于初级阶段,相关的资源比较少,在论文的写作过程中,我得到了不少同行的帮助和指导,我要感谢IBM中国SOA实验室的王紫瑶、南俊杰、赵雄伟工程师,HP中国研发部的架构师朱振兴,以及TuscanySCA项目的负责人RaymondFeng,他们给予我很多SOA方面的理论和技术上的指导。另外,我还要感谢我的家人,是他们的关怀、理解和鼓励,使得我顺利完成了论文的写作。最后,衷心感谢在百忙之中评阅论文和参与答辩的各位专家、教授。基于SCA的SOA架构研究与实现 作者: 廖煜嵘 学位授予单位: 中山大学 相似文献(4条) 1.学位论文 何一昕 SOA环境下分布式事务处理的研究 2009 SOA是当前流行的软件技术架构,通过建立可重组的服务体系,可使系统之间保持一种松散耦合的特性,这种特性使得异构系统之间的交互成为可能 。SOA可以提高应用开发效率,缩短开发周期,对于企业整合有着深远的意义。而事务几乎是所有业务交互的必要部分,建立在服务基础之上的业务流程 同样需要保持某种程度的一致性,因而事务支持是SOA实施过程中不可缺少的基础设施。这种能够在多个数据服务当中提供一致性的能力在客户将核心业 务流程向SOA转移的时候显得尤为重要。由于SOA系统高度异构,服务之间松散耦合、无状态、业务流程往往运行时间长、跨度广的特点,使得在面向服 务体系架构中实现事务特性变得十分复杂。传统的分布式事务模型为了保持严格的ACID特性而需要在提交之前对资源锁定,这在SOA环境下是不现实的。 随着Web服务技术的发展,人们提出了一些扩展事务模型和Web服务事务处理模型,通过放宽对事务特性的限制来满足Web服务下的一些事务需求,但仍然 没法全面满足SOA环境下的事务处理。对于SOA环境下的事务问题,目前还没有一种被广泛采用的事务处理模型。 本文通过研究WS-Transaction标准(该标准定义了一种可扩展的事务服务协同框架)和已提出的分布式事务模型及其扩展模型,对其进行改进以符合 SOA环境下业务流程特点的事务模型,并以该模型为原型设计一个基于SOA架构的事务处理组件,该组件能通过可插拔的方式集成不同的事务提交协议 ,并能实现在SOA环境下不同类型的事务处理。最后通过功能测试验证了该组件的有效性。 2.学位论文 朱金生 面向服务的企业应用研究与实现 2005 面向服务的体系结构因其固有的松散耦合与互操作性,成为许多企业应用的自然选择,而Web服务是当前实现面向服务体系结构非常优秀的技术,同 时作为构架企业级系统的J2EE组件技术又对Web服务提供了非常好的支持。这样,使用J2EE1.4提供的Web服务功能可以很容易地构建能够访问现有业务流 程的SOA系统。 论文首先介绍了面向服务体系架构的结构特征,并对Web服务和WebServiceforJ2EE规范等相关技术进行了介绍和分析。 然后根据目前企业应用存在的问题和业务需求,比较了面向组件与面向服务的不同之处;在分析了面向服务体系结构特征和实现技术基础上,分析 设计了基于J2EE实现SOA/Web服务的企业级系统的架构,并对这种架构下的关键组件进行了描述。 根据上述的分析,论文接着设计实现了基于SOA/Web服务的陕西省电子运维管理系统,其中包括客户端、业务服务、注册中心、安全性控制。 接下来总结了目前技术条件下这种架构在企业应用中的优缺点,同时,简单分析了SOA的发展前景。 最后,进行全文总结与展望。 3.期刊论文 陈伟.康建初.CHEN WEI.KANG JIANCHU 面向电信运营的策略管理系统研究与实现 -微计算机信息 2008,24(6) 目前,电信运营商正采用面向服务体系架构(SOA)技术对大规模分布式的运营支撑系统进行集成.采用基于策略的管理技术将复杂多变的业务规则进行 统一有效管理,可进一步增强SOA系统的灵活性和稳定性,同时提高运营管理的自动化水平.该文分析了SOA和策略管理的关系,提出了一个面向电信运营的 分布式策略管理系统,并对策略管理系统的体系结构和主要功能模块进行了实现.通过在实际的电信业务流程中的应用,验证了本策略管理系统的实用性. 4.学位论文 高哲 基于SOA软件架构的研究与应用 2007 面向对象和基于构件开发被认为是提高软件系统特别是分布式系统开发效率和质量的有效途径。然而,随着软件技术的发展,尤其是Web服务的出现 ,称为面向服务的新的软件系统开发方法被提出并得到迅速发展。如果说Web服务是树,那么面向服务体系架构就是森林。它将使创建、开发部署应用系 统的方式发生改变,是解决企业当前错综复杂的IT环境和解决方案的一剂良方。 但是目前大多数对Web服务的研究仍集中在Web服务标准的拓展、Web服务在点到点集成中的应用、Web服务开发工具等方面,对如何基于Web Services的SOA架构设计方法方面的研究还缺乏关注。 论文从SOA架构和Web Services技术理论知识入手,阐述了两者间的关系,以湖北省学籍管理系统的研究开发为背景,研究了面向服务的软件开发的 体系结构、原理和方法。首先提出了适应层次划分思想的面向服务软件开发的体系结构,阐述相应的设计模式;进而结合实例深入讨论了系统分析、设 计和实现;最后对于系统中所应用的关键技术进行了详细的分析。其中,主要阐述了用WebServices实现SOA的详细方法及相关技术。 概括起来,文中的研究关注于三个方面: (1)SOA体系结构的研究和应用(2)基于Web Services的SOA系统应用架构的设计(3)Web服务的调用与组装在这些基本理论的指导下,论文结合经典的 面向对象的分析与设计方法fOOAD)和传统的软件体系结构的分层思想,在实践的基础上构建了基于SOA的应用开发的模型体系结构,该模型共分为五层 :表示层、业务外观层、业务逻辑层、数据访问层和数据层。 论文最后,结合湖北省学籍管理系统实例,根据该系统自身的特点,在.NET开发平台下,实践了基于SOA的应用开发。 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1477578.aspx 授权使用:哈尔滨工业大学(hebgydx),授权号:d34672d3-6ba0-4a02-9f14-9de80022366a 下载时间:2010年9月5日

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档