用Eclipse执行业务流程

开始之前

本教程面向的读者包括:希望了解业务流程建模符号(Business Process Modeling Notation,BPMN)和业务流程执行语言(Business Process Execution Language,BPEL)XML 格式的人员,使用 Eclipse SOA Tools Platform. BPMN Modeler 对业务流程建模、将 BPMN 转换成可以部署到 Apache Orchestration Director Engine (ODE) 上的 BPEL 可执行文件的人员。使用这些流程和技术允许您建立可以快速验证的业务流程。

关于本教程

本教程将向您展示如何使用 Eclipse SOA Tools Platform. (STP) 建模业务流程,然后借助 Eclipse ATLAS Transformation Language (ATL) 项目把产生的业务流程建模符号文件转换成业务流程执行语言,再将其部署到 Apache Orchestration Director Engine (ODE) 上。

本教程中建立的流程模型模拟一个网上冲浪者到一个 Web 站点购买玩具的过程。流程过程是这样的:从一个送货评估程序开始,然后检出成功的订单、通过电子邮件将发票寄给客户,并启动玩具的送货流程

在本教程中,您将了解如何完成以下操作:

安装 Eclipse STP、Eclipse ATL、BABEL BPMN2BPEL 工具和 Apache ODE

在 Eclipse STP 中建立业务流程模型

将 Eclipse STP 的 BPMN 格式转换成 BABEL 的 BPMN 格式

将 BABEL 的 BPMN 格式转换成 BPEL

创建 Apache ODE 部署描述符

为业务流程编写 Web 服务定义语言(Web Service Definition Language,WSDL)

准备生成的 BPEL 以供部署

部署到 Apache ODE 上

系统要求

本教程要求同时使用若干项技术。例如,Apache ODE 要求使用 Apache Tomcat 之类的 Web 容器。下面是完整列表:

Classic Eclipse Eclipse 是运行 Eclipse SOA Tools Platform. Project (STP) 插件的主要平台。获取 Eclipse Classic 的最新版本,本教程中使用 V3.3.1。Eclipse SOA Tools Platform. (STP) 在这里可以找到用 STP 进行开发所需的所有核心插件。本教程使用的是 VI200710300730。注意,有多个插件及不同的下载可用,因此请确保选择 SOA Tools Platform. All-In-One Packages 标题下的 all-in-one 包。此包包括 Requirements 标题下列出的所有依赖性。Eclipse ATLAS Transformation Language (ATL) 您将使用 Eclipse ATL 项目执行 Eclipse STP 的 BPMN 到 BABEL BPMN 的转换。本教程将使用 ATL Ready-To-Use Bundles 标题下的名为 ATL Bundle 2.0 Standard Version 的版本。BABEL 工具 要把 BABEL BPMN 格式转换成 BPEL,必须使用这些辅助工具。您需要下载 BPMN2BPEL 项目符号下的 Java™ 二进制文件(JAR 文件)。您也可以查找可下载的示例和有用的源代码。Apache Orchestration Director Engine (ODE) 在业务流程开发完成后需要使用 Apache ODE 部署业务流程。下载 WAR 分发文件。本教程将使用 V1.1。Apache Tomcat 本教程将使用 Apache Tomcat 作为 Apache ODE 的 servlet 容器。但是,也可以使用其他软件,例如 Jetty。下载核心 ZIP 文件。本教程将使用 V5.5.25。Java 技术 本教程中使用的所有工具需要 Java 技术。本教程使用的是 Java 6 Update 3。操作系统 您需要能够运行以上所有软件的操作系统。本教程使用的是 Windows®,但是也可以使用最新版本的 Mac OS X 或 Linux®,只需相应地调整文件的位置。

您将首先详细了解所有这些工具的安装,然后再了解如何开始使用这些工具。

简介

业务流程是面向服务架构(Service-Oriented Architecture,SOA)的主要部分,并使用标准的 XML 定义 BPMN 和 BPEL 创建。在本小节中,您将了解业务流程如何融合到 SOA 模型以及关于两个业务流程 XML 标准(BPMN 和 BPEL)及其关系的更多信息。

面向服务的架构

