架构师:SOA
   下载
 Oracle 业务流程分析套件
 
   标签
soa, bpm, 全部
 

将 BPMN 转换为 BPEL:原因和方法

将 BPMN 模型转换为可执行的 BPEL 流程时,牢记 BPMN 和 BPEL 之间的语义差异很重要。

作者:Lonneke Dikmans  ACE 总监

2008 年 9 月发布

收购 BEA 后,多个新产品加入到了已经存在的 Oracle 业务流程管理 (BPM) 产品系列的 Oracle 业务流程分析套件中。这些新工具现在统称为 Oracle 业务流程管理套件(包括 Oracle Business Process Management Studio,之前称为 BEA AquaLogic Business Process Management Studio),是 Oracle WebLogic 套件的一个选件。

Oracle 业务流程分析套件是新的 Oracle 业务流程管理套件的补充,可用于采用业务流程建模标注 (BPMN) 形式对组织的业务体系结构进行建模。使用 Oracle 业务流程分析套件对业务流程进行建模的优势之一是,可以重用这些说明作为可执行的业务流程执行语言 (BPEL) 流程的蓝图。

但是,您需要了解 BPMN 和 BPEL 之间的一些差异。第一,BPMN 和 BPEL 在 BPM 的生命周期中的应用阶段不同。BPMN 在设计和改进业务流程时使用,而 BPEL 则用于实施。不同的阶段有不同的需求。第二,BPMN 由业务分析人员使用,而 BPEL 由技术分析人员和编程人员使用。他们使用不同的范例,对流程进行建模时关注的问题也各不相同。

在本文中,将通过一个示例进一步说明和阐释 BPMN 和 BPEL 以及这两种语言间的差异。

前提条件:

  • Oracle 业务流程分析套件 10.1.3.3 或更高版本
  • Oracle JDeveloper 10.1.3.3 或更高版本

业务流程管理的生命周期

BPM 是基于业务流程建模流程图的符号,于 2006 年 2 月成为 OMG 最终采用的标准。它涵盖了组织执行的从管理到改进业务流程(如果需要)的各种活动。Oracle 有不同的工具支持 BPM 生命周期中的各种活动:

  • 设计或捕获业务流程 Oracle 业务流程分析套件的一个组件 Oracle Business Process Architect 可以完成这个任务。它支持公司范围内的业务流程、IT 系统、前景展望和组织结构的建模和设计。业务分析人员可以使用 BPMN 或专用的 ARIS 建模语言事件驱动流程链 (EPC) 对业务流程进行建模。Oracle Business Process Management Studio 也可用于此目的;虽然它不常用于正式的公司范围的建模和业务体系结构设计,但可以用在敏捷项目中,在敏捷项目中,唯一的目的就是捕获业务流程本身。
  • 建模或模拟业务流程。 使用 Oracle 业务流程分析套件中的模拟组件可以模拟业务流程。利用该组件,业务分析人员可以通过模拟不同的情形来分析流程。
  • 流程执行 作为 Oracle SOA 套件的一部分,Oracle 提供了 BPEL 流程管理器引擎和 Oracle JDeveloper 来创建 BPEL 应用程序。还可以在 Oracle Business Process Management Studio 中执行流程。(但这不在本文的讨论范围内。)
  • 流程监视 Oracle 提供了业务活动监视工具和多个业务智能 (BI) 解决方案。
  • 流程改进 流程监视的输出是流程改进的输入。可以使用相同的工具进行设计、模拟和执行。

那么,为什么不能使用 BPEL 设计流程呢?BPEL 是一种执行语言,如果用于供业务分析人员来捕获或设计业务流程则显得过于琐碎和专业化。意识到这点后,BPMN 规范委员会试图使用 BPMN 达到两个目标:

  • 设计一种业务分析人员和技术分析人员均可使用的符号。
  • 开发一种可以转换为可执行语言(如 BPEL)的符号。

他们成功实现了这两个目标。业务分析人员可以很轻松地掌握 BPMN,市场上也有很多软件可以将 BPMN 转换为 BPEL。但是在将 BPMN 流程转换为 BPEL 时还有一些问题。导致这些问题的原因各不相同。下面我将主要介绍这两种建模语言并重点说明它们之间的差异。

