消息相关性是允许流程参与有状态会话的 BPEL4WS 机制。消息相关性有多种用途,例如,可以用它将回头客或已知客户匹配到长期运行的业务流程。当针对某一项用 BPEL 实现的 Web 服务的的消息抵达时,必须将该消息传送到适当的地方 - 不是传送到流程的新实例,就是传送到现有实例。消息相关性所要解决的问题是确定一条消息属于哪个对话,在 BPEL 中,此项任务即是指定位/实例化一个实例。
在许多分布式对象系统中,路由一条消息要涉及的一个方面就是检查消息的显式 instance ID,后者标识目的地。尽管路由过程很相似,但 BPEL 实例不是由一个显式的实例字段标识,而是由所交换的消息中的一个或多个关键字数据字段集合来标识。例如,在订单处理系统中,可以用订单号来标识流程的一个特定实例。在 BPEL 术语中,这些用于标识流程实例的数据字段的集合被称为相关集。
每个 BPEL 相关集都有一个与之相关联的名称,该名称由一些用 WSDL 定义的属性组成。 属性在 WSDL 文档中定义,是具有名称的类型化数据元素,它的值通过应用一个特定于消息的 XPath 表达式从 WSDL 消息的实例中提取而得。在 WSDL 中,用 propertyAlias定义每一个这样的映射。由于这些映射是特定于消息的,因此单个 属性可以有多个与之相关联的 propertyAlias。例如,一个 WSDL 文档可能陈述属性 name同时对应于 WSDL 消息 loginmsg中的 username部件和 WSDL 消息 ordermsg中的 lastname部件。通过同时使用属性和 propertyAlias,BPEL 创作者们就可以以一致的方式来引用信息中的单个逻辑片段,即使这一片段在一组消息中可能以不同的形式出现。
要使用相关集,BPEL 创作者可以通过枚举组成该集合的各属性来定义相关集,然后从 receive、 reply、 invoke或 pick活动引用该集合。BPEL 运行时使用这些定义和引用来确定它所感兴趣的信息片段,并在执行流程的不同阶段检查这些片段。流程的每个实例都会实例化为流程定义的每一个相关集。每个实例化(的过程)在流程实例的执行过程中恰好被初始化一次,随后仅在涉及到比较传入和传出消息时被使用。如果试图重新初始化一个相关集,或者使用一个未被初始化的相关集,那么运行时将会抛出一个 bpws:correlationViolation。提取由活动引用的相关集的值,无论是为了初始化还是为了比较,都会涉及到为组成该被引用的相关集的每个属性应用 processAlias(这个 processAlias 与正被检查的特定 WSDL 消息相对应)。
因为 receive和 pick活动提供进入流程的入口点,所以相关集常常会出现在这些活动中,以支持消息到实例的路由。如果一个相关集出现在 receive或 pick活动中,并且没有将 initiation属性设置为“yes”,那么当调用那个特定的 receive或 pick活动的消息抵达时,该活动就从传入的消息中提取组成该相关集的各属性的值,并将所提取的值与存储在那个流程的所有实例中的用于同一个相关集的值进行比较,然后将这个消息路由到有匹配值的实例中。类似地, reply和 invoke活动(这两种活动用于处理出站操作)中的相关集常常被用来验证传出消息中包含的数据和指定相关集实例中包含的数据是一致的。例如,如果一个相关集出现在 reply活动中,并且没有将 initiation属性设置为“yes”,那么该活动就从传出消息中提取组成该相关集的各属性的值,并将这些值与所存储的针对该实例的已实例化的相关集的值进行比较。如果发现对应于相关集的消息中的值和那些包含在实例的相关集中的值不同,那么运行时就会抛出一个 bpws:correlationViolation。在可以出现相关集的所有活动中, initiation属性用来告诉运行时应该使用输入到当前活动的消息中所包含的值来初始化相关集。在 invoke活动中出现的相关集还有另一个属性 pattern,它指定在 invoke活动执行过程中所要应用的相关集。 pattern属性可以取值“in”,表示要在针对调用的响应返回的时候应用这个相关集,也可以取值“out”,表示在开始进行调用的时候就应用这个相关集,或者取值“both”,这自然表示在两个阶段都要应用这个相关集。
在单个活动中可以出现多个相关集,其中一些被初始化,一些用来作比较。目前的 BPEL 规范没有定义根据多个相关集定位一个实例的语义。
转自:http://blog.csdn.net/lggeor/archive/2007/11/05/1867005.aspx
分享到:
相关推荐
相关集合是BPEL中用于关联消息和活动的一种机制,它可以将消息与特定的流程实例关联起来。这在处理异步通信或者需要按照特定顺序处理消息的情景下非常有用。例如,在一个订单处理流程中,多个订单请求可能同时到达,...
BPEL流程通常由一系列活动构成,如:Invoke(调用Web服务)、Receive(接收消息)、Assign(数据赋值)、Wait(等待)、Pick(选择路径)等。这些活动通过顺序、并行、条件分支等方式连接,形成一个完整的业务流程...
BPEL4WS流程由一系列活动构成,如`invoke`调用服务、`receive`接收消息、`reply`响应消息、`assign`赋值、`if`条件判断、`while`循环等,它们共同构成了流程的控制流。 通过BPEL4WS,开发者能够创建复杂的业务流程...
- **抽象业务协议**:仅描述双方之间的消息交换,不包含流程细节,适用于编排模式。 #### 四、BPEL实例教程 **步骤1:构建业务流程** - **流程定义**:使用BPEL定义流程中的各个步骤,包括顺序执行、条件分支、...
1. **消息交换**:定义了如何在不同的Web服务之间进行消息传递。 2. **活动与流程控制**:支持条件分支、循环和其他流程控制结构,使流程更加复杂多变。 3. **错误处理**:提供了丰富的错误处理机制,确保流程在遇到...
### BPEL的一个运行实例 #### 1. 前言 ##### 1.1. 前提条件 本文档假设读者已经具备基本的Java编程基础、了解Web服务的基本概念以及熟悉Eclipse IDE的使用。 ##### 1.2. 目标 本教程旨在通过一个具体的例子来介绍...
- `correlationSets`: 管理消息的相关性。 - `faultHandlers`: 处理流程中可能出现的异常。 - `compensationHandlers`: 定义流程补偿机制。 - `eventHandlers`: 处理流程中的事件。 ### BPEL的主要活动 BPEL的活动...
- **消息交换(Message Exchange)**:描述了服务间的数据传输。 - **合作伙伴链接(PartnerLink)**:定义了流程与其他服务或流程的交互方式。 - **变量(Variable)**:用于存储数据和临时结果。 - **事件(Event...
### BPEL 2.0规范详解 #### 一、概述 《BPEL 2.0规范(中文版)》定义了一种基于Web服务的业务流程语言——Web服务业务流程执行语言(WS-BPEL),该语言允许设计者描述业务流程,并通过专门的Web服务接口实现流程的...
`FunctionProcess`文件可能包含了定义函数流程的开始事件、接收请求的接收到消息活动、调用`FunctionService`的服务操作、计算结果的业务逻辑、发送响应的消息活动,以及流程的结束事件。每个活动都有其特定的属性和...
### BPEL学习心得笔记 #### 一、BPEL基本概念及活动类型 BPEL(Business Process Execution Language)是一种用于定义业务流程的标准语言,主要用于编排Web服务以实现复杂的业务逻辑。根据给定的部分内容,我们...
Eclipse BPEL 使用详解 Eclipse BPEL 是一种基于 Eclipse 的业务流程执行语言(BPEL),它提供了一个基于标准的业务流程管理解决方案。下面是 Eclipse BPEL 的使用详解。 一、 环境配置 Eclipse BPEL 需要在 ...
这些链接可以定义服务角色和服务端点,以实现服务之间的消息交换。 4. **变量和数据处理**:BPEL流程可以处理XML数据,变量用于存储中间数据。开发者可以使用XPath或XSLT进行数据的读取、转换和操作。 5. **错误...
- **集成能力**:能够与现有的企业应用和服务无缝集成,如Web服务、数据库、消息队列等。 #### 四、ORACLE BPEL Process Manager开发指南 1. **环境搭建**:详细介绍如何安装配置ORACLE BPEL Process Manager开发...
**BPEL2.0(Business Process Execution Language 2.0)**是Web服务业务流程执行语言的第二版,它是一种用于编排Web服务的XML格式的语言,主要用于定义和执行复杂的业务流程。BPEL2.0是SOA(Service-Oriented ...
Eclipse BPEL是基于Eclipse IDE的业务流程执行语言(Business Process Execution Language)开发工具。这个压缩包“eclipse_BPEL_1”显然包含了安装好BPEL插件的Eclipse集成开发环境,方便那些无法在线安装BPEL插件...
**标题:“eclipse_BPEL_6”** **描述:“安装好BPEL插件的eclipse,适合没有网在线安装插件的同学”** 本文将详细介绍如何在Eclipse集成开发环境中安装并使用BPEL(Business Process Execution Language)插件,...
- **消息传递:** BPEL流程依赖于WSDL描述来与外部Web服务进行消息交换。 #### 九、总结 BPEL作为一种强大的工具,不仅能够帮助组织实现业务流程的自动化和标准化,还能够在不断发展的Web服务环境中保持灵活性和...