SOA 由若干个可访问的服务构成,这些服务可通过 Internet 彼此交互。SOA 十分易于维护和部署,因为它每次只执行一项服务。如 WSDL 所定义,业务流程具有自己的服务端点,可以通过 Internet 彼此交互并交换数据,因此可以轻松地融入到 SOA 模型中。

在接下来的两个小节中,您将了解业务流程建模和执行格式:BPMN 和 BPEL。

业务流程建模符号

BPMN 实质上使用 XML 格式定义业务流程的任务、实体和它们之间的弧线(任务流程)。BPMN 是使用 Eclipse STP BPMN Modeler 创建的模型将被转换成的语言。业务流程的图形表示可以更好地解释这一概念。

图 1. 业务流程模型

图片显示了一个业务流程的横向流程,它被分为三块并按顺序垂直摆放。在图 1 中,业务流程的模型是使用 Eclipse STP BPMN Modeler 创建的,您稍后将使用该工具。您可以看到流程从左侧的空白圆开始,使用箭头/弧线把流程导向右侧,最终在右侧的空白圆处结束。

BPMN 只是使用 XML 格式的描述,例如,图 1 中所示的模型。它包含与节点对应的顶点和与箭头/弧线对应的 sequenceEdges。看看清单 1 中每个元素的示例。

清单 1. 示例顶点和 sequenceEdges

  

顶点 实质上是节点或任务,在图 1 中显示为圆、菱形和四方形。在清单 1 中,您可以看到它们具有标识符,以及一组连出去的(outgoing)边和连入(incoming)的边。标识符仅为顶点提供一个 ID,可以引用为 sequenceEdges 的来源和目标(图 1 中表示为从顶点指向顶点的有向箭头)。每个 sequenceEdges 中的重要信息是指定源顶点和目标顶点的源属性和目标属性。请注意,此文件格式在 Apache ODE 上是不可执行的,因为它只是业务流程的模型,因此您将使用 Eclipse ATL 项目和用 BABEL 编写的开源工具把该模型转换成可执行模型。

业务流程执行语言

顾名思义,BPEL 可以在诸如 Apache Orchestration Director Engine (ODE) 之类的流程引擎上执行。

BPEL 与 BPMN 之间的差别在于 BPEL 更有组织,是一种可按定义执行的语言。BPEL XML 文件不包含顶点和 sequenceEdges,而包含指令序列,这些指令包括调用 Web 服务操作和一些语句,比如若条件一直为真(参见清单 2 中 开始标记之后的 … 标记),则可以反复执行代码序列的 while 循环,以及 if else-if else 语句。

在图 1(第 2 部分)中,有一个反向弧线的实例。这是使用 BPMN Modeler 编写 while 循环的方法。在那里,您将看到两个标签为 while1 和 while2 的顶点,这两个顶点将有助于对流程进行正确划分(while1 将把两条输入边合并为一条输出边,而 while2 将获取一条输入边并将其分为两条输出边)。while 循环的条件是由 while_ok 定义的,并且如果条件一直为真,则将反复执行 shippingEstimator 任务。当同一条件不再为真时,执行将中断并且转而执行签出(checkout)任务。

要了解如何用 BPEL 表示上面的 while 循环模型,请查看清单 2。

清单 2. BPEL 中的示例 while 语句

          getVariableProperty(shippingEstimator_data_in,Message)="true"                                        

在这里,您可以看到图 1(第 2 部分)中所示的 while 循环模型是按照 BPEL 格式编写的,这与用其他编程语言编写的 while 循环相同,不同之处是这个循环模型使用 XML 进行定义。稍后您将再次看到这个代码片段,并通过它了解关于其他 BPEL 结构的更多信息。

注意,以上 BPEL 不可用于单独部署,因为它需要部署描述符和 WSDL 来定义业务流程的服务端点,您需了解这一点以便创建到 Apache ODE 的无错部署。

总结:BPMN XML 用节点和边定义业务流程的图形化模型;而 BPEL 使用了诸如 while 循环和 if 语句之类的可执行结构以及可对现有 Web 服务调用操作的语句,定义业务流程的可执行模型。