了解 BPMN

BPMN 中的业务流程图 (BPD) 包括流对象、连接对象、泳道和构件。规范定义了 BPD 的符号和语义。Oracle 业务流程分析套件并非完全符合 BPMN 标准。在本节中,我将更加详细地描述这些元素,并讨论如何使用 Oracle 业务流程分析套件对该流程进行建模。

流对象

有三种类型的流对象:活动、事件和网关。

活动

活动是在业务流程中执行的工作。有三种类型的活动:任务、循环活动和子流程。正如规范所描述的那样,子流程不出现在 Oracle 业务流程分析套件中,但可以通过编辑 BPMN 的属性在该套件中对子流程进行建模。循环活动亦是如此。

在不影响图表所占资源的情况下,供应商可以使用 BPMN 工具将标记或图标添加到任务中。在 Oracle 业务流程分析套件中,通过以下对象来表示任务:函数、自动化活动、通知、人工任务和业务规则函数。

事件

事件是在业务流程中发生的事情。它通常由某件事情触发和/或产生某个结果。事件的类型取决于在业务流程中的位置。有三种类型的事件:起始事件、中间事件和结束事件。在 BPMN 中,可以使用属性对话框对触发器和结果进行建模。

网关

网关是最后一类流对象。网关有不同的类型。它们合并或分散流程。如果不需要控制流,那网关也无需存在。在 Oracle 业务流程分析套件中,可以建模 XOR(异或)网关(基于数据和基于事件)、OR、AND 和复杂的网关。

连接对象

连接对象可以是顺序流(连接两个活动的连接器)、消息流或关联流。

泳道

BPMN 中有两种类型的泳道:池和道。池用来标记组织的边界。池之间通过消息流交互。禁止顺序流跨越池边界。这意味着流程总是完全包含在池中。可以用道来分割池 — 例如,在组织内标记不同的组织角色。顺序流可以跨越道。

构件

BPMN 中的最后一类对象是构件。有三种类型的构件:数据对象、组和注释。Oracle 业务流程分析套件不支持注释和组。数据对象有多种类型:person 类型函数、数据集群等。

BMPN 示例

了解了 BPD 上可能出现的对象后,我们从一个示例开始。在本例中,我们对将一篇文章发表到 Oracle 技术网 (OTN) 的部分流程建模。

摘要获得批准后,流程开始。将其建模为附有消息的起始事件。在 BPMN 属性触发器/结果中选择 Message 时,会出现标记器。

文章已写好并提交给编辑。构件文章用于描述信息载体。然后,作者等待审查结果。收到带有审阅意见的文章后,作者查看意见。根据结果的不同,流程结束或文章得到编辑后重新提交给编辑。该建模过程通过“异或数据”网关和一个流 到“编辑文章”的顺序流来完成。文章发表后,流程结束。

如您所见,这里有三个事件:起始事件、中间事件和结束事件。此处的网关类型是“异或”。有三个活动,均为任务。所有的流对象均使用顺序流相连。有两个构件:发送到 OTN 的文章和发送到作者的审阅意见。使用关联将它们连接到任务。
在此图表中,可以添加两个池:一个用于作者,一个用于 OTN。为使示例简洁,在本示例中您不必这样做。

通常在流程模型中要识别不同级别的抽象。最详细的流程包含将流程链接到 IT 系统的信息;抽象程度高的模型则不包含。

这些流程模型的目标是虚拟化组织中的业务流程。这些模型可用于不同的目标:使用 IT 服务实现流程自动化以支持并改进流程,为雇员撰写说明,向审计人员彰显合规性以及洞察业务。在本文中,您将使用模型自动化并监视流程。要达此目的,需要将模型转换为可执行语言 BPEL。进行此操作前,需要创建一个流程变量,附有转换任务所需的实施细节。将人工任务“撰写文章”和“审阅修改”创建为活动。这样,我们可以监视最终期限并跟踪状态。将“提交文章”转换为通知。

BPEL

