SOA原理、实现和应用_第1页
SOA原理、实现和应用_第2页
SOA原理、实现和应用_第3页
SOA原理、实现和应用_第4页
SOA原理、实现和应用_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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.1

SOA基本原理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=“http///soap-encoding/”><!—SOAP消息头--><soapEnv::Header><m:reservationxmlns:m=/reservationsoapEnv:role=/soap-envlope/role/text><m:reference>uuid:00909090-ewew-ewew-rrrd-dddo-dscfw23124221</m:reference></m:reservation><n:passengerxmlns:m=/reservationsoapEnv: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=http://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”><soapenv:Envelopexmlns:soapenv=/soap/envelope/ xmlns:xsd=/2001/XMLSchema 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=/soap/http/><wsdl:operationname=“getStock”><wdlsoap:operationsoapAction=“”><wsdl:inputname=“getStockReuest”><wsdlsoap:bodyuse=“encoded” encodingStyle=/soap/encodingnamespace=http://testservice/></wsdl:input><wsdl:outputname=“getStockResponse”><wsdlsoap:bodyuse=“encoded” encodingStyle=/soap/encodingnamespace=“http://localhost:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论