您将建立的业务流程模型是一个将玩具添加到购物车中的简单流程。用户可以选择使用送货评估程序(清单 2 中所示的 while 循环)、检出订单(可能被拒绝,也可能被接受),如果订单被接受,则向客户发送一张发票,并把订单放到送货队列中。

接下来,您将安装所有必备工具,以便可以快速开发业务流程。

快速安装指南

要开始开发业务流程,需要快速安装本文 “系统要求” 小节中列出的所有工具。

Eclipse SOA Tools Platform. (STP) 包含用于建模玩具购买业务流程的 BPMN Modeler(如图 1 中所示)。BPMN Modeler 的输出是模型的 BPMN XML 描述。Eclipse ATLAS Transformation Language (ATL) 把 XML 模型从一种模型转换成另一种模型。您将使用它把 BPMN 输出从 STP 转换成 BABEL 工具可读的 BPMN。BABEL 工具 这是一个 Java 命令行工具,用于把 BABEL BPMN 转换成初步的 BPEL 格式(将进行整理)并稍后提供部署描述符和 WSDL 格式。Apaches Orchestration Director Engine (ODE) 和 Tomcat Apache ODE 将在 Apache Tomcat 内运行。您随后将在 Apache ODE 中部署 BPEL 并且 Apache ODE 附带了可供执行的支持文件。

安装 Eclipse STP

Eclipse SOA Tools Platform. (STP) 是包含了本教程对业务流程建模所需的 BPMN Modeler 的核心工具。在继续安装 Eclipse STP 之前,您需要获取 Classic Eclipse 和 Eclipse STP All-In-One。

要进行安装,必须按顺序执行以下说明:

把 Classic Eclipse 解压缩到程序目录中。

把 Eclipse STP All-In-One 解压缩到程序目录中(如果系统询问,请单击 overwrite all)。

注意,把 Eclipse STP 文件解压缩到与 Classic Eclipse ZIP 文件相同的目录将覆盖 Classic Eclipse 目录中的各个文件,从而有效地合并两者。现在将 Eclipse 目录重命名为 STPbpmn_eclipse。在 Windows 中,运行 STPbpmn_eclipse/eclipse.exe。

安装 Eclipse ATL

Eclipse ATL 项目是用于把 STP BPMN XML 文件转换成 BABEL BPMN XML 文件的工具。您应当已经下载了一个可立即使用的 ATL 包(在 Windows 中,该文件名为 ATL_Bundle_2.0.0RC2_Windows.zip)。把此文件解压缩到程序目录中,把 eclipse 目录重命名为 ATL_eclipse,现在,Eclipse ATL 安装完毕。

要在 Windows 中启动 Eclipse ATL,运行 ATL_eclipse/eclipse.exe。

安装 BABEL 工具

您将使用下载的 BABEL JAR 文件把 BABEL BPMN XML 转换成 BPEL。您将在命令行中激活此工具,因此将其保存到程序目录中名为 babelBPMNtoBPEL 的目录中。

安装 Apache ODE 和 Tomcat

由于 Apache ODE 将在 Tomcat 内运行,因此首先安装 Apache Tomcat。要安装 Tomcat,只需把从 Apache.org 下载的 ZIP 文件 (apache-tomcat-5.5.25.zip) 移到程序目录中。现在把它解压缩并把 CATALINA_HOME 设为环境变量 (c:/apps/apache-tomcat-5.5.25)。要在 Windows 中执行这些操作,请单击 Start > Control Panel。切换到 Classic View,然后单击 System。在弹出的窗口中,单击 Advanced 选项卡,然后单击 Environment Variables。在 “User variables for …” 下,单击 New 并输入新环境变量,其变量名为 CATALINA_HOME 并且变量值为 Tomcat 主目录的路径。

现在单击 OK,再单击 OK,然后再单击 OK。Tomcat 的安装应当完毕。

现在,安装 Apache ODE 就十分简单了。首先把下载的文件 (apache-ode-war-1.1.zip) 解压缩到程序目录中,从 apache-ode-war-1.1 目录中提取 ode.war,并将其复制到 Tomcat 中的 webapps 目录中。

