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
24、rrelationViolation相关集可以由消息传送或消息接收来初始化。下面的例子采用了http:/docs.oasisopen.org/wsbpel/2.0/wsbpelv2.0.html上的OASIS的文档。在这个例子中,讨论了买方流程和卖方流程,如图8.12所示。图8.12 两个相关集被用于关联订购单和发货单 定义两个相关集并用于双方的消息传送。9090如下面的代码所示,买方流程通过调用卖方的“PurchaseRequst”操作并设置相关集“PurchaseOrder”来初始化通信。initiate属性被设置为yes,因为该操作初始化了会话。然后,买方等待卖方两个可能响应Purcha
25、seResponse或PurchaseReject中的一个。在这两种情况下,initiate属性被设置为no,因为该属性应该已被初始化。PurchaseResponse到达后,第二个相关集Invoice被初始化。.9292.9393.在卖家一方,流程使用活动接收订单,如下面代码所示。当相关集第一次被卖家访问时,使用相同的相关集名称PurchaseOrder,并且initiate属性设置为yes。一旦采购订单被处理(代码没有给出),可能会出现两种情况:给买家发送一个发货单,接收订货,或者拒绝订单。在这两种情况下,相关集的initiate属性设置为no,因为相关集已被初始化。9494.请注意,BP
26、EL方法使软件设计更加复杂,因为它需要有一个设计得当的相关集。然而,这并不需要改变基础设施。这是与BizTalk方法的区别之处。9797虽然BPEL是一种基于XML的语言,并且BPEL流程可以在文本中逐行编写,但还是有许多支持拖曳式可视化开发的IDE(集成开发环境)。每项活动、服务和结构放在框中,组合就是选择所需要的框,并把他们链接起来。BPEL流程和WSDL接口可自动生成。本节将介绍三个广泛使用的支持BPEL开发的IDE:OracleSOA套件、ActiveBPEL和BizTalk。8.4 支持支持BPEL组合的框架组合的框架98988.4.1 OracleSOA套件套件OracleSOA套
27、件是一整套用于构建、部署和管理SOA软件的服务基础设施组件。它允许创建服务,管理服务并将服务编制成组合应用和业务流程。它支持系统组件的热插拔,允许组织扩展并升级它们的体系结构。该系统可在如下地址下载:http:/ 使用Jdeveloper进行可视化开发1031038.4.2 ActiveBPEL和OracleSOA组件类似,ActiveBPELEnterpriseSuite也包含一套组件,这套组件为BPELWeb服务提供了创建、测试、部署和执行的可视化环境。ActiveBPEL可以直接从http:/www.activebpel.org/infocenter/ActiveBPEL/v30/ind
28、ex.jsp下载。104104ActiveBPEL主要组件包括:(1)ActiveBPELDesigner:功能类似于JDeveloper,支持可视化开发、仿真、测试和部署BPEL流程。使用设计器,通过选择合作伙伴、服务和操作,以及定义数据如何在这些实体之间流动来建立流程。当你组织流程编辑器上的图标时,ActiveBPEL自动构建有效的BPEL(XML)文件。图8.14显示了用ActiveBPEL设计器开发的ActiveBPELBPEL流程,与ActiveBPEL网站上给出的流程相同。105105图8.14 使用ActiveBPEL进行可视化开发106106(2)AdministrationC
29、onsole:这是ActiveBPELDesigner的一个替代方案,它管理已经部署了并运行在ApacheTomcat服务器上的流程,并提供一个报警系统以及查找流程结束点。它还有进行性能管理的引擎设置。(3)ActiveBPELEngine:它管理流程,包括流程版本(有效/失效日期)、合作伙伴端的调用处理、重新建立合作伙伴和安全策略、流程异常管理。对于大多数ActiveBPEL企业应用服务器,ActiveBPELEngine可以运行在群集环境中。(4)ApacheTomcat:这个组件提供了一个通用的(基于Java)托管服务,类似于微软的基于C#服务的IIS。1071078.4.3 BizTa
30、lkBizTalk内嵌于.Net并作为.Net的一个附加组件,是微软的业务流程管理(BPM)环境,用于开发异质系统集成或所谓的企业应用集成(EAI)。BPEL是它支持的组合语言之一。事实上,BizTalk最初的组合语言是Xlang。可以在XLANG中导入BPEL流程并执行,另一方面,XLANG流程也可以导出BPEL流程。没有供下载的BizTalk的免费版本。与OracleSOASuite和ActiveBPEL类似,BizTalk用可视化工具开发业务流程。XLANG和BEPL代码都可以从图形化流程设计器中生成。图8.15是BizTalk教程中给出的例子,该教程可在http:/ 用BizTalk进
31、行可视化开发109109在Web开发中,mashup是一个Web应用,它将来自两个或多个源的数据或功能组合成单一的集成应用维基百科。mashup作为一种面向服务组合方法,可以使用多种资源类型,包括Web服务、服务、API和数据源,来构成多个应用,如图8.16所示。多层mashup也是可能的,也就是说,mashupWeb数据可提供给另一个mashup站点。8.5 Mashup用于用于Web应用的组合应用的组合110110有多种不同的mashup组合工具,包括GoogleAppEngine中的GoogleMashupEditor,Yahoo!Pipes:(http:/ Mmashup中心(http
32、:/ Mashup112112图8.17显示了来自Zillow地产(http:/)的一个真实世界的应用。mashup应用将资产值列表与地图服务结合。对于一个给定的地址,会产生给定地址及其周边房屋的资产值。类似的mashup例子是,它将谷歌地图与Craigslist分类数据相结合。113113图8.17 资产值列表和地图服务的mashup114114mashup的简单版本是widget,它将一个单一数据源导向一个Web应用而无需编程。图8.18说明了widget和mashup之间的差异。有许多widget资源,例如Yahoo!(http:/),Amazon(https:/ mashup和widg
33、ets116116现在,使用Yahoo!Pipes开发一个mashup应用,它将两个数据源合并成一个单一Web站点。数据源是:http:/engineering.asu.edu/bulletins/rsshttp:/asunews.asu.edu/taxonomy/term/18/all/feed可用几个简单步骤开发mashup。步骤1:创建一个新管道。在浏览器打开Yahoo!Pipes站点(http:/ 使用Yahoo!Pipes的mashup组合118118步骤2:定义数据源。展开编辑器边上的库面板中的资源并把“FetchFeed”模块拖放到画布,输入两个数据源到URL框。它支持不同类型的
34、数据源。请注意,当你把“FetchFeed”模块移进画布时,“Pipeoutput”会自动在画布中产生。步骤3:选择运算符。展开运算符并把“Sort”运算符拖放到画布。使用item.title进行排序并选择升序。其他可用的运算符包括Count,Filter,Loop,Split,Subelement,Tail,Truncate,Union和WebService。WebService运算符允许你通过提供Web服务的URL来使用Web服务。119119步骤4:输出和调试。调试器面板显示了当前选择的模块产生的Pipe的内容。要查看Pipe的最终输出,应该将产生最终输出数据的模块连接到“PipeOut
35、put”模块。步骤5:链接。为了使Pipe工作,需要基于业务逻辑将模块连接在一起。你可以拖动任何模块的输出终端到数据输入模块的输入终端。编辑器将兼容终端橙色闪烁,以指示哪些连接是允许的。你可以悬停在任何模块的终端去查看哪种类型的数据是终端期望发送或接收的。120120步骤6:保存和发布。一旦建立好Pipe,应该保存它,这将会提示输入Pipe名,也可以选择发布Pipe,这将产生可由任何人访问的URL。生成的URL是http:/ S,SCA/SDO,WF和WSFL。8.6 其他组合语言其他组合语言1221228.6.1 OWL SOWL S(服务的本体Web语言)的前身为DAML S(服务的DAR
36、PA代理标记语言)(http:/www.w3.org/Submission/OWLS/)。它包括一套标记语言结构,并以非二义化的形式描述了Web服务的属性和能力。计算机可识别的形式为以下操作提供了支持:(1)服务宣传:功能方面非功能方面使用流程模型的交互协议。(2)服务发现(OWLS媒介),支持基于类别的发现。123123(3)组合(OWL S过程模型),支持分层规划。(4)调用(OWL S虚拟机)。(5)执行和监测。OWL S是OWL(本体Web语言)的扩充,OWL是一种本体描述语言。OWL S增加了过程结构的描述,类似于BPEL中的结构,因此可以描述工作流程。作为本体语言,OWL S使用三
37、个属性声明一个服务:(1)服务配置,它提供了一组属性来描述抽象的输入和输出,包括属性serviceName,hasParamter,hasPrecondition,hasResult,hasInput,hasOutput和hasProcess。124124(2)流程模型,它提供定义流程的组合结构,该流程类似于BPEL流程。(3)服务基础:把服务配置文件中定义的抽象输入和输出转换成有SOAP传输的WSDL接口,从而使OWLS服务与其他Web服务兼容。转换层称为服务基础。OWLS支持如下用于组合流程的结构:(1)顺序:按顺序执行的控制结构列表。(2)拆分:拆分流程是由可并发执行的流程组件构成的。当
38、所有组件都给出执行时间时,拆分就结束。(3)拆分合并:拆分合并是由具有同步机制的并发执行的流程组件构成的。当所有的组建流程完成时,拆分合并就结束。125125(4)任意顺序:允许集合中一组流程组件以任意顺序执行,但不能并行也不能重叠,必须完成所有组件的执行。(5)选择:它从给定的控制结构集合中选择某一个控制结构执行。集合中的任一个都可以被选择。(6)IfThenelse:这是一个控制结构,它具有属性ifCondition,then和else分别处理不同的方面。(7)迭代:该结构体对于进行多少次迭代、何时开始、何时终止或恢复不做任何假设。(8)RepeatWhile和RepeatUntil:结构
39、一直重复,直到条件为真或假为止。1261268.6.2 SCA/SDO作为IBM主要的面向服务软件开发平台,服务组件体系结构(SCA)和服务数据对象(SDO)为许多不同的服务和数据源提供了一个统一的编程接口(http:/ SCA组合模型129129(2)客户和实现规范:在不同的编程语言和组合语言中使用SCA。(3)绑定规范:使用访问方法。它支持标准的Web服务绑定规范、JavaMessageService(JMS)绑定规范和EnterpriseJavaBeans(EJB)绑定规范。(4)策略框架:将代表安全、交易、会话和可靠消息传递的策略添加到系统,并在条件、约束和规则列表中声明。130130
40、SCA对许多不同的服务和访问方法提供了一个单一的接口。换句话说,你可以写相同的代码去访问不同的服务,这些服务可以是基于不同语言如C和Java的Web服务、BPEL流程和本地或远程对象。它还提供了用单一的方法来处理通信协议如SOAP和其他消息传递系统如JMS。如果服务需要身份验证、加密或其他策略,则由SCA环境处理,用户不需要在他们的代码中处理这些。服务数据对象为数据访问提供了类似的统一解决方案。通过SDO,使用单一的界面与你的数据源通信,无论它是关系数据库、XML文件、Web服务或其他数据源。SDO让你使用单一的API而不用关心底层技术是什么。1311318.6.3 工作流基础和工作流基础和S
41、ilverlightWF(工作流基础)是WinFX的一部分,WinFX是微软VisualStudio2008和WindowsVista(或WindowsServer2008的)中的新的编程环境。WinFX包括三部分:WF,WCF(Windows通信基础)和WPF(Windows表示基础)。每个WF工作流可以由以下文件联合描述,详细描述见.Net2008库文档(http:/ 微软WF例子134134(http:/ WSFL:Web服务流语言服务流语言Web服务流语言(WSFL)是由IBM软件组(Leymann,2001)开发的。它是一种描述Web服务或应用组合的XML语言。WSFL允许三种组合级
42、别:流模型、全局模型以及嵌套组合。(1)流模型:描述如何使用可用的服务集合所提供的功能创建一个组合Web服务或应用。这也就是所谓的Web服务的流组合、编制或编排。一个WSFL文档(程序)模型就是一个这样的组合,它定义控制流和Web服务间的数据传递,对参与的Web服务的执行次序进行了说明。137137流组合模型用于基于现有Web服务的业务流程或工作流的建模。在流模型中,用WSDL定义接口和绑定。(2)全局模型:在此模型中,没有提供执行顺序的说明。相反,组合是基于参与的Web服务间的交互。它描述了参与的Web服务之间是如何交互的。交互被模型化为Web服务接口端点间的链接,即一个Web服务与另一个W
43、eb服务的接口中的操作的交互对应一个连接。138138(3)嵌套组合:通常情况下,全局模型用来描述参与组合的Web服务之间的行为,每一个Web服务都被描述为一个流模型。然而,由于WSFL允许由全局模型创建的组合Web服务参与另一个Web服务的组合,这导致了嵌套组合。嵌套组合被称为递归组合(Leymann,2001)。WSFL组合支持业务流程中各参与伙伴间的多种交互模式。特别是它支持层次交互和对等交互。层次交互常出现在具有更稳定、更长期的伙伴关系中,而对等交互则出现在基于单实例的动态建立的关系中。139139在该节的剩余部分,我们将分别讨论全局模型和流模型。我们将通过一个案例来展示全局模型和流模
44、型的实现。全局模型用来描述Web服务和使用Web服务的应用间的全部交互。例如,描述客户、旅行社、航空公司和酒店之间的交互。通过描述参与的Web服务之间的交互,全局模型还可用来定义用已存在的Web服务组合成的Web服务。然而,在这种情况下,它往往需要流模型的支持,流模型描述了流或交互的执行顺序。140140全局模型的交互被模型化为Web服务接口的端点间的链接。一个Web服务与另一个Web服务的接口中的操作的交互对应一个连接。由于这些交互的分散性或分布性,术语全局模型用于这种类型的Web服务组合。通过描述参与的Web服务的执行流程,流模型定义了一个组合Web服务或一个应用。在WSDL术语中,这种组
45、合也被称为Web服务的流组合、共同设计或编排。换句话说,WSFL模型化了这种组合,它是参与的Web服务的执行次序的说明。141141从技术上讲,服务组合由WSFL中的元素描述。流模型的定义包括两种信息:如何用被组合的服务创建一个流模型,以及组合服务的接口定义。流模型的公有接口在serviceProviderType属性中指定为服务提供者类型。流模型定义的活动的实现通过元素输入到服务提者供类型的端口类型的一个操作中。流模型用以下六种不同的模型元素定义:(1)元素用于表示流模型的输入数据。142142(2)元素定义了流模型的输出。(3)元素表示参与组合的服务。(4)元素表示流模型中服务提供者的某个
46、操作的使用。(5)元素表示模型中活动之间的控制连接。(6)元素表示模型中活动之间的数据流。换言之,流模型定义了一组活动之间的控制流和数据流。每个活动都与一个服务提供者相关,服务提供者是服务提供者类型的实例。143143服务提供者负责活动的实现。从本质上讲,活动定义了服务提供者的流模型需求。流模型本身定义了一个服务提供者类型以及外部Web服务的活动需求。144144本章重点关注使用高级组合语言构建应用。为便于讨论,读者应回顾第3章讨论的SOAP协议的结构和WSDL接口定义语言。组合语言BPEL是本章的主题,并对此进行了详细讨论。我们首先讨论BPEL的活动和结构,然后我们使用这些活动和结构组合成一个业务流程。一个流程定义了一个组合Web服务,它实现了应用逻辑。8.7 讨讨 论论145145本章还研究了BPEL流程的WSDL接口,它是理解BPEL流程与BPEL流程使用的Web服务之间的交互、BPEL流程与访问BPEL流程的客户之间的互操作所必需的。mashup是使用现有数据服务资源组合Web应用的最新技术。我们给出了mashup的概念,然后使用Yahoo!Pipe演示mashup的开发过程。最后,我们简要地介绍了其他组合语言:由DARPA开发的OWLS,由IBM开发的SCA/SDO,由Microsoft开发的WF以及由IBM开发的WSFL。