BPEL 包括基本活动和结构化活动、变量、合作伙伴链接以及处理程序。它使用 XML 来描述这些事物。Oracle SOA 套件 10g 支持 BPEL 1.0。此外,Oracle 添加了规范中没有的扩展功能。最新的规范是最终的 BPEL 2.0 规范;可以在 OASIS 站点上查到。

活动
BPEL 中有两种类型的活动:基本的和结构化的。Oracle SOA 套件 10g 中提供的基本活动包括 invoke、receive、reply、assign、throw、wait、terminate 和 transform。结构化活动用于组合基本活动。Oracle SOA 套件 10g 支持以下活动:sequence、flow、flowN、switch、while 和 pick。

变量
变量用于存储交换的消息和流程的状态。有三种类型的变量:

  • 简单类型。 该类型的变量包含 XML 模式的简单类型(例如字符串、日期等)
  • 消息类型。该类型包含一个 WSDL 消息。
  • 元素。 该类型包含一个 XML 模式元素。

可以在流程开始时(全局变量)或在某个作用域内声明变量。

合作伙伴链接
到 BPEL 流程与之交互的各方的链接称为合作伙伴链接。合作伙伴可以调用 BPEL 流程,可以被 BPEL 流程调用或拥有双重角色。

处理程序
处理程序在发生错误时使用(错误处理程序),以响应事件并进行补救。

BPEL 示例
在 Oracle SOA 套件的示例目录中,有一个非常简单的示例展示了我们刚才谈论的一些概念:

<!-- HelloWorld BPEL Process -->
<process name="HelloWorld"
         targetNamespace="http://samples.otn.com/helloworld"
         suppressJoinFailure="yes"
         xmlns:tns="http://samples.otn.com/helloworld"
         xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
         xmlns:bpws="http://schemas.xmlsoap.org/ws/2003/03/business-process/"
         >
         
    <!-- List of services participating in this BPEL process -->    
    <partnerLinks>
        <!--
        The 'client' role represents the requester of this service. It is 
        used for callback. The location and correlation information associated
        with the client role are automatically set using WS-Addressing.
        -->
        <partnerLink name="client"
                     partnerLinkType="tns:HelloWorld"
                     myRole="HelloWorldProvider"
                     partnerRole="HelloWorldRequester"
                     />
</partnerLinks>
  
<!-- List of messages and XML documents used as part of this 
BPEL process 
         -->    
<variables>
<!-- Reference to the message passed as input during initiation -->
<variable name="input"
messageType="tns:HelloWorldRequestMessage"/>
                  
<!-- Reference to the message that will be sent back to the 
requestor during callback
             -->
<variable name="output"
messageType="tns:HelloWorldResultMessage"/>
</variables>

<!-- Orchestration Logic -->
    
<sequence>
        
<!-- Receive input from requestor. 
Note:This maps to operation defined in HelloWorld.wsdl 
             -->
<receive name="receiveInput" partnerLink="client"
portType="tns:HelloWorld"
operation="initiate" variable="input"
createInstance="yes"/>
        
<!-- Generate content of output message based on the content of the
input message.
             -->
<assign>
<copy>
<from expression="concat('Hello ',bpws:getVariableData('input', 'payload','/tns:name'))"/>
<to variable="output" part="payload" query="/tns:result"/>
</copy>
</assign>

<!-- Asynchronous callback to the requester.
Note:the callback location and correlation id is transparently handled 
using WS-addressing.
             -->
<invoke name="replyOutput" 
partnerLink="client"
portType="tns:HelloWorldCallback"
operation="onResult" 
inputVariable="output"
                />
</sequence>
</process>

如您所见,这是个异步的 BPEL 流程接收存储在变量“input”中的消息。然后,该流程将“Hello”和消息负载的连接结果分配给变量“output”。 然后将其通过 invoke 活动返回给请求方。

本例中有一个合作伙伴链接:调用流程的同一客户端接收响应。
此处的目标不是对流程建模而是执行流程。BPEL 在两种情况下非常有用:执行长时间运行的业务流程或创建一个组合服务。

BPEL 没有 Goto

现在,我们已经对两种语言都进行了讨论,下面将重点讨论从 BPMN 向 BPEL 的转换。

