面向服务的计算和web数据管理第8章-通过组合进行面向服软件开发课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《面向服务的计算和web数据管理第8章-通过组合进行面向服软件开发课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 服务 计算 web 数据管理 通过 组合 进行 服软 开发 课件
- 资源描述:
-
1、1 1第8章 通过组合进行面向服务软件开发 8.1 组合语言概述组合语言概述 8.2 BPEL 8.3 无状态与有状态无状态与有状态Web服务服务8.4 支持支持BPEL组合的框架组合的框架 8.5 Mashup用于用于Web应用的组合应用的组合 8.6 其他组合语言其他组合语言 8.7 讨论讨论2 2本章重点讨论利用互联网上可用的远程Web服务,通过不同组合语言构建应用。我们将关注BPEL(业务流程执行语言),并简要介绍其他的企业软件组合语言。在第9章,我们将详细讨论VPL(可视化编程语言),在第14章,我们将研究基础设施即服务、平台即服务、软件即服务的云计算技术。3 3面向服务计算是一个范
2、型,它包含了概念、方法和能够实现这些概念和方法的技术。图8.1显示了这些技术以及他们如何被组织在一个立方体中的。前面显示了实现功能的技术,而确保可信属性或服务质量的技术则位于功能技术的后面。我们使用术语“服务质量”表示用户角度的质量保证技术,而同样的技术,从设计师的角度,我们则使用术语“可信属性”。8.1 组合语言概述组合语言概述4 4图8.1 实现SOC技术的组织5 5图8.2 支持功能的SOC技术实例6 6第3章和第5章讨论了如何用C#和.Net框架构建一个基于远程Web服务的应用。C#是一种强大的编程语言,使用这样的语言和开发框架,需要娴熟的编程功底。SOC的目标之一是将应用构建与程序编
3、写相分离,这样应用构建者不必是专业的程序员,而程序员也不必是业务领域专家。为了实现这一目的,提出了许多应用构建或组合语言,如图8.3所示。本章将介绍几种组合语言和工具。7 7图8.3 组合语言和工具的演变8 8根据协调风格,组合语言可分为两大类:编排和共同设计。编排:一个中央过程,它本身可以是一个服务,控制参与的服务并协调不同操作的执行。在这种分割下,参与的服务只与应用的中央过程通信。这对于使用独立服务的私有业务过程是有用的。共同设计:没中央协调者。每个参与的服务都可以与应用中的多个合作伙伴通信。这对于涉及分布式服务协同设计的公有业务过程是有用的。图8.4是一个例子,说明了编排和共同设计的风格
4、差异。假定某商店需要发送一个对象给一家银行,然而,该对象需要转换为银行可以阅读的格式。因此,商店使用格式转换服务。9 9图8.4 显示编排和共同设计之间不同的例子10 10编排:商店被看做是中央过程,商店发送对象给格式转换服务,由它进行格式转换。服务必须将转换后的数据发送回商店。然后,商店将数据直接发送至银行。如果商店不希望转换服务知道数据的去向,那么这种风格是合适的。共同设计:商店将对象以及银行地址发送给转换服务,并告诉转换服务将转换后的数据发至银行。显然,这是将获取数据送至银行的一种更高效的方法。如果转换服务是商店信赖的服务,那么这种风格是合适的。11 11命令式、面向对象以及面向服务的计
5、算代表着不同的软件开发方法。人们可以使用面向对象的编程语言编写命令式程序。不过,最好是使用为支持特定计算而设计的语言。同样,应用组合的协作风格可以用任何组合语言实现。然而,语言设计者通过实现特定的机制来支持特定的协作风格,因此最好是选择为某种协作风格而设计的语言。表8.1列出了专门设计的以支持编排或共同设计的组合语言。12 12表8.1 编排和共同设计的组合方法13 13BPEL(业务流程执行语言)是使用最为广泛的组合语言,它得到面向服务软件开发的大多数参与者的支持。8.2 BPEL14 148.2.1 BPEL活动和结构活动和结构BPEL用来编写可执行的业务过程。BPEL包含一组活动和结构,
6、类似于典型的程序语言中的活动和结构,如表8.2所示。15 15表8.2 BPEL活动和结构16 168.2.2 BPEL流程流程BPEL是一种服务组合语言,用来定义基于现有服务的组合服务。虽然BPEL具有普通编程语言的基本结构,能够编写任何程序和服务,但把BPEL用于这一目标却有诸多不便,因为它缺乏数据类型以及对数据类型的操作。BPEL流程定义了Web服务间相互作用时的结构,所用术语如下:(1)业务逻辑,包括数据、工作流以及错误处理和恢复机制;17 17(2)参与的服务(伙伴),描述了伙伴的特征以及向伙伴会话提供的支持。BPEL流程使用上述结构和活动定义基于现有服务的组合Web服务。图8.5显
7、示了一个BPEL流程的结构、它的客户以及提供BPEL流程所需要服务的三个服务。18 18图8.5 BPEL流程及它的客户和服务19 19BPEL流程开始于活动,该活动循环-等待由两个字符串类型的消息组成的请求,两个消息分别代表信用卡号和密码。当一个请求到达时,流程分配这两个消息给两个变量。然后,流程使用结构允许两个远程Web服务调用同时进行(并行)。活动有两种模式:同步和异步。(1)同步:创建一个双向通信通道,其中调用者(客户)阻塞并等待来自被调用者(服务)的答复。(2)异步:创建一个单向通信通道,允许调用者发送消息给被调用者。如果需要响应,被调用者必须使用创建另外一个单向通道进行回复。202
8、0信用卡确认和地址确认这两个服务都使用一个表示“有效”或“无效”的字符串来答复。根据收到的答复,流程使用结构(条件语句)来决定将什么消息回复给客户。流程采用两个结构以确保信用卡号和地址都是有效的。然后,流程使用异步模式调用发货服务。在这种模式下,流程不期望服务立即响应。相反,流程给发货服务提供一个端口(回调号码),以供服务结束处理时进行回调。在BPEL流程中,它用活动等待回调。图8.6刻画了客户、BPEL流程和服务之间的同步及异步通信,其中“调用-接收-调用-响应”用于同步通信,而“调用-接收-调用-接收”用于异步通信。21 21图8.6 例子中的同步和异步通信22228.2.3 BPEL流程
9、的流程的WSDL接口定义接口定义如果一个BPEL流程为其他客户或服务至少提供一个访问端口,这个流程本身就是一个Web服务,因此它有WSDL接口定义,如图8.7所示。在通信活动中,当、和用于BPEL流程中时,必须指定一个通信合作伙伴。对于每一个合作伙伴,其链接类型需要在WSDL文件中定义。因此,除了标准WSDL文档所具有的所有元素外,BPEL流程的WSDL接口还有一个额外的名为的元素,它用来定义BPEL流程使用的伙伴连接的类型。2323图8.7 BPEL流程和它的WSDL定义2424下面的WSDL文档展示了图8.5给出的BPEL流程的部分接口。26262727282829293030在此WSDL
10、定义中,定义了两个端口类型。一个是clientPT,另一个是shipingCallbackPT。前者为客户和BPEL流程(服务)之间的同步通信定义了一个双向接口。后者为发货服务回调定义了一个单向(仅输入)接口。端口类型是WSDL文档的标准部件。31 31在BPEL流程的WSDL文件中新定义的部件是partnerLinkType。如图8.5所示,BPEL流程有四个合作伙伴,在上述文件中,定义了四个partnerLinkType,其中每一个都定义了在伙伴关系中具有端口类型的实体的角色。如果使用同步通信,涉及一个端口类型并且需要定义一种角色。如果使用异步通信,涉及两个端口类型并且需要定义两种角色:(
11、1)在客户和BPEL流程的伙伴关系中,涉及一个端口类型,拥有端口类型的实体的角色是付款和发货服务。3232(2)在BPEL流程和信用卡确认的伙伴关系中,涉及一个端口类型,拥有端口类型的实体的角色是信用卡确认。(3)在BPEL流程和地址确认的伙伴关系中,涉及一个端口类型,拥有端口类型的实体的角色是地址确认。(4)在BPEL流程和发货服务的伙伴关系中,涉及两个端口类型,拥有端口类型shippingCallbackPT的实体的角色是发货服务请求者,而拥有端口类型shippingServicePT的实体,在shp名字空间中定义,是发货服务供应商。33338.2.4 BPEL流程流程一旦在WSDL文件中
12、定义了合作伙伴链接类型,我们就可以进行BPEL流程本身的讨论。下面代码对应于图8.5给出的BPEL流程。代码由几个主要部分组成:(1)第一部分定义了需要的名字空间。(2)下一部分定义了每个合作伙伴的伙伴链接。该过程有四个合作伙伴,因此有四个合作伙伴链接。只要有端口类型的合作伙伴就需要定义伙伴链接的角色。因此,前三个合作伙伴链接有一个角色,而第四个链接有两个角色。3434(3)再下面的部分定义了需要存储来自于Web服务以及传送给Web服务的值的变量。它们在BPEL流程的作用类似于传统编程语言中的变量声明。(4)BPEL流程的其余部分是主要的处理部分,相当于Java或C的main()方法。在此代码
13、中,过程使用顺序结构接收输入数据,然后将数据复制给调用服务所需的变量。一旦数据准备就绪,过程使用并行结构同时调用两个Web服务。最后,过程使用switch结构,基于真假值选择下一步采取的动作。3838!outputfromCreditCardValidaitonwebservice3939404041 4142424545464647478.2.5 一个调用实际的一个调用实际的Web服务的例子服务的例子在上述讨论中,我们使用了一个比较复杂的例子,因此我们可以接触到BPEL流程和它的WSDL接口设计时的许多问题。然而,这个BPEL流程不是一个工作实例,因为这个例子中使用的Web服务是假想的,没有
14、可用于信用卡确认和发货的免费服务使得这个例子成为真实的。在本节,我们将给出一个小例子,但却是一个可工作的例子,在该例子中,所有的服务都是真实的。图8.8显示了客户、BPEL流程和在该例子中使用的两个Web服务的框图。4848两个远程Web服务是:(1)USZip服务,它根据城市名称返回美国的邮政编码。实际的Web服务的WSDL定义在:(http:/ 一个基于城市名返回电影信息的BPEL流程5050BPEL流程有三个合作伙伴,因此,我们需要创建三个伙伴链接类型,如下面的代码段所示,其中客户与BPEL流程之间的通信是异步的,而BPEL流程和USZip、MovieInfo服务之间的通信是同步的。53
15、535454下面给出了访问真实Web服务USZip和MovieInfo的完整的BPEL流程代码。此段代码除了使用的是真实的Web服务之外,与付款和发货例子有着类似的结构和功能。5757585859596060636364646565图8.9 BPEL流程和客户端口类型定义6666到目前为止,我们已经讨论了BPEL流程的主要特征,包括活动、结构和合作伙伴链接。与编程语言一样,BPEL提供了许多其他特征。下面的代码框架显示了BPEL流程的一般结构,包括变量声明、更正和支持事件驱动计算的各种处理。6767图8.10 BPEL流程使用的Web服务的端口类型定义6868.6969.7070.71 71代
16、码框架中的变量定义,定义了作用域为整个BPEL流程的全局变量。BPEL也支持在某一结构内定义的局部变量,用一对标签引用,如下面代码片段所示:.7373.在上面代码框架中显示的故障处理有着与传统编程语言,如C、C#和Java类似的结构,这可以从下面的代码段看出。747475757676.相关性是更复杂的主题,我们将在后面单独的章节讨论它。7777在面向对象计算中,当创建一个对象后,我们可以在对象的数据域存储数据并通过再次访问相同的对象检索数据。如果需要在同一个类的不同对象间维持其状态,那么可以在这个类中定义一个静态数据域(变量)。然后,分配给程序的静态内存中的相同存储位置将会被由相同类创建的所有
17、对象访问。然而,在Web服务中,使用的是不同的执行模型。在服务后面的对象的数据域存储信息是不可能的,也不能为客户共享信息而创建静态成员。8.3 无状态与有状态无状态与有状态Web服务服务7878当客户使用服务提供者网站上的远程类时,它使用远程引用实例化一个对象,该远程引用在客户端创建一个代理或一个虚拟对象。代理是到提供者网站上运行的服务的通道。许多客户可以访问相同的服务并且相同的客户可以多次访问相同的服务。对于访问是否来自同一个客户还是来自不同的客户,服务通常不会区分或建立相关性。每当一个请求到达,一个服务的新实例(一个操作系统进程)被创建;请求处理后,该实例终止。这就是所谓的无状态服务。如图
18、8.11所示,尽管一个单一的代理被创建,但abs(x)方法被相同的客户访问两次,需要创建两个新的实例。当PiValue()被访问时,另一个实例被创建。7979图8.11 无状态服务为每次访问创建一个新实例8080 无状态服务是基于Web计算的自然简单的解决方案。然而,在许多情况下,我们还需要有状态的解决方案。例如,如果AddToCart服务被多次调用,客户期望状态信息横跨多个访问,以便多个项目可以添加到相同的购物车。ASP.Net没有明确支持有状态的Web服务。开发人员必须建立自己的机制以识别服务的客户并关联他们多次访问的状态。81 818.3.1 BizTalk的singleton对象方法通
19、过引入一个称之为singleton的对象,微软BizTalk支持有状态Web服务的开发。如果调用来自相同的代理,singleton对象允许创建类的单一实例(对象)。只有第一次从代理调用时才会创建一个新对象,来自相同代理的所有后续请求将会指向早期创建的同一对象。8282这种方法需要一些基础设施以支持这一机制。具体来说,支持singleton对象的类需要:(1)维持一个指向对象的代理列表;(2)维持请求与之前创建的对象之间的关联关系;(3)如果允许再次登录,则维持账户和与账户相关的状态列表;当有调用请求时,识别代理(会话信息)和账户(登录)。请注意,此设计用基础设施设计复杂度来置换软件设计复杂度。
20、如果为每一个对象创建一个单一对象,那么软件设计就很容易,但基础设施就很复杂,因为它需要维持与已创建对象对应的客户名单。83838.3.2 BPEL的相关性方法的相关性方法BPEL流程可以模拟两种类型的服务:简单的无状态的服务和更复杂的有状态的、长时间运行的异步服务。支持有状态服务的机制被称为相关性,它是跟踪一个或一组特定的业务合作伙伴间的会话信息的一种结构。相关性把消息和会话与业务流程实例相匹配。当BPEL引擎接收到一个消息时,它查找可以处理该消息的流程(服务)。有些消息引发一个新的流程实例被创建(无状态),而其他消息则需要被发送到一个已运行的流程(有状态)。如何识别一个现有的流程?我们通过比
21、较相关集的内容来识别它。8484相关集是一个消息共享的属性的集合,它用来表示用于维持交互(或称为会话)状态的数据。在交互的BPEL流程中,相关集把到来的消息发送给服务器站点上正确的流程实例。更确切地说,相关集是一个包含了交互状态的业务数据域(“相关业务数据”)的集合,例如,“订单号”或“客户ID”。每个相关集被初始化一次,它的值在交互过程中不会改变。8585与partnerLinkType的定义类似,相关集是一个已命名的属性集合,其中每一个属性定义为一个WSDL扩展元素。一个属性被映射到WSDL消息类型的一个域上。因此,在消息实际交换中,可以发现每个属性。典型的,一个属性可以被映射到多个不同的
22、消息类型,并在许多跨操作和端口类型的交互中执行。下面的代码是在业务流程中使用相关集的例子。86868787在上面的代码中,输入或输出操作标识了哪些相关集应用于消息接收或发送。该集合被用于确保消息与适当的状态交互相关。元素有一个属性叫做initiate,它可以设置为三个不同的值:yes,join和no。(1)yes意味着相关Web服务的活动在每次执行时必须初始化相关集。如果相关集未被初始化,将使用被传送或接收的消息值来初始化相关集。如果在Web服务活动执行时,相关集已经初始化,BPEL要求活动抛出一个错误:bpel:correlationViolation。8888(2)如果多个活动并发执行,并
23、且它们中的任何一个都能在执行时初始化相关集,则初始化属性值是join,这意味着如果相关集未初始化,必须有一个活动初始化相关集。如果相关集已被初始化并且违反了相关一致性约束,那么就必须抛出一个错误:bpel:correlationViolation。join对于多个初始化活动或任何多于一个的活动可能会初始化相关集的场景是有用的。(3)当initiate属性设置为no或者没有明确设置,相关活动不能初始化相关集。如果活动执行时,相关集没有被初始化,将会抛出一个错误:8989 bpel:correlationViolation如果相关集已初始化,但违反相关一致性约束,则必须抛出一个错误:bpel:co
展开阅读全文