Apache ODE 和 Tomcat 准备好运行。接下来,您将开始使用 Eclipse STP BPMN Modeler。

使用 Eclipse STP BPMN Modeler

STP BPMN Modeler 非常易于使用。您可以通过简单的拖放操作进行任何建模,您将在本小节中尝试执行这些操作。首先,您将了解如何创建 BPMN 图以便对访客在 Web 站点中购买玩具进行建模。然后您将了解在模型中使用的一些活动类型。最后,您将了解如何使用 BPMN Modeler 来最终对业务流程建模。

第一个 BPMN 图

现在需要 Eclipse STP。由于 BPMN Modeler 并非基于项目,因此您将从一个普通项目开始。

要创建新项目,单击 File > New > Project。接下来,展开 General 文件夹并选择 Project。

图 2. 创建普通项目

单击 Next 并键入项目名称 STPbpmn。

图 3. 给项目命名

您现在应当在 Package Explorer 窗格中看到新项目。选择该项目并单击 File > New > Other。展开 SOA Tools 文件夹并选择 Bpmn Diagram。

图 4. 创建一个新的 BPMN Diagram

单击 Next 并在 File name 空白处输入文件名:mybiz_flow。

图 5. 为 BPMN 图命名

单击 Finish 创建 BPMN 图。您的项目现在应当按照下图所示进行设置。

图 6. 项目窗口

非常好!现在将了解右侧面板中所示的一些活动类型、元素。

活动类型简介

对业务流程建模可以使用多种活动类型。对您的业务流程建模时将使用下面五种活动类型。其中之一为 Start Events 下的 Empty Start。

图 7. Empty start 事件

此活动将启动流程,即图 1 左侧的空白圆圈。接下来是任务,如下所示:

图 8. 任务

任务是诸如调用 Web 服务之类的命令。接下来的两个活动是允许以独占或并行方式将流程划分为不同方向的两种路径(gateway)。第一个是基于独占数据的路径。

图 9. 基于独占数据的路径

稍后将进一步了解此路径的工作原理。简言之,它用于把业务流程划分为两条路径,一条用于订单失败的情况,另一条用于订单成功的情况。下一个是并行路径。

图 10. 并行路径

您可以使用此路径来定义可以并行执行的两项任务,例如向客户发送发票和在成功处理订单后将订单放入送货部门的队列中。您将查看的最后一项活动是 Empty End 事件,该事件将结束业务流程。

图 11. Empty End 事件

这是位于图 1 右侧的空白圆圈,此空白圆圈将终止业务流程。

对业务流程建模

现在将最终对业务流程建模。首先,单击 Empty Start 活动并在蓝色流程面板中单击一个圆点(spot)。然后双击该圆点并标记为 start。

图 12. 标记 start 活动

单击任务活动类型,将其放到 start 圆圈的右侧,双击它并标记为 addToyToCart。

图 13. 标记任务

接下来,将创建一条从 start 圆圈到 addToyToCart 任务的新弧线。把光标放在 start 圆圈的右边界上方,直至一个黑色实线箭头显示在圆圈右侧,如图 14 所示。单击实线箭头右侧的小方框并将其拖动到 addToyToCart 任务。

图 14. 创建新弧线

在 addToyToCart 任务上放开鼠标按钮,然后应当显示一条新弧线,把两端链接在一起。

图 15. 创建的新弧线

到这里已经创建了第一条弧线。您的业务流程将整合在一起。继续对业务流程建模。

图 16. 继续对业务流程建模

通过上图的帮助,您应当能够创建一项新任务 viewCart,以及包含 while 循环的两个基于独占数据的路径。注意,您还可以标记弧线,如从标记为 while2 的路径出来的两条弧线所示。只需双击两条弧线,键入所需标记,单击 Enter,然后把标记拖到所需位置。按照如下所示继续建模:

图 17. 继续建模

上图显示了签出和 shippingEstimator 任务,可以根据图示进行创建和连接。注意,有一条边从 shippingEstimator 向后回到标记为 while1 的路径:这最后将成为您在清单 2 中看到的 while 循环。在签出任务之后,您将看到与 if-else 语句等效的内容,其中路径被标记为 orderCheck。如果订单失败,流程将转至 orderFailed 任务,如果成功,则将转至标记为 orderTasks 的并行路径。继续建模业务流程的最后一部分。

