`

BPEL模型基础

    博客分类:
  • BPEL
阅读更多

BPEL模型可以帮助我们更好地理解如何使用BPEL描述的业务流程,如图1所示。流程(Process)由一系列活动(Activity)组成;流程通过伙伴链接(Partner Link)来定义与流程交互的其他服务;服务中可以定义一些变量(Variable,在BPEL4WS中被称为Container);流程可以是有状态的长时间运行过程,流程引擎可以通过关联集合(Correlation Set)将一条消息关联到特定的流程实例。

  BPEL模型示意

  图1 BPEL模型示意

  1.伙伴(Partner)

  在BPEL中,一个流程可以调用其他服务,也可以响应来自客户端的请求。也就是说BEPL流程实例既可以作为服务的请求者,也可以扮演服务的提供者。BPEL把与流程交互的其他服务称为伙伴(partner)。在异步通信环境中,流程与伙伴之间的会话可能是双向的,这在复杂的商务流程中非常常见。

  在流程与伙伴的通信过程中,它们会扮演不同的角色。比如当订单流程被外部服务调用的时候,它作为“PurchaseOrderProcess”角色来提供服务,然而当它请求发货服务的时候,它则扮演“InvoicecClient”角色,如图2所示。由于在流程执行过程中,一个流程可能会调用多个伙伴服务,又可能接收多个伙伴的请求,因此为了消除在通信过程中的多义性,我们需要明确服务和流程所扮演的角色。

  订单流程示意

  图2 订单流程示意

  在BPEL中,这种流程与伙伴的合作关系是通过元素来定义的。这样如果在流程的活动中需要指定与特定伙伴的交互,只需要引用partnerLink的名称即可。而且通过partner links的抽象,在流程建模时,我们不必指定具体的服务端点,而将流程与具体服务的绑定推迟到组装或运行时来完成。这种动态伙伴关系为流程带来了极大的灵活性,也增强了流程的可复用性。比如,我们在开发环境中使用的伪服务实现,在生产环境中无需须修改流程就可以将服务端点替换为主机应用。

  在<PARTNERLINK>元素中,可以通过“myRole”和“partnerRole”属性来定义流程和伙伴的角色。如果流程作为服务的提供者,需要使用myRole属性,而当流程作为服务的请求者时,则使用partnerRole属性。

  partnerLink通过引用partnerLinkType来定义流程与伙伴服务之间的通信接口(实际上是WSDL文档中的Port Type)。伙伴链接类型声明了两个(也可能是多个)服务之间的关系。服务链接类型定义了一组角色,其中每个角色指明一组Port Type,即明确了该角色所提供的服务接口。partnerLinkType通常被定义在WSDL文档中,被BPEL流程所引用。

  下面的代码片段显示了如何利用partnerLink和partnerLinkType定义流程与伙伴的合作关系。我们实现了一个股票购买流程,在这个流程中需要通过伙伴StockQuote获取当前股票信息:

<bpws:partnerLinks>

  <bpws:partnerLink myRole="StockServiceRole" name="StockService" partnerLinkType ="ns:StockServicePLT"/>

  <bpws:partnerLink name="StockQuote" partnerLinkType="ns:PartnerPLT" partnerRole ="partnerRole"/>

  …

</bpws:partnerLinks> 

  我们还需要在流程对应的WSDL文档中定义partnerLinkType:

 

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"  xmlns: plnk="http:// schemas.xmlsoap.org/ws/2004/03/partner-link/" … >

  <plnk:partnerLinkType name="StockServicePLT">

    <plnk:role name="StockServiceRole">

      <plnk:portType name="wsdl0:StockService"/>

    </plnk:role>

  </plnk:partnerLinkType>

  <plnk:partnerLinkType name="PartnerPLT">

    <plnk:role name="partnerRole">

      <plnk:portType name="ns:net.xmethods.services.stockquote. StockQuotePortType"/>

    </plnk:role>

  </plnk:partnerLinkType>

<import location="urn_xmethods-delayed-quotes.wsdl" namespace= "http://www. themindelectric.com/wsdl/net.xmethods.services.stockquote. StockQuote/"/>

</definitions> 


  2.变量(variables)

  在BPEL中,我们可以使用变量来保存和传递流程的状态信息。变量的数据类型由WSDL定义,既可以是XML Schema内置的简单类型,又可以是自定义的复杂数据类型:

<bpws:variables>

    <bpws:variable name="symbol" type="xsd:string"/>

    <bpws:variable name="UserInfo" type="ns1:UserInfoBO"/>

    ...

<bpws:variables>

 
  上面的代码,展示了如何在BPEL中使用元素来定义变量。值得注意的是,与常见的编程语言类似,BPEL中的变量是有作用域的;每个变量只有在定义它的作用域和所包含的作用域内才是可见的。在下面的章节中,我们将介绍如何使用BPEL来操纵和传递数据。

  此外,WS-BPEL提供了一些内置的函数来支持变量内容的处理:

  (1)getVariableProperty(variableName, propertyName)为获取变量属性函数:输入参数为变量名称和属性名称,结果为属性值。

  (2)getVariableData(variableName, partName?, locationPath?)为获取变量数据函数:输入参数为变量名称、part名称,以及XPath表达式,其中partName,和locationPath为可选参数。输出结果为指定变量的全部或部分的数据内容。

  3.活动(Activity)

  BEPL流程是由一系列步骤所组成的,它们被称为活动。WS-BPEL定义了丰富的活动类型,一般来说可以把它们划分为两大类:基本活动和结构化活动。基本活动描述了流程内的一个具体步骤,比如接收请求、调用伙伴服务、变量赋值等。而结构化活动则描述了如何组织和管理流程的控制流。在下面的章节中,我们将对活动进行详细讲解。

  4.关联集合(Correlation Set)

  BPEL提供了声明性机制,以指定服务实例中相关联的操作组。一组相关标记可定义为相关联的组中所有消息共享的一组特性。这样的一组特性称为关联集合。每个关联集都在一个作用域中进行声明并属于该作用域。属于全局流程作用域的关联集称为全局关联集;属于局部作用域的关联集称为局部关联集。在流程开始时,全局关联集处于未初始化的状态。在其所属的作用域的执行开始时,局部关联集处于未初始化的状态。

  相关集在其语义上类似于延迟绑定的常数。相关集的绑定由特别标记的消息发送或接收操作来触发。相关集在其所属的作用域的生存期中只能初始化一次。在初始化之后,它的值就可被认为是业务流程实例的标识别名。在多方业务协议中,相关集合非常有用。初始者流程发送启动会话的第一个消息,从而定义了标记该对话的相关集中的特性值。所有其他参与者通过接收提供相关集中的特性值的传入消息来绑定会话中的相关集。比如一个旅行社订票流程,当该流程启动之后,用户需要能够查询该流程状态,并能取消该流程,这就需要相关集的支持来确保后续的请求消息绑定到相同的流程实例中。

分享到:
评论

相关推荐

    bpel完整实例(webservice+bpel)

    - **CompleteAfterProject5**: 可能是项目"CompleteAfter"的第五个迭代,可能在优化或扩展了前一个版本的基础上增加了新的功能或改进了现有流程。 - **CompleteAfterProject3**: 这是"CompleteAfter"项目的第三个...

    BPEL 1.0 vs 2.0

    1. **基础概念**:BPEL 1.0 是一种基于XML的编程模型,它允许开发者定义和执行复杂的业务流程,这些流程可以调用Web服务并与其他业务活动交互。 2. **流程模型**:BPEL 1.0 使用顺序流程控制结构,包括顺序、并行和...

    bpel primer_(BPEL 2.0 primer_权威).pdf

    他们各自的专业背景和技术经验为BPEL Primer的编写提供了坚实的基础。 #### 五、应用场景示例 - **供应链管理**:企业可以通过BPEL来协调供应商、制造商和分销商之间的复杂业务流程。 - **订单处理**:利用BPEL...

    BPEL2.0及相关规范

    这个规范详细阐述了BPEL的语法、语义、执行模型以及错误处理机制。它使得开发者可以精确地定义流程步骤,控制流程的执行顺序,处理异常情况,并与其他Web服务进行通信。 **wsbpel-v2.0-Primer** 是BPEL2.0的入门...

    eclipse_BPEL_1

    1. **流程设计**:使用WSDL(Web服务描述语言)定义的服务可以通过拖放操作在流程图中连接,形成流程模型。 2. **验证**:验证BPEL流程的语法和结构,确保其符合标准。 3. **调试**:可以在Eclipse内置的调试器中...

    BPEL CookBook

    BPEL是一种用于编排Web服务的编程模型,它允许开发人员将多个服务组合成复杂的业务流程。这本书的出现是为了帮助开发者更好地理解和应用BPEL技术,解决实际工作中遇到的问题,提升业务流程自动化的能力。 BPEL的...

    BPEL的基本思想 实例讲解

    对于初学者来说,理解BPEL的关键在于掌握其流程模型和控制结构。通过与Java的对比,可以更深刻地理解BPEL在业务流程自动化中的优势。在实际操作中,结合实例和练习可以快速上手,并通过BPWS4J等工具进行流程设计和...

    bpel 规范 2.0

    BPEL 2.0的发布,不仅是对BPML(Business Process Markup Language)1.0的一次响应,也预示着BPM行业正逐渐走向统一,各大企业开始寻求共同的业务流程模型。 ### 核心技术与特点 BPEL 2.0基于Web服务的核心技术...

    计算机BPEL简介PPT课件.pptx

    BPEL,全称Business Process Execution Language,是一种用于描述企业级工作流和业务流程的编程模型,主要用于构建服务间的协作。BPEL的核心概念包括合作伙伴链接(partnerLinks)、变量(variables)、相关集...

    SOA+最佳实践_BPEL+指南+企业建模咨询手册

    企业建模有助于识别关键业务流程,发现瓶颈,优化资源分配,以及为SOA设计提供基础。SAP企业建模咨询手册可能包含了如何使用SAP工具进行企业建模的详细步骤和最佳实践。 **SOA架构理念** SOA的架构理念主要包括...

    WS_BPEL标准V1.1

    总之,WS_BPEL标准V1.1作为一项重要的技术规范,为业务流程的标准化、自动化和集成提供了坚实的基础。通过BPMN到WS_BPEL的转换,企业可以更高效地设计、部署和管理复杂的业务流程,进而提升运营效率和响应市场变化的...

    bpel-ruanjian

    2. **BPEL最新进展**:可能包括BPEL的新版本特性、改进的编程模型、更好的错误处理机制,或者与WS-BPEL 2.0等标准的更新有关的内容。 3. **SOA概念**:SOA是一种设计原则,它提倡将应用程序构建为可重用的服务,...

    ws-bpel.pdf

    WS-BPEL 作为一种标准化的业务流程定义语言,为跨 Web 服务的业务流程编排提供了坚实的基础。通过其丰富的功能集和明确的技术规范,开发者能够构建出复杂而灵活的业务应用,同时保持良好的可维护性和扩展性。随着 ...

    BPEL中文文档(企业级培训文档)

    BPEL定义了几个基本元素,如过程、活动、消息交换和变量,这些元素共同构成了一个可执行的业务流程模型。 1. **过程(Process)**:是BPEL中的顶级元素,代表了一个完整的业务流程。它可以包含多个活动,并且可以与...

    在UDDI注册中心中使用BPEL4WS

    由于BPEL4WS抽象流程是在WSDL文档的基础上构建的,因此需要先有一套通用的方法将WSDL描述映射到UDDI模型中。特别是,WSDL端口类型需要在UDDI中被注册和唯一标识。本文档是在“在UDDI注册中心使用WSDL(第二版)”的...

    BPEL与XPDL的区别

    XPDL可以用来导入到BPEL工具中,作为创建BPEL流程的基础,但BPEL不能直接转换为XPDL,因为它包含了执行细节,如服务绑定和错误处理。 在实际应用中,企业可能会先使用XPDL进行业务流程建模,然后将其转化为BPEL,...

    bpel1历史上最完整的绝杀版本教材

    这个压缩包中的所有资源合在一起,构成了一个全面的BPEL学习库,涵盖了从基础概念到高级应用的各个方面,对于希望深入了解和实践BPEL的人来说,是一份不可多得的学习材料。学习者可以通过这些文档深入理解BPEL如何在...

Global site tag (gtag.js) - Google Analytics