Oracle 业务流程分析套件在从 BPMN 图表生成 BPEL 流程时通常会使用以下映射:

  • 将所有活动(自动化、函数、通知等)都映射到一个作用域。并生成相应的服务。例如:生成通知服务以及调用此服务的 BPEL 构件。
  • 除非没有定义触发器,否则将起始事件转换为 receive 活动。如果定义了“multiple”类型的触发器,则会生成 pick 活动。将计时器消息转换为另一个流程用以调用生成的接收消息。
  • 将结束事件转换为 invoke 活动、reply 活动、throw 活动、compensation 元素和 terminate 活动等。活动的类型取决于结果类型。如果没有对结果类型建模,则 BPEL 不生成任何活动。
  • 根据网关类型和流经网关的流对象类型的不同,将网关转换为 switch、pick、或 flow 活动。
  • 泳道不映射到 BPEL。
  • 连接对象通常不映射到 BPEL。(参见规范中的一些特例 — 例如什么时候使用流。)
  • 业务数据映射到变量。
  • 子流程不映射到 BPEL 作用域而映射到 invoke 活动。

BPMN 规范在附录 A 中对该映射进行了详细解释。这个映射不完整,所以不同的工具运用的转换规则不同也就不足为奇。

示例应用程序

要使用 Oracle JDeveloper 和 Oracle 业务流程分析套件对此进行测试,首先将 SOA 配置文件导入 Oracle 业务流程分析套件,然后将 BPMN 图表转换为 BPEL。然后,转到 Oracle JDeveloper,为 Oracle JDeveloper 安装 Oracle 业务流程分析套件插件,并根据蓝图启动一个项目。我们将使用上一段中的流程示例。首先,向流程中添加一些细节。决定实施流程后,需要确定哪些活动是自动化活动,哪些活动是人工任务,哪些消息需要交换等。

  1. 从该示例导入数据库。
    1. 单击 explorer 图标进入 Explorer 视图。
    2. 右键单击 LOCAL 并选择 Restore…
    3. 浏览至包含在示例代码中的 OTN.adb 并单击 OK
  2. 导入 SOA 配置文件。
    1. 在 OTN 数据库中要导入 SOA 配置文件的位置创建一个新组,并将其命名为“SOA profiles”。
    2. 右键单击 SOA Profiles 并依次选择 SOAImport SOA profiles...。(参见下图)
    3. 当系统询问是否使用当前选择的组时,回答 Yes。配置文件成功导入后,您会收到通知。
  3. 生成 BPEL 流程。
    1. 浏览至之前创建的流程 (WriteAndReviewArticle)。
    2. 右键单击 claims 流程,然后依次选择 SOATransform business process into BPEL process...
    3. 单击 Yes 验证业务流程。
    4. 接受所有的默认设置,然后单击 Finish
  4. 查看生成的 BPEL。
    1. 右键单击流程。
    2. 选择 Go to BPEL process

    现在我们已经创建了框架或蓝图,需要将其导入到 Oracle JDeveloper,以便可以使其成为一个可执行流程并输入详细信息。

  5. 在 Oracle JDeveloper 中安装 Oracle 业务流程分析套件插件。
    1. 将 pcbpel_bundle.zip 解压缩到 <JDev 主目录> 文件夹。
    2. 重新启动 Oracle JDeveloper。
  6. 创建一个到 Oracle 业务流程分析套件服务器的连接。
    1. 浏览至 Connections Navigator。
    2. 右键单击 Oracle BPA Server 并选择 New BPA Server Connection...
    3. 输入设置(在本示例中,使用本地的 Oracle Lite 服务器,默认的用户名/口令为 system/manager)。
    4. Test 选项卡上测试连接。
  7. 根据蓝图,创建一个新的 BPEL 项目。
    1. 依次选择 New...BPEL Process project
    2. 在向导中选择 Existing Blueprint
    3. 单击 Browse BPA Server 图标,从列表中选择蓝图。
    4. 选择 WriteAndEditArticle 蓝图。
    5. 单击 Next
    6. 保留默认的输入和输出元素,并选择 Finish

现在 Oracle JDeveloper 中已经有框架 BPEL 流程了。开发人员向该流程中添加实施细节。模型结构受到保护:开发人员可以在现有的作用域之间添加新的作用域,但不能删除任何现有的作用域。可以从 Oracle JDeveloper 导入新版的 BPMN 模型。