图 18. 完成业务流程模型

注意 emailInvoice 和 shippingQueue 两项任务在并行路径内的方式。两项任务将并行执行,因为它们的流程没有联系。并行流程随后在 orderTasks2 处合并,在 orderCheck2 再次合并,然后在 Empty End 事件处结束业务流程。

现在可以通过在包浏览器文件中双击 mybiz_flow.bpmn 文件来检验得到的与图对应的 BPMN。在这里,可以看到描述刚建模的业务流程的所有顶点和 sequenceEdges。

祝贺您!您已经使用 BPMN Modeler 成功地建立了业务流程模型。接下来将进行转换,把 BPMN 转换成 BPEL。

把 Eclipse STP 的 BPMN 转换成 BPEL

拥有 BPMN 之后,已经准备好将它转换成 BPEL。为此,将借助 Eclipse ATL 项目和 BABEL 中的工具的帮助。此转换过程是必要的,这样才能在部署到 Apache ODE 之前有可使用的可执行文件 (BPEL)。Eclipse ATL 的任务是执行从 BPMN 到 BABEL 工具可读的 BPMN 格式的转换,BABEL 工具将把最终的 BPMN 转换为 BPEL。首先创建第一个 Eclipse ATL 项目。

第一个 Eclipse ATL 项目

要创建 Eclipse ATL 项目,以便可以执行从 STP BPMN 到 BABEL BPMN 的转换,需要在 Eclipse ATL 内创建一个新项目。启动 ATL (ATL_project/eclipse.exe)。注意,有两个预先存在的项目:Families2Persons 和 Tree2List。可以忽略或一并删除这两个项目,因为不会使用到它们。

现在将创建一个新项目来保存将要设立的转换规则。单击 File > New > ATL Project。

图 19. 创建一个 ATL 项目

接下来,将弹出一个窗口要求键入名称。按下图所示命名项目 STPbpmnTObabelBPMN,然后单击 Finish。

图 20. 为 ATL 项目命名

现在创建了 ATL 项目,但是还有更多任务。您需要从 下载 小节得到的教程中获取一些文件。下载完成后,提取三个文件并将其复制到 ATL 项目中。

ATL_project/STPbpmnTObabelBPMN/metamodels/bpmn.ecore 定义 BABEL BPMN 文件结构的 EMF 文件。ATL_project/STPbpmnTObabelBPMN/metamodels/stpmodel.ecore 定义 STP BPMN 文件结构的 EMF 文件。ATL_project/STPbpmnTObabelBPMN/transformation/bpmn2babel.atl 这是定义从 STP BPMN 到 BABEL BPMN 转换的 ATL 文件。

此外,把从 Eclipse STP 项目生成的 mybiz_flow.bpmn 文件复制到 Eclipse ATL 项目中。ATL 项目的包浏览器现在应当类似图 21。

图 21. 显示已复制文件的 ATL 项目的包浏览器视图

注意,bpmn2babel.asm 文件是在编译 bpmn2babel.atl 文件时由 Eclipse ATL 自动生成的。

此时,ATL 项目已创建完毕并且您现在可以开始执行转换。

把 STP BPMN 转换成 BABEL BPMN

现在,可以将 Eclipse STP BPMN Modeler 的 BPMN 输出转换成 BABEL 工具可读的 BPMN 格式。但是,在开始执行转换前,需要做最后一件事情。截至 Eclipse STP 的当前版本,BPMN 的输出中有一个 bug(它不符合相应的 stpmodel.ecore)。要修复此 bug,请在包浏览器窗口中双击 mybiz_flow.bpmn 文件打开该文件(参见图 21)。

替换以下所有实例:

把 Parallel Gateway 替换为 GatewayParallel

把 Exclusive Data-based Gateway 替换为 GatewayDataBasedExclusive

把 Empty Start Event 替换为 EventStartEmpty

把 Empty End Event 替换为 EventEndEmpty

