SOA原理与技术——业务流程1业务流程1.业务流程执行语言(WS-BPEL)规范2.目前主流的WS-BPEL引擎3.ApacheODE2第1部分业务流程执行语言(WS-BPEL)规范3业务流程执行语言(WS-BPEL)规范业务流程执行语言(BusinessProcessExecutionLanguage,BPEL,发音为'bipple'或'bee-pell'),也叫业务过程执行语言,是一种基于XML的,用来描写业务流程的编程语言,被描写的业务流程的每个单一步骤则由Web服务来实现。4业务流程执行语言(WS-BPEL)规范BPEL是基于Web服务的,并且依赖于WSDL。一个BPEL流程可以发布为一个WSDL定义的服务,并像其它Web服务一样被调用。而且,BPEL希望一个Web服务合成所包含的全部外部Web服务,都是用WSDL服务契约定义的,这令BPEL流程可以调用其它BPEL流程,甚至可以递归的调用自己。5业务流程执行语言(WS-BPEL)规范值得注意的是BPEL不直接支持人机对话,BPEL所描写的过程仅与Web服务通信,而这些Web服务却可以提供与用户的信息交换,但它们不是用户本身。用BPEL编写的流程可以在任何支持BEPL规范的平台或产品上运行。6业务流程执行语言(WS-BPEL)规范协议基础WS—BPEL是基于XML定义的流程描述语言,它位于几个XML规范之上:WSDLl.1、XMLSchemal.0和XPathl.0。其中WSDL消息和XMLSchema类型定义提供了BPEL流程所用的数据模型;XPath为数据处理提供支持;所有的外部资源和伙伴被表示成WSDL服务。7业务流程执行语言(WS-BPEL)规范BPEL包含的范围处理活动的顺序,特别是网络服务互操作。消息和处理实例之间的关系。在发生错误和例外情况下的恢复行为。处理角色之间的基于网络服务关系的双面性8业务流程执行语言(WS-BPEL)规范实例1:BPEL的基本结构processname=ncnametargetNamespace=uriqueryLanguage=anyURI?expressionLanguage=anyURI?suppressJoinFailure=yes|no?enableInstanceCompensation=yes|no?abstractProcess=yes|no?bpel:import..../bpel:importpartnerLinks?.../partnerLinksvariables?.../variablescorrelationSets?.../correlationSets9业务流程执行语言(WS-BPEL)规范faultHandlers?.../faultHandlerscompensationHandlers?.../compensationHandlerseventHandlers?.../eventHandlersactivity/process10业务流程执行语言(WS-BPEL)规范前面的BPEL基本结构包括了一部分为了定义一个业务流程,BPEL引入如下关键元素:伙伴链接变量活动关联集合事件处理程序BPEL事务与补偿机制BPEL异常管理11业务流程执行语言(WS-BPEL)规范部分关键元素之间的关系:流程是由一系列的活动组成的;流程通过伙伴链接来定义与流程交互的其他服务;服务中可以定义一些变量;流程可以是有状态的长时间运行过程,流程引擎可以通过关联集合将一条消息关联到特定的流程实现。12业务流程执行语言(WS-BPEL)规范伙伴一个流程可以调用其他服务,也可以响应来自客户端的请求一个流程既可以作为服务的请求者,也可以扮演服务的提供者BPEL把与流程交互的其他服务称为伙伴13业务流程执行语言(WS-BPEL)规范在异步通信环境中,流程与伙伴之间的会话可能是双向的,它们会扮演不同的角色。因此,为了消除在通信过程中的多义性,我们需要明确服务和流程所扮演的角色。14业务流程执行语言(WS-BPEL)规范例如:在BPEL中的伙伴BPEL:partnerLinkspartnerLinkname=“customerserviceLinkType=“lns:purchasePLT”myRole=“purchaseService”/partnerLinkname=“inventoryChecker”serviceLinkType=“lns:inventoryPLT”myRole=“inventoryRequestor”partnerRole=“inventoryService”/partnerLinkname=“creditChecker”serviceLinkType=“lns:creditPLT”myRole=“creditRequestor”partnerRole=“creditService”//partnerLinks15业务流程执行语言(WS-BPEL)规范PurchaseProcessWSDL:PurchaseProcessPortType:plt:partnerLinkTypename=“purchasePLT”plt:rolename=“purchaseService”plt:portTypename=“tns:purchasePT”//plt:role/plt:partnerLinkTypeportTypename=“purchasePT”operationname=sendPurchase/operation/portType16业务流程执行语言(WS-BPEL)规范伙伴链接伙伴链接用于实现Web服务长期稳定的交互,描述伙伴之间的关联。这种关联是通过partnerLink元素来定义的。如果在流程的活动中需要指定与特定伙伴的交互,只需要引用partnerLink的名称即可。在partnerLink元素中,属性myRole指出了业务流程本身的角色,而属性partnerRole指出了伙伴的角色17业务流程执行语言(WS-BPEL)规范通过partnerLink的抽象,在流程建模时不必指定具体的服务端点,而将流程与具体服务的绑定推迟到组装或运行时来完成。这种动态伙伴关系为流程带来了极大的灵活性,也增强了流程的可复用性。18业务流程执行语言(WS-BPEL)规范实例2:一个包含partnerLinks的实例partnerLinkspartnerLinkname=clientpartnerLinkType=tns:TimesheetSubmissionTypemyRole=TimesheetSubmissionServiceProvider/partnerLinkname=InvoicepartnerLinkType=inv:InvoiceTypepartnerRole=InvoiceServiceProvider/partnerLinkname=TimesheetpartnerLinkType=tst:TimesheetTypepartnerRole=TimesheetServiceProvider/19业务流程执行语言(WS-BPEL)规范partnerLinkname=EmployeepartnerLinkType=emp:EmployeeTypepartnerRole=EmployeeServiceProvider/partnerLinkname=NotificationpartnerLinkType=not:NotificationTypepartnerRole=NotificationServiceProvider//partnerLinks20业务流程执行语言(WS-BPEL)规范在实例2中,你会注意到每一个partnerLink元素中都包含一个partnerLinkType属性。下面让我们来解释一下partnerLinkType。伙伴链接通过引用partnerLinkType(伙伴链接类型)来定义流程与伙伴服务之间的通信接口(实际上是WSDL文档中的PortType)。21业务流程执行语言(WS-BPEL)规范伙伴链接类型声明了两个或多个服务之间的关系。伙伴链接类型定义了一组角色,其中每个角色指明一组PortType,即明确了该角色所提供的服务接口,一边接收会话的上下文消息。如果partnerLinkType仅有一个角色,那么将根据需要省略其中一个属性partnerLinkType通常被定义在WSDL文档中,被BPEL流程所引用。22业务流程执行语言(WS-BPEL)规范下图展示了BPEL流程定义和WSDL文件之间的映射关系。23业务流程执行语言(WS-BPEL)规范实例2的代码片段显示了如何利用partnerLink和partnerLinkType定义流程与伙伴的合作关系。根据BPEL流程定义和WSDL文件之间的映射关系,我们还需要在流程对应的WSDL文档中定义partnerLinkType。24业务流程执行语言(WS-BPEL)规范实例3:与实例2对应的WSDL文档中定义partnerLinkTypedefinitionsname=EmployeetargetNamespace=http://www.xmltc.com/tls/employee/wsdl/xmlns=http://schemas.xmlsoap.org/wsdl/xmlns:plnk=http://schemas.xmlsoap.org/ws/2003/05/partner-link/...25业务流程执行语言(WS-BPEL)规范...plnk:partnerLinkTypename=EmployeeServiceTypexmlns=http://schemas.xmlsoap.org/ws/2003/05/partner-link/plnk:rolename=EmployeeServiceProviderportTypename=emp:EmployeeInterface//plnk:role/plnk:partnerLinkType.../definitions26业务流程执行语言(WS-BPEL)规范在实例3中可以注意到:合作伙伴链接类型与合作伙伴链接之间具有一对多的关系,同一个合作伙伴链接类型可以用来描述多个合作伙伴链接。虽然使用服务的用户必须静态地依赖于特定的port-Type,但是在执行过程中可以通过端口类型动态地发现和使用包括在端口定义中的信息。27业务流程执行语言(WS-BPEL)规范变量:在BPEL中,可以使用变量来保存和传递流程的状态信息。它们通常是从合作伙伴那里接收到消息,或者是被发送给合作伙伴的消息。同时,它们还有可能是与流程有关的状态消息,这些消息并不与合作伙伴进行交换28业务流程执行语言(WS-BPEL)规范BPEL支持的变量类型包括三种:1.由WSDL文件所定义的消息类型(messagetype);2.由XMLSchema所定义的简单类型(simpletype);3.由XMLSchema所定义的元素(element).29业务流程执行语言(WS-BPEL)规范可以赋值给变量的数据类型需要提前用messageType,element或type属性定义好。messageType属性表示允许变量包含WSDL定义的整个信息;element属性表示一个XSD元素结构;type属性表示一个XSD简单结构,比如:string,integer30业务流程执行语言(WS-BPEL)规范变量是有作用域的:每个变量只有在定义它的作用域和所包含的作用域内的全部作用域中才是可见的属于全局流程作用域的变量称为全局变量;属于流程作用域的变量称为局部变量31业务流程执行语言(WS-BPEL)规范BPEL支持四种表达式布尔表达