BPEL2.0服务契约手册BPEL2.0服务契约手册本技术手册旨在探讨如何为封装WS-BPEL流程逻辑所需的Web服务设计WSDL定义。因为SOA提倡用“契约优先”的方式来设计服务,所以理解由WS-BPEL引发的这种独特服务契约设计理念,是成功构建有效流程和服务的关键因素。什么是编制和编排WS-BPEL是一种编制语言,可以用来创建编制。编制是一种合成、控制器服务,规定使用的服务将如何通过互相协作来完成工作。BPEL2.0服务契约之基础篇:什么是编制和编排?如何使用WS-BPELWS-BPEL是一种编制语言,通过定义控制流,来描述Web服务应用的执行逻辑,为伙伴服务提供了一种共享上下文的方法。伙伴服务指的是和WS-BPEL流程交互的服务。BPEL2.0服务契约之理解篇:如何使用WS-BPEL?如何为封装WS-BPEL的服务设计WSDL定义鉴于WS-BPEL编制与WSDL定义之间的联系,这样就可以把编制本身当成一个服务,这个服务可以被另一个服务调用,或者作为另一个编制或编排的一部分。TTSOA技术手册之“BPEL2.0服务契约手册”Page2of45BPEL2.0服务契约之实战篇:如何为封装WS-BPEL的服务设计WSDL定义?如何创建WS-BPEL流程服务通常的面向服务设计都建议流程服务的设计应该从服务契约开始。所以为了提供更多的WSDL和WS-BPEL定义的例子,我们就来遵循这个过程。BPEL2.0服务契约之实战篇:如何创建WS-BPEL流程服务?WS-BPEL流程服务如何与伙伴服务产生交互我们介绍的这个Hello流程服务只是WS-BPEL流程服务的一个简化例子。它没有使用伙伴服务来完成这个工作,仅仅是根据客户端发来的数据基础上合成了一个hello消息。BPEL2.0服务契约之实战篇:WS-BPEL流程服务如何与伙伴服务产生交互?TTSOA技术手册之“BPEL2.0服务契约手册”Page3of45BPEL2.0服务契约之基础篇:什么是编制和编排?目前,SOA作为一种架构平台已经被很多公司所采用。SOA是一种有效的方法,能够把建立在Web服务的企业应用进行集成。Web服务是把业务逻辑封装在清楚的上下文中,并且容易组合到合成解决方案之中的松耦合软件。虽然创建远程访问资源和功能的应用不是什么新鲜事,但是,能够根据面向服务原则(如松耦合)去做,却代表一种相对而言比较新的方法。Web服务是一种技术,它规定了一种标准机制,即如何通过互联网协议(如HTTP)暴露并使用数据和应用逻辑。而WS-BPEL则是一种编制语言,用来规定业务流程,以描述Web服务间的交互,从而为建立基于Web服务的面向服务解决方案打下了基础。因此,为了利用Web服务和WS-BPEL来建立面向服务的解决方案,必须遵循以下两大步骤:•创建并发布Web服务,以运用到解决方案中•使用WS-BPEL把Web服务合成到业务流中本文着重探讨WS-BPEL和Web服务之间的关系,同时重点介绍WSDL定义的设计。服务合成的基本要素实际上有很多方法可以把服务组织起来,形成一个合成方案。比如说,你可以创建一个合成服务,采用PHP脚本的形式,作为Web服务发布;如果有需要的话,通过编程的方式调用其他服务。然而,创建合成服务的昀常见方式还是通过使用WS-BPEL,尤其是在更TTSOA技术手册之“BPEL2.0服务契约手册”Page4of45加复杂的合成中。WS-BPEL是一种编制语言,可以用来创建编制。编制是一种合成、控制器服务,规定使用的服务将如何通过互相协作来完成工作。编制(Orchestration)编制是把各种服务组装到可执行的业务流程中,然后通过一个编制引擎来执行业务流程。用示意图来表示的话,一个编制可能看似图1:图1:将其他服务组织到SOA合成中的控制服务器从中可以看到,图1中的示意图说明了服务的组合,这些服务通过封装在控制器服务中的逻辑来进行协调。该控制器服务可能是一个WS-BPEL业务流程;当编制引擎运行时,它来完成某项业务任务。可以把用WS-BPEL编制语言构建的控制器服务看成是编制任务服务(OrchestraterTaskService)。作为Web服务,控制服务器应该还有一个相应的WSDL文档,用来向使用者描述这个服务。等下我们再讨论如何为由WS-BPEL构建的合成服务创建WSDL规范。TTSOA技术手册之“BPEL2.0服务契约手册”Page5of45你可以创建一个编制,在另一个更大的编排中,把它作为服务来使用。例如,图1中描述的编制可能是另一个WS-BPEL编制的一部分。整个编辑过程,从接受方案到发布文章,是通过这个更大的编制来自动执行。编排(Choreography)Web服务编排规范和Web服务编排描述语言(WS-CDL)提供了构建SOA合成应用的另一种方法。WS-BPEL是用来把各种服务编制到合成解决方案中,通常表述了某公司的特定业务流程流。而Web服务编排描述语言(WS-CDL)描述了Web服务和参与者之间的点对点关系,这些参与者既可以在受信任范围内,也可以不在受信任范围内。与编制不同的是,编排不包括一个中央控制机制,而是假定控制是在交互的参与者之间进行共享。这就是说,编制代表的是一个可执行流程,它在通过位于某个位置的一个编制引擎来执行。而编排实质上是代表一种描述,即如何在相互协同的参与者之间来分布控制,而不需要使用任何单个引擎来完成某项工作。为了定义编排,就需要创建WS-CDL编排描述文档;它将是交互参与者之间的契约。具体来说,WS-CDL文档描述的是相互协作的参与者之间的消息交换,规定这些参与者如何为完成一个共同的业务目标而必须一起工作。例如,可能会存在这样一种编排:在一个编制、一个代表WS-BPEL流程的控制器服务和一个与控制器服务交互的客户端服务之间进行协作。用示意图来表示的话,可能看似图2所示:TTSOA技术手册之“BPEL2.0服务契约手册”Page6of45图2:基于WS-BPEL业务流程的合成服务与该服务使用者之间的编排在这种场景下,编排层的作用是具体规定两个服务之间的点对点协作。WS-CDL编排文档特别描述了上文提到的合成服务和其中一个使用者之间的消息交换。关于作者YuliVasiliev是软件开发者、自由撰稿人和咨询师。目前专注于开源开发、Oracle技术和SOA。他具有十多年的软件开发经验和七年多的技术写作经验。他出版的新书《SOAandWS-BPEL》具体详述了如何使用开源产品PHP和ActiveBPEL引擎创建和部署你自己的面向服务解决方案。(作者:YuliVasilev译者:杨晓明,Shirley来源:TechTarget中国)TTSOA技术手册之“BPEL2.0服务契约手册”Page7of45BPEL2.0服务契约之理解篇:如何使用WS-BPEL?之前提到过,WS-BPEL是一种编制语言,通过定义控制流,来描述Web服务应用的执行逻辑,为伙伴服务提供了一种共享上下文的方法。伙伴服务指的是和WS-BPEL流程交互的服务。WS-BPEL是建立在几种规范之上,如SOAP、WSDL和XMLSchema。WSDL可能是其中昀重要的一个。在基于WS-BPEL的合成服务中,正是WSDL让服务起到作用。WS-BPEL可以定义业务流程,通过WSDL描述,让流程与合作服务进行交互(稍后具体解释)。有意思的是,虽然WS-BPEL是目前昀受欢迎的可执行业务流程语言,但并不是对基于Web服务应用的执行逻辑进行定义的唯一方法。还有其他规范,如XLANG、WSFL、XPDL和BPML。每一种都可以替代WS-BPEL。通过WS-BPEL,你可以把一组Web服务集成到业务流程流中,从而构建业务流程。WS-BPEL业务流程具体指定了如何在该流程的实例和伙伴服务之间协调交互。图3举的例子就是WS-BPEL业务流程的工作流示意图。TTSOA技术手册之“BPEL2.0服务契约手册”Page8of45图3:把WS-BPEL流程封装到图1描述的合成服务之工作流示意图图中所描述的WS-BPEL流程把所有的服务都集成到一个点对点流程中,这些服务都是从接受方案开始到昀终完成所有步骤所需的服务。在这个具体的例子中,该流程集成了四个Web服务,如图1中所示。在下文我们将介绍WS-BPEL流程如何通过WSDL文档定义的一个伙伴链接来连接Web服务。WS-BPEL流程除了具有调用多个服务的能力外,还可能对XML数据进行操作,运行并行处理、条件分支和循环来控制流程流。例如,在上面的流程中,你可以使用一个开关动作,建立两个分支。如果提交方案的是一名新作者,那么这个流程就会调用“Author”服务,把作者的信息保存到数据库。否则,就跳过这一步。关于作者TTSOA技术手册之“BPEL2.0服务契约手册”Page9of45YuliVasiliev是软件开发者、自由撰稿人和咨询师。目前专注于开源开发、Oracle技术和SOA。他具有十多年的软件开发经验和七年多的技术写作经验。他出版的新书《SOAandWS-BPEL》具体详述了如何使用开源产品PHP和ActiveBPEL引擎创建和部署你自己的面向服务解决方案。(作者:YuliVasilev译者:杨晓明,Shirley来源:TechTarget中国)TTSOA技术手册之“BPEL2.0服务契约手册”Page10of45BPEL2.0服务契约之实战篇:如何为封装WS-BPEL的服务设计WSDL定义?鉴于WS-BPEL编制与WSDL定义之间的联系,这样就可以把编制本身当成一个服务,这个服务可以被另一个服务调用,或者作为另一个编制或编排的一部分。如果WS-BPEL流程作为一个服务的形式存在的话,那么应该有相应的WSDL文档,客户服务才能调用这个流程。例如,图3中描述的WS-BPEL流程可能与下面的WSDL定义相关联。点击查看例1。你会看到,该WSDL文档没有包含binding或service元素。事实上,WS-BPEL流程服务的WSDL文档只包含了服务的抽象定义和partnerLinkType部分,该partnerLinkType部分代表流程服务与其客户端服务之间的交互。在这个具体的例子中,WSDL定义只包含了一个partnerLinkType部分,支持客户端使用的一个操作来初始化流程。partnerLinkType部分昀多定义两种角色,每一种角色结果都和之前提及的WSDL文档中定义的portType有关。WS-BPEL使用伙伴链接机制对WS-BPEL流程和参与者之间的关系进行定义。在本章的稍后部分你会看到,WS-BPEL流程的定义包含了partnerLink元素,用来指定WS-BPEL流程和客户端,及合作伙伴者之间的交互。WS-BPEL流程定义文档中的每个partnerLink都和对应的WSDL文档中的partnerLinkType相关联。用示意图表示的话,如图4所示。TTSOA技术手册之“BPEL2.0服务契约手册”Page11of45一旦你为流程服务创建了WSDL定义,那么对于流程执行时将被调用的伙伴服务,就要确保修改这些服务的WSDL文档。为了能够让一个服务成为WS-BPEL编制的一部分,你可能想在对应的WSDL文档中增加一个partnerLinkType元素。例如,为了能够让图3中的Notification服务参与到编制中,你需要创建一个如下的WSDL文档。点击查看例2。注意高亮加粗的partnerLinkType部分。在描述服务的WSDL文档末加入这一部分,可以让这个服务成为一个伙伴链接,让这个服务可能成为编制的一部分。之前提到过,WS-BPEL使用伙伴链接机制为业务流程中交互的服务进行建模。这有一段图3所示的WS-BPEL业务流程定义,描述了使用伙伴链接的proposalProcessingService流程服务:点击查看例3。上面的例子只显示了流程定义中的两个partnerLink。第一个partnerLink指定了WS-BPEL流程和它的客户端之间的交互。另一个partnerLink指定了WS-BPEL流程与在这里作