BPMN 已准备好进行转换。要继续,请单击 Run > Open Run Dialog。在左侧列中,右键单击 ATL Transformation,然后单击 New。把启动配置命名为 STPbpmnTObabelBPMN,并且在项目窗格中,选择名称 (STPbpmnTObabelBPMN) 中的项目以及该项目中的 bpmn2babel.atl 文件,如图 22 所示。然后可以通过键入每个 Ecore 文件的路径或者通过选择相应的工作空间按钮并进行浏览,选择元模型窗格中的 BPMN 和 BABEL Ecore 元模型。

图 22. 配置 ATL 启动配置

然后,仍然如图 22 所示,需要选择一个源模型 (mybiz_flow.bpmn),方法是直接输入或单击 Workspace 并在项目中浏览相应文件。由于目标模型还不存在(这是由 Eclipse ATL 生成的文件),因此您将把源模型文件复制到目标模型文件中,并且键入 BABEL_ 作为它的前缀(参见图 22 中的源模型和目标模型窗格)。

目前为止已经介绍了很多信息,最后还剩下一件事要完成:添加库。要完成此操作,单击 Add library(如图 22 的左下角所示),将弹出一个要求输入名称的窗口,接受默认值,然后只需单击 OK。一个库随后将显示在 Libraries 窗格中(图 22 中 Target Models 窗格的右侧)。单击 Workspace 按钮,如下所示:

图 23. 把库文件输入到 ATL 启动配置中

在项目转换目录中浏览文件。

图 24. 输入库

单击 OK。结束!启动配置已经准备好运行。确保单击位于窗口右下角的 Apply 来保存更改。

要启动配置并执行转换,请单击位于窗口右下角的 Run,这样就可以了!您现在应当会注意到 ATL 项目中 models 文件夹的一个新文件,如图 25 所示。这是 BABEL BPMN 中间格式。

图 25. 生成 BABEL BPMN

把 BABEL BPMN 转换成 BPEL

要执行转换,请将 BABEL_mybiz_flow.bpmn 从 Eclipse ATL 项目复制到先前安装 BABEL 工具时创建的 babelBPMNtoBPEL 目录中。

在继续执行其余转换之前,还需要对 BABEL_mybiz_flow.bpmn 文件进行最后一次编辑。首先:注意有两个 子元素。删除其中一个子元素(可以把您的文件与从 下载 小节下载的代码的 babelBPMNtoBPEL 目录中的文件相比较)。

打开控制台,并把目录切换到包含刚创建的 BPMN2BPEL.jar 文件和 BABEL BPMN 文件 (BABEL_mybiz_flow.bpmn) 的 babelBPMNtoBPEL。键入以下命令创建 BPEL:java -jar BPMN2BPEL.jar BABEL_mybiz_flow.bpmn。

运行以上工具产生的最后几行将创建如清单 3 所示的输出,创建一个新文件 BPEL_BABEL_mybiz_flow.bpmn.bpel。

清单 3. 从 BABEL BPMN 转换到 BPEL

328 [main] DEBUG controller.BPMN2BPEL - Step 5: Build the BPEL-Tree.328 [main] DEBUG controller.BPMN2BPEL - Output the BPEL-XML into a File.343 [main] DEBUG model.backEnd.EmitterBPEL4BPMN - ChildLIST:1343 [main] DEBUG controller.BPMN2BPEL - Directory :343 [main] DEBUG controller.BPMN2BPEL - File :BPEL_BABEL_mybiz_flow.bpmn.bpel

将 BPEL_BABEL_mybiz_flow.bpmn.bpel 重命名为 mybiz_flow.bpel 并将其复制到另一个目录 apacheODE_process/mybiz_flow/ 中。打开 BPEL 文件并注意 while 循环,如下所示:

清单 4. 创建的 while 循环

      

在这里,您可以把此处创建的 while 循环与在清单 2 结束部分的循环相比较。注意两者的语法是不同的。这是由于自动生成的版本将为 BPEL 开发创建一个优秀的起点,这是从头开始创建 BPEL 的额外优点。

在下一小节中,您将为在 Apache ODE 上部署业务流程做准备。

为在 Apache ODE 上部署业务流程做准备

