




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SOA原理、实现方法与应用ServiceOrientedArchitecture
主要内容1
SOA的产生过程1
SOA的基本原理21
SOA的实现方法3
SOA的一种实现—WebService41
SOA在MapGIS中的体现51.1
SOA的定义
SOA的提出SOA的概念最早是由Gartner于1996年提出的。由于SOA在系统结构和软件开发中带来了很多的优势,后来IBM、MS、BEA、Oracle在内的全球著名IT公司参加了定义、实现和推广SOA的行列。使得SOA得到了快速的开展。SOA的概念SOA是一种基于效劳来组织计算资源,具有松耦合和间接寻址能力的软件体系结构。
SOA是一种体系结构,也是一种软件开发模型。1.2SOA与分布式体系结构SOA作为一种体系结构,已经被各种分布式系统开发所采用。下面通过分布式系统的开展来说明SOA体系结构的产生:分布式系统经历了:主机系统“客户/效劳器”两层结构“客户/应用效劳器/资源效劳器”三层结构多层体系结构一般信息系统的分层体系结构用户表示层应用逻辑层资源管理层信息系统UI利用数据库、文件系统管理资源应用逻辑实现系统功能主机分布式体系结构1、系统组成耦合紧密2、客户功能单一3、没有外部系统的接口两层分布式体系结构1、客户、效劳器之间的耦合紧密n-12、效劳器成为处理瓶颈3、更新代价高三层分布式体系结构1、浏览器和应用效劳器是松耦合的。2、应用效劳器和资源效劳器是松耦合的。3、应用逻辑层可以部署在效劳器集群上。4、表示层和应用逻辑层是紧耦合的,使得同一个表示层不能访问不同平台的应用逻辑。
四层分布式体系架构克服了三层结构中:表示层和应用逻辑层紧耦合把应用逻辑层封装成Web效劳,这样表示层和应用逻辑层就能实现松耦合。1.3SOA和软件开发SOA是一种软件开发模型,本质上是一种组件模型。软件开发模型经历了:命令式软件开发方法面向对象的软件开发方法面向构件的软件开发方法面向效劳的软件开发方法命令式软件开发方法
命令式编程是对VonNeumann式计算机执行顺序的直接抽象。
过程只是对功能的抽象,因此只能片面地反映事物的性质。面向对象软件开发方法面向对象的三个特点:1)继承性2)封装性3)多态性面向对象软件开发方法面向对象的复用机制是通过继承实现过的,所以难以形成可复用的软件模块面向对象的封装是对事物的抽象,因封装的粒度小,所以难以构成大的可复用的模块。总之,面向对象封装粒度小,难以形成大的可复用的模块。它的复用性主要表达在代码级,模块复用性差。面向构件软件开发方法面向构件是对象技术的延伸和开展,构件和对象技术都是对现实世界的抽象,都具有封装性,都已接口的方式被外界访问。构件和对象具有以下区别:抽象视角不同。对象是对客观世界的根本实体的抽象,强调现实世界和实体的对应以及实体的建模。构件是对客观世界的实体或者实体联合能提供的功能的和效劳的建模。可复用程度和复用机制不同
和对象相比,构件更强调可复用性。面向对象实现可复用是通过继承实现的,但继承并不是实现复用的一种很好的方法,因为继承使得子类对父类产生了很强的依赖性。构件实现可复用性是通过构件的包容和聚合机制实现的。实现了复用者和被复用者的松耦合。粒度不同
构件的封装粒度一般大于对象的封装粒度。面向构件的软件开发方法“局限性”:现有的构件技术,都是和具体的OS平台相关的,这样构件的生产者和构件的使用者就有严格的要求,即构件使用者和构建的生产者是紧耦合的。构件技术是可以产生可复用的软件模块的,但这只是说当用构件技术“从零开始”进行开发时才是这样的,面向构件技术无法复用已有的、用不同技术开发的软件模块,既不能把已有的“遗留系统”进行“构件化”。面向效劳软件开发方法面向效劳的软件开发方法是构件技术在分布式环境下〔特别是在Internet环境下〕的延伸和开展。面向效劳的软件开发具有不同于构件的新特点:开放性----遵循开放的标准自描述性----效劳的调用者只需要效劳的描述信息就可以完全掌握效劳的所用信息,包括调用方法实现无关性----效劳的消费者无需知道效劳的实现语言和和实现平台封装的粒度大于构件从软件开发方法的角度来看SOA技术的开展。软件开发技术的开展是不断加大软件模块的封装粒度,从而使得软件模块间的耦合度减少。SOA的产生是为了适应分布式环境〔特别是Internet环境〕需求的又一种软件开发方式。2.1SOA根本原理SOA原理概述SOA是一种效劳导向的组件模型。效劳是指软件中的一些处理过程或是服装成独立业务模块的程序逻辑单元,可以通过标准协议通过网络来访问和调用,而且接口公开。效劳提供者开发出各种有用的效劳,经过严格测试后把效劳发布到公共的效劳注册表上,效劳消费者通过查找效劳注册表查找到所需要的效劳,然后就可以使用所需要的效劳了。SOA框架组成局部SOA结构有三局部组成:1、效劳提供者2、效劳注册中心3、效劳消费者效劳提供者效劳提供者效劳提供者是一个可以通过网络寻址的实体,它接收和执行消费者的请求。把自己的效劳注册到效劳注册中心,以便效劳消费者能够发现和访问该效劳。它主要完成以下功能:1)定义可提供的效劳功能2)设计并实现这些功能3)用WSDL描述这些效劳,并用UDDI在效劳注册中心发布WSDL文档效劳注册中心效劳注册中心效劳注册中心是包含可用效劳的网络可寻址目录,它是接受并存储效劳描述的实体,供效劳消费者查询效劳只用,效劳提供者将效劳的描述信息发布到效劳注册中心。效劳的信息包括与该效劳交互的所有所有内容,如网络位置、传输协议和消息格式等。它主要完成以下功能:1)增加、删除和修改已经发布的效劳的效劳信息。2)按照用户的请求从注册表中查询效劳数据。效劳消费者效劳消费者效劳消费者可以是:一个应用程序、需要一个效劳的另外一个效劳或者一个软件模块。它从注册中心查询需要的效劳,并通过传输机制绑定效劳,然后通过接口契约规定的格式来执行效劳。它主要完成以下功能:1)发现提供效劳的WSDL文档,通常通过访问效劳注册表来实现。2)在WSDL的根底上,通过SOAP协议来与要访问的效劳通信。2.1SOA的特征SOA是一种粗粒度、松耦合的软件架构,效劳之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。这种模型具有以下的特征:1)松散耦合2)粗粒度效劳3)标准化的接口4)无状态的效劳松散耦合和粗粒度从软件开发和系统结构的角度来看,SOA是耦合度最低的一种实现方法。效劳的请求者和提供者时间是松耦合的,即效劳请求者不必关心效劳的具体实现细节,如程序实现语言,部署平台等。这样的松散耦合是通过“效劳描述”实现的。1)效劳的接口是通过标准的方式进行描述。2)效劳的请求者通过消息的方式,而不是通过API和文件格式请求效劳。标准化的接口和无状态效劳SOA通过效劳接口的标准化描述,而接口是通过标准的方式进行描述的,从而使得该效劳可以提供给在任何异构平台和任何用户接口使用。该接口隐藏了实现效劳的细节,允许独立于实现效劳基于的硬件或软件平台和编写效劳所用的编程语言使用效劳。效劳应该独立的、自包含的。在实现时它不需要从一个请求到另一个请求的信息或状态。效劳不依赖于其他效劳的上下文和状态。3.1SOA的实现技术1
CORBA组件实现方法1
DCOM组件实现方法21
远程方法调用(RMI)实现方法3
WebService组件实现方法41
Jini组件实现方法53.1
CORBA组件实现方法3.2DCOM组件实现方法3.2远程方法调用(RMI)实现方法即JavaRMI〔JavaRemoteMethodInvocation〕是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程效劳器上的对象。远程方法调用特性使Java编程人员能够在网络环境中分布操作。4.1SOA的一种实现—WebServiceWeb效劳是构架早XML和Internet技术上的分布式计算技术,其目的是利用已经管饭使用的Internet协议在分布节点之间传递称为消息的XML文档。Web效劳是有URL标识的软件应用,其接口和绑定可以通过XML来定义和描述并且可以被发现,与其他软件通过基于Internet的协议以XML消息交换的方式直接交互。Web效劳的关键技术从上面对Web效劳的描述可以看出Web效劳由三项关键技术构成:通信:Web效劳需要一种能基于Internet协议〔如HTTP、SMTP和FTP等〕互相传递XML消息的通信协议标准。描述:Web效劳的接口和绑定需要用一种基于XML的语言来描述和定义。发现和发布:Web效劳消费者可以通过中介发现Web效劳,而Web效劳的元信息也需要发布到中介上。4.2Web效劳的体系结构Web效劳的标准传输标准:Web效劳可以利用多种网络协议实现XML消息的传输。Web效劳可以利用HTTP〔GET/PUT/POST/DELETE〕、FTP、SMTP、CORBA的IIP和Java的JMS等协议。消息标准:Web效劳之间的通信是通过传递SOAP协议的XML消息实现的。描述标准:用WSDL语言可以描述Web效劳。描述包括一系列操作的名称及其输入,输出参数、出错信息和接口的绑定。发布和发现标准:UDDI是主流的Web效劳注册中心标准消息扩展标准:在SOAP提供根本的传输根底上,可以扩展SOAP消息的头结构。4.3Web效劳的通信通信模式通信实现方式同步通信方式RPCORPCDCOMCORBA的IIP异步通信方式消息队列消息代理SOAP协议信封:SOAP消息的根元素,包含一个SOAPHeader和一个SOAPBody消息头:可选,包括平安性、事务处理等消息体:必选,代表消息的实际负载。由两种风格:RPC风格和文档风格。<?xmlversion=“1.0”encoding=“UTF-8”><soapEnv:Envelopexmlns:soapenv=:///soap-envelope/ soapEnv:encodingStyle=“///soap-encoding/”><!—SOAP消息头--><soapEnv::Header>soapEnv:role=:///soap-envlope/role/text><m:reference>uuid:00909090-ewew-ewew-rrrd-dddo-dscfw23124221</m:reference></m:reservation>soapEnv:role=:///soap-envlope/role/text><m:name>Happy</m:name></m:passenger></soapEnv::Header><!—SOAP消息体--><soapenv:Body><m:GetOrderStatussoapenv:encodingStyle=“:///encoding/”><status>underprocessing</status></GetOrderStatus></soapenv:Body></soapenv:Envelope>一个SOAP协议的结构根本SOAP消息体系结构首先Web效劳客户端到效劳中心发现感兴趣的效劳,然后从效劳提供者处得到效劳的描述WSDL文档。一旦得到了WSDL文档,Web客户端就可以获得了Web效劳的相关信息:效劳提供的接口、接口地址、接口访问方式。SOAP效劳器会对SOAP请求进行解析,调用相应的方法。SOAP解析器SOAP和HTTP的绑定
SOAP消息可以和各种网络协议进行绑定,因此SOAP和HTTP的绑定是可选的,但是由于所有的OS都支持HTTP,所以所有的SOAP实现方案都支持HTTP的绑定。SOAP协议例如Packagewaremanagerproject;Packageorg.apache.axix.client.Call;Importorg.apache.axis.client.Service;Importorg.apache.axis.encoding.XmlType;PublicclassWareManageClient{PublicWareManageClient(){}Publicstaticvoidmain(String[]args)throwsExeception{try{ Stringendpoint=://8080/axis/service/WareManage; Stringmethod=“getStocks”; Serviceservice=newService(); Callcall=(Call)service.Create(); Call.setTargetEndpointAddress(new.URL(endpoint)); Call.setOperationName(method); call.setProperty(Call.NAMESPACE,“urn:wareManage”); call.addParameter(“ID”,XMLType.XSD_STRING,ParameterMode.IN); Call.setReturnType(XML_TYPE,SOAP_INT); StringID=“00002”; Integerresponse=(Integer)call.invoke(newObject[]{ID}); System.out.println(“Gotresult:”+response); } Catch(Execeptione) { System.out.println(e);}}}POST/WareManageHttp/1.0Connect-Type:text/xml;charset=utf-8Accept:application/soap+xml,application/dime,multipart/releted,text/*User-Agent:Axis/1.1RC2Host:127.0,0,1:8080Cache-Control:no-cachePragma:no-cacheSOAPAction:””Content-Length:402<?xmlversion=“1.0”encoding=“UTF-8”> xmlns:xsi=:///2001/XMLSchema-instance><soapenv:Body><getStockssoapenv:encodingStyle=“:///soap/encoding/”><IDxsi:Type=“xsd:string”>00002</ID></getStocks></soapenv:Body></soapenv:Envelope>4.4Web效劳的描述现有的接口描述方法都采用IDL,IDL是独立于实现语言、实现平台的。Web效劳使用WSDL描述效劳。WSDL和IDL的联系和区别:1)WSDL和传统的中间件描述语言IDL在功能上有重合之处:二者都描述了效劳或构件的调用接口。但是由于Web效劳所处的分布式环境更加复杂,所以WSDL和IDL有以下区别:2)WSDL需要定义访问Web效劳的机制,IDL和具体的平台相关联。3)WSDL需要描述Web效劳的有效访问位置。WSDL的结构WSDL的根本表示形式<definitionsname=serviceNametargetNamespace=:///math/Xmlns=:///wsdl/><!—抽象描述局部--><type>…</type><message>…</message><portType>…</portType><!—具体描述局部--><binding>…</binding><service>…</service></definitions>WSDL文档有一个根元素definitions。根元素包含Types、Messages、portType、binding和Service元素。用WSDL描述效劳的实例//库存管理效劳端Java类PublicclassWareManage{PublicWareManage(){}PublicintgetStocks(StringID){intiStock=0;//gettheStocksfromtheDB…returniStocks;}PublicintchangeStocks(StringID,intamount,intchgType){intiStocks=getStocks(ID);if(chgType==0)iStocks-=amount;elseiStocks+=amount;//writestocksintoDB;…returniStocks;}}WSDL的消息定义<!—消息定义--><wsdl:messagename=“getStockRequest”><wsdl:partname=“ID”type=“soapenc::string”/></wsdl:message><wsdl:messagename=“changeStockResponse”><wsdl:partname=“changeStockReturn”type=“xsd::int”/></wsdl:message><wsdl:messagename=“changeStockRequest”><wsdl:partname=“ID”type=“soapenc::string”/><wsdl:partname=“amount”type=“xsd::int”/><wsdl:partname=“chgType”type=“xsd::int”/></wsdl:message><wsdl:messagename=“getStockResponse”><wsdl:partname=“getStockReturn”type=“xsd::int”/></wsdl:message>WSDL的端口类型定义<!—端口类型定义--><wsdl:portTypename=“WareManage”><wsdl:operationname=“getStock”parameterOrder=“ID”><wsdl:inputname=“getStockReuest” message=“impl:getStockRequest”/> <wsdl:outputname=“getStockResponse” message=“impl:getStockResponse”/></wsdl:operation><wsdl:operationname=“changeStock”parameterOrder=“IDamountchgType”><wsdl:inputname=“changeStockReuest” message=“impl:changeStockRequest”/> <wsdl:outputname=“changeStockResponse” message=“impl:changeStockResponse”/></wsdl:operation></wsdl:portType>WSDL的绑定定义<!—绑定定义--><wsdl:bindingname=“WareManageSoapBinding”type=“impl:WareMange”><wsdlsoap:bindingstyle=“rpc”transport=/><wsdl:operationname=“getStock”><wdlsoap:operationsoapAction=“”><wsdl:inputname=“getStockReuest”><wsdlsoap:bodyuse=“encoded” encodingStyle=namespace=://testservice/></wsdl:input><wsdl:outputname=“getStockResponse”><wsdlsoap:bodyuse=“encoded” encodingStyle=namespace=“://localhost:808
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 清淤修补 施工方案
- 新型挡水坝施工方案
- 无线施工方案
- 工程外线施工方案
- 房梁圆弧处理施工方案
- 2025年度高端办公室租赁服务合同
- 2025年度知识产权质押贷款合同民间借贷法律规定及操作指南
- 二零二五年度专利信息检索与专利布局合作协议
- 2025年度股东投资退出机制对赌协议书
- 二零二五年度沿街房屋租赁合同(含物业管理服务)
- 精品污水处理厂工程重难点分析及应对措施
- 《我爱你汉字》PPT课件
- 审核评估报告(课堂PPT)
- 后张法预应力空心板梁施工方案
- 《房屋面积测算技术规程》DGJ32TJ131-2022
- 浙江省金衢六校联盟2021-2022学年高二上学期期末联考试题 英语 Word版含答案
- 草莓采摘机器人机械结构设计
- 陈情表原文及翻译
- 品茗安全计算软件新手入门教程1梁模板扣件式
- 预应力空心板吊装专项施工方案
- 印刷生产日报表
评论
0/150
提交评论