通过 Oracle JDeveloper 进行的流程更改在通过 Oracle JDeveloper 上载后,在 Oracle 业务流程分析套件中显示并视为改进建议。在 Oracle 业务流程分析套件的 explorer 视图中可以找到它们。

处理不兼容的流程

在尝试将有效的 BPMN 模型转换为 BPEL 流程和发生错误时,这是常见的故障。通常在两个或两个以上的活动流 到前一个活动时发生。原因是 BPMN 支持任意循环,而 BPEL 仅支持结构化循环,即一个入口点和一个出口点 (while)。

假设流程发生变化,需要扩展我们的示例:如果提交没有修订的文章,则无需将修改意见发送给作者就可立即发表。流程如下:

如果验证该业务流程,Oracle 业务流程分析套件会通知您这个 BPMN 图表是有效的。但当您将其转换为 BPEL 流程时,收到如下错误:

如您所见,是个语义错误:这是有效的 BPMN,但却无法转换成 [ Q:“into”?]BPEL。图表显示在撰写文章活动上出现一个错误:

有多个方案可以解决此问题。通常,解决该问题的最佳方法是从流程中去除一般化。在 IT 系统中进行的一般化不属于业务流程。例如,在业务流程中,首次(撰写并提交文章)和后续操作是有区别的。虽然无法避免首次编辑和审阅,但此后的编辑操作应该尽可能少。因此,我们创建了新的活动(称为修改文章),来代替编辑文章。在 IT 系统中执行这些活动时,我们显然希望复用组件和服务。我们还添加了一个事件来表明我们期待修改或出版消息。最终,我们还更改了审阅流:即使作者同意编辑所做的所有修改,也需要明确地批准更改。总的说来,模型变更如下:

  1. 添加了网关以反映来自出版商的不同消息:修改消息和出版消息。
  2. 添加了额外的活动:接受修改。
  3. 添加了额外的活动:修改文章(代替编辑文章)。
  4. 添加了额外的活动:重新发送文章(代替发送文章)。

这个流程流还相对容易理解。现在可以生成蓝图并在 Oracle JDeveloper 中进行编辑。最终的 BPEL 有点复杂。需要注意的是:BPMN 图表中的流和循环越多,在对应 BPEL 中的差异就越多。也可以用本质上为纯技术的分配和复制操作来扩展 BPEL 模型。模型的形状各异导致开发人员和企业之间的交流变得更加困难,也加深了解决问题、添加特性和改进业务流程的难度。这是在 Oracle 业务流程分析套件中设计流程时需要考虑的问题。以块的形式和不同的抽象级别组织流程可以显著减少 BPMN 和 BPEL 之间的差异。
此处给出的解决方案显然仅适用于可以重新编写业务流程的情况。有时,流程中包含 go-to 语句。这种情况下,使用 Oracle BPM studio 来实施业务流程可能更轻松。

结论

本文介绍了在 Oracle 业务流程分析套件中通过生成蓝图将 BPMN 模型转换为可执行的 BPEL 流程的方法。使用这个方法时,务必牢记 BPMN 和 BPEL 之间的语义差别。一般化仅限于技术模型:BPEL 和服务。这使得流程更易于更改和转换为 BPEL。

阅读更多内容:

  • Oracle 业务流程分析套件快速入门指南
  • Recker, J., Indulska, M., Rosemann, M., Green, P. (2005): Do Process Modelling Techniques Get Better?A Comparative Ontological Analysis of BPMN。出自 B. Campbell, J. Underwood, D. Bunker (eds.):第 16 届澳大利西亚信息系统会议记录。信息系统协会的澳大利西亚章节,澳大利亚悉尼。(http://eprints.qut.edu.au/archive/00002879/01/Recker_et_al-ACIS2005b.pdf)
  • IBM 软件集团的 BPMN 指南 ( www.bpmn.org/Documents/OMG%20BPMN%20Tutorial.pdf)

Lonneke Dikmans 是 Oracle ACE 总监,在一家专门从事 SOA 和 BI 的荷兰 IT 公司 Approach Alliance 管理合作伙伴。