您已经得到了要使用的 BPEL。您将使用此文件作为最终部署到 Apache ODE 上的 BPEL 文件的起点。但是,在这样做之前,您将创建一个 Apache ODE 部署描述符和两个 WSDL 文件:一个作为 BPEL 的服务端点,而另一个作为支持服务,每个文件都有助于实现玩具购买业务流程的功能。

编写部署描述符

要编写的部署描述符将告诉 Apache ODE 如何部署玩具购买业务流程以及需要激活哪些服务。创建一个新文件 deploy.xml,然后按照如下所示内容定义该文件。

清单 5. 编写 Apache ODE 部署描述符

     true                               

这里有几个重要元素。第一个是 process 元素。注意它根据 BPEL 文件的名称命名。通过该方法了解引用了哪个 BPEL 文件。接下来,有两个 provide 元素用于定义引用服务端点的合作伙伴链接。第一个是与 BPEL 文件相关的主要合作伙伴链接,而第二个是支持合作伙伴链接。您将看到在将要编写的两个 WSDL 文件中和在稍后对 BPEL 文件做出的更改中如何引用这两个合作伙伴链接。

编写业务流程的 WSDL

WSDL 允许把玩具购买业务流程公开为一项服务。下面是拥有单个消息、操作、绑定、服务和 partnerLinkType 的简单 WSDL,如下所示:

清单 6. 通过 WSDL 公开业务流程

                                                                                        

WSDL 非常简单,使用一条消息作为执行操作的输入和输出(在 portType 元素中定义)。单个操作随后被绑定到 portType(在绑定元素中),绑定到定义了服务端点的端口(在 service 元素中)。execute 操作将开始执行玩具购买业务流程,您将在下一小节中看到。

通过 partnerLinkType 记录部署描述符链接。清单 5 的第一个 partnerLink 元素中引用了合作伙伴链接名称、服务和端口名称。在 BPEL 中,您将通过以上 partnerLinkType 引用服务及其绑定端口。

编写 WSDL 以支持业务流程

要调用外部 Web 服务,玩具购买业务流程要求提供合作伙伴链接,这就是清单 5 中提供了两个合作伙伴链接的原因:第二个合作伙伴链接将定义您在此小节中编写的 Web 服务,其中包含 BPMN 中所有任务的所有操作。而调用第一个合作伙伴链接将激活业务流程,在执行业务流程时将由业务流程调用此支持 Web 服务。现在查看一下它的 WSDL。

清单 7. 通过 WSDL 公开支持 Web 服务

                          ...   ...   ...   ...   ...   ...                                              ...   ...   ...   ...   ...   ...                    

访问 下载 小节查看完整的 WSDL 定义。注意,在本教程中已经定义的玩具购买业务流程中的每项任务都有一个操作。为简单起见,此 Web 服务的操作的定义方法与清单 6 中的 execute 操作极为相似,因此无需详细了解这个操作。您可能希望扩展操作并让这些操作完成其他工作,然后使操作的输入和输出消息接受 xsd:string 类型的 Message,这取决于业务流程的需求。

完善生成的 BPEL 文件

在把业务流程部署到 Apache ODE 上之前还必须完成的最后一项工作是填充在清单 3 中为玩具购买业务流程生成的 BPEL 文件。您将需要重新定义 Namespaces 并导入您在清单 6 和清单 7 中编写的两个 WSDL 文件。

清单 8. Namespaces 和 WSDL 导入

    ...

这将设置 BPEL 文件,因此您可以正确调用每个 WSDL 文件中定义的合作伙伴链接、消息类型、服务和操作。实际上将列出业务流程中将使用的所有合作伙伴链接和变量。

清单 9. 声明合作伙伴链接和变量

...      namespace="http://ibm/dw/ode/bpel/service.wsdl"      importType="http://schemas.xmlsoap.org/wsdl/" />                                                    ...

在这里,您看到声明了两个合作伙伴链接。第一个是接受初始的实例化调用的主要合作伙伴链接(参见清单 10 中的 receive 元素),随后的合作伙伴链接定义将为业务流程中各项任务调用的服务。在调用业务流程期间,变量需要执行复制、存储和读取数据操作,这样您可以看到在两个变量元素中封装的需要在上面定义的每个变量。

您将了解如何开始执行业务流程。

清单 10. 启动流程

...                                             ...

首先,外部客户需要调用您在 mybiz_flow.wsdl 文件中定义的 mybiz_flow 服务的执行操作,启动玩具购买业务流程。这将发生在清单 10 所示的 receive 元素中,同时有效负载保存在 toyChosen 变量中。接着,把 toyChosen 变量的 Message 部分复制到 addToyToCart_data_in 变量的 Message 部分中(由于两者类型不同,因此此复制语句是必须添加的),这是调用 addToyToCart 操作的输入。addToyToCart 操作的输出随后作为输入提供给 viewCart 操作。注意,执行流程与您先前建模的玩具购买业务流程完全相同(参见图 1)。

继续填充 BPEL,如下所示:

清单 11. while 循环

...        utputVariable="viewCart_data_out" />                                        getVariableProperty(shippingEstimator_data_in,Message)="true"                                         ...

在执行 viewCart 操作时,输出被复制到 shippingEstimator_data_in 变量中,用于计算 while 条件。如果 shippingEstimator_data_in 变量的 Message 部分等于 “true”,则执行 while 循环,执行 shippingEstimator 任务。在调用 shippingEstimator 操作时,输出被复制回 shippingEstimator_data_in 变量中,因此可以重新检验 while 条件。如果 shippingEstimator 操作的输出是除了 “true” 之外的其他内容,则继续执行签出任务。

清单 12. 检验检出的订单

...                         getVariableProperty(checkout_data_out,Message)="failed"                                                      

如果调用 checkout 操作的输出表示订单失败(checkout_data_out variable=”failed” 的 Message 部分),则执行 orderFailed 任务,终止业务流程。如果订单成功(checkout_data_out 变量的 Message 部分是除了 “failed” 以外的其他内容),则同时执行 emailInvoice 和 shippingQueue 操作(由它们封装的流程元素表示),终止业务流程。

您的项目已经准备好部署到 Apache ODE 上,这是您要执行的下一项任务。

部署到 Apache ODE 上

在最后一个步骤中,您将引入通过 WSDL 定义的两项服务,可执行的 (BPEL) 玩具购买业务流程和在同一个目录中的部署描述符,然后部署到 Apache ODE 上。要部署业务流程,请启动 Apache Tomcat,它将自动激活 Apache ODE。接下来,把包含部署描述符、两个 WSDL 文件和 BPEL 的目录(下载教程中的 apacheODE_process/mybiz_flow 目录)复制到 Apache ODE 的 processes 目录 tomcat-5.5.25/webapps/ode/WEB-INF/processes 中。

您应当在 Tomcat 输出控制台中看到下面表示部署成功的输出:

INFO - GeronimoLog.info(79) | Deployment of artifact mybiz_flow successful: /type="inline">[{http://ibm/dw/ode/bpel/executor}mybiz_flow-40]

您还可以通过访问 http://localhost:8080/ode/services/listServices 查看运行在服务器上的已部署服务(参见图 26)。

图 26. 成功部署的服务

您可以看到通过 WSDL 公开的两项 Web 服务,并且具备了所有的操作。

您已经卓有成效地将业务流程概念实现为可以部署到 Apache ODE 上的业务流程,这是实现完整 SOA 的重要部分。

结束语

您已经完成了本教程的学习,具备了业务流程建模的专业知识。您还成功地把 Eclipse STP BPMN Modeler 输出的 BPMN 转换成稍加准备就能部署到 Apache ODE 上的 BPEL。

要进一步扩展本文的工作,还有最后一道障碍需要克服:需要实现在清单 7 的 WSDL 中定义的 mybiz_flow_service,并且有两种方法可以完成。首先,可以使用 Axis2 把 WSDL 编译成 Java Web 服务表示,也可以手动编写另一种业务流程继续处理 BPEL 中的每个 invoke 元素。

本文配套源码

那么,不如我们礼貌地保持相对距离,不至于太冷,不至于太痛。

用Eclipse执行业务流程

相关文章:

你感兴趣的文章:

标签云: