内容


从业务建模到 Web 服务实现:第 1 部分:为业务流程建模

Comments

引言

典型的软件开发周期都是从了解要构建的系统开始。实际中用于系统理解的标准方法是为那些共同构成系统整体功能的业务流程建模。每个业务流程都是一项连接企业运行和功能的工作。随后,系统架构师及设计人员会利用这些业务流程模型提出一种系统体系结构,并实现这些业务流程的体系结构的实现实例。

业务流程分析人员采用各种方法获取业务流程模型。直到最近,在业务流程建模工作与系统构架、设计及实现操作之间还存在着隔阂。

需要建立标准的机制或语言,在业务流程建模过程中使用这些机制或语言建立的模型,在系统设计和实现过程中会更容易加以利用。这引领了业务流程建模的规范语言的创建,即众所周知的业务流程执行语言 (Business Process Execution Language,BPEL)。随着 BPEL 的出现,一些公司开始寻求新的方式,将 BPEL 的输出连接到骨架代码构件的定义,这样就建立了应用程序接口的声明与实现的基础。

在 IBM® Business Integration Suite 丰富的产品当中,WebSphere® Business Integration Modeler(以后称为 WBI Modeler)和 WebSphere Studio Application Developer Integration Edition(以后称为 Application Developer) 是两个通过提供对 BPEL 的支持,针对配合业务流程建模和系统实现工作这两项内容的产品。WBI Modeler 支持 BPEL 模式下的流程建模,而 Application Developer 拥有一个名为 Process Choreography 的可实现 BPEL 的功能,目的是设计业务流程并随后为用 BPEL 建模的流程创建 Web 服务定义 (WSDL)。这些 Web 服务定义可由 J2EE™ 技术实现。

从本系列文章中能学到什么?

本系列文章将帮助您了解如何创建并将业务流程建模工具连接到系统服务定义及随后的实现上。在这种情况下,您将接触到 WBI Modeler 工具并了解如何创建并不十分复杂的业务流程工作流。之后将接触到 Application Developer 工具并了解如何利用 J2EE 技术为由 WBI Modeler 生成的业务流程创建 Web 服务定义并对其进行调用。

但是,不能将本系列文章作为全面了解利用 WBI Modeler 工具为业务流程建模的详细教程。且本文也不能作为了解 Application Developer 的全面特性包括流程设计及 Web 服务功能的教程。

本文假定在之前您对 WBI Modeler 有一定的了解,且知道最新的版本 (5.1)。在本文中要完成实例还要了解用 Application Developer 进行 Java™/J2EE 开发的知识。

做好了准备工作,现在开始进行操作。

安装先决条件

使用 WBI Modeler(版本 5.1)进行业务流程建模。WBI Modeler 既有独立的产品,也有 Application Developer 的插件程序。本文使用了 Application Developer 版本 5.1.0 的 WBI Modeler 5.1 插件程序。

至于系统需求,最少需要 1 GB RAM。为实现本实例,我使用 2 GB RAM 的机器。

独立程序与 Application Developer 插件版本的 WBI Modeler 在外观及功能上几乎是一样的。我的个人意见是使用 WebSphere Studio Application Developer, Intergration Edition 中的 WBI Modeler 5.1 插件程序。这样我们只需在 Application Developer 中工作,而不必在两个工具中进行切换。

实例场景

本文将以下实例场景作为问题描述及解决方案的基础。

CricketGear Inc,是虚构的一家位于纽约的小型公司,销售板球运动的装备。为了使这项运动在美国流行起来,CricketGear 想要建立 Web 页,使潜在的板球选手浏览该站点并定购装备。公司刚刚起步、规模很小,为在全国传播该运动,在 Web 上销售板球棒和板球。

CricketGear 预想出令 Web 用户提交订单的业务流程。订单的需求是:

  • 计算订单的花费。
  • 验证信用卡。
  • 如果信用卡有效,处理付款事务。
  • 保存付款事务。
  • 发送带有业务结果/输出的确认通知。

业务流程实现了一套业务规则,例如:

付款事务需要在信用卡有效的状态下进行。如果信用卡无效,该事务将不能初始化且订单的状态必须更改为同样的状态。

尽管可以对许多其他业务流程建模,并将其实现(例如,Ship Order 和 Process Back Order),但本文将着重于对一个业务流程的建模及实现。

为流程建模

在为业务流程建模过程中(Application Developer 中的) WBI Modeler 插件程序调用各种任务。最高级别的步骤包括:

  • 创建业务建模项目。
  • 创建业务项目。
  • 创建流程模型(调用识别单个任务并定义输入输出)。
  • 通过将任务连接起来(作为连续或相同的步骤)创建流程流。

剩下的部分将逐步说明流程建模步骤。

  1. 新建 Application Developer 工作台并打开 Application Developer 中的 Business Modeling Perspective
  2. 用如下图 1 所示的属性新建业务模型项目。流程目录是一个包含所有要创建流程的文件夹。每个流程都有个名字(例如,WebOrder)。
    图 1. 新的业务建模项目
    图 1. 新的业务建模项目
    图 1. 新的业务建模项目
  3. 在主菜单中选择 Modeling => Mode => BPEL mode 来选择 BPEL 模式。该模式只允许用 BPEL 制品对流程建模,并使最终的输出适应于 BPEL。同样在主菜单中选择 User Profile => Basic (参阅下面的两幅图):
    图 2. 将建模模式设为 BPEL
    图 2. 将建模模式设为 BPEL
    图 2. 将建模模式设为 BPEL
    图 3. 将 User Profile 设为 Basic
    图 3. 将 User Profile 设为 Basic
  4. 创建业务项目。业务项目代表企业中业务的概念和实体。在本实例中,业务项目包括 OrderCreditCard。要创建的另一个业务项目称为 RequestData。在进一步操作之前,您需要对 RequestData 有更多了解。用 WBI Modeler 所建模的流程中的任务可以包括一个以上的输出。如果用语言,例如 Java(以类中方法的形式)来实现任务,多重输出需要映射到包含设计多重输出数据类型的复杂数据对象上。要进行建模的流程拥有一项多重输出的任务。因此,要创建 RequestData 业务项目、作为 Order 业务项目的索引的目录以及 CreditCard 业务项目。
    • 单击 Business Item 文件夹。右键单击 New => Business Item。 通过以下所示的属性创建 Order 业务项目。通过双击属性行并单击(该行)最右边列出的属性类型(指出了 RequestData 属性的标志)定义属性的类型。可以将属性类型定为基本类型(例如,Integer 或 String)或复杂数据类型(例如,用户定义的类型,如 Order 和 CreditCard)。
      图 4. Order 业务项目的属性
      图 4. Order 业务项目的属性
      图 4. Order 业务项目的属性
    • 通过以下所示属性创建 CreditCard 业务项目:
      图 5. CreditCard 业务项目的属性
      图 5. CreditCard 业务项目的属性
      图 5. CreditCard 业务项目的属性
    • 通过以下所示属性创建 RequestData 业务项目:
      图 6. RequestData 业务项目的属性
      图 6. RequestData 业务项目的属性
      图 6. RequestData 业务项目的属性

      属性类型为复杂数据类型(例如,Order 和 CreditCard)。

  5. 要获得更好的透视图布局,请切换到“四窗格”布局
    图 7. 单击周围的面板,将透视图切换到“四窗格”布局
    图 7. 单击周围的面板,将透视图切换到“四窗格”布局
  6. 现在要创建构成 WebOrderprocess 的单个任务。在 WebOrder 流程的 BPEL 编辑器中有缺省的 Start (绿色的)和 Stop (红色和黑色的)结点。在开始绘制模型之前将这两个结点删除。

绘制模型

创建完项目并定义了业务项目之后,需要进行流程模型的绘制(利用该流程的单个任务、连接及数据输入、输出类型)。利用 BPEL 编辑器中选项板上的 Task 图标创建单个任务。在 Task 图标(xxxx)下的图标立即变成一个广播塔的样子。注意到图标上有个小箭头(xxxx)。 点击图标的下拉列表。Map 是唯一可用的图标。使用该图标创建属于本流程一部分(说明如下)的 Map。我们将分三个阶段创建模型。第一阶段识别所有单个任务及其他任何可用的 BPEL 制品(例如 Map)。第二阶段将任务(及其他 BPEL 制品)连接到一起从而确定流程的工作流。一旦完成该阶段,第三阶段便要决定并将数据输入及输出加到每个任务上(及其他 BPEL 制品)。下面对这三个阶段进行了说明。

  1. 下图描述了组成 WebOrder 流程的任务。我们还使用了 Map 组件。 任务的输出可能是复杂数据类型。当某个任务需要得到包含在复杂类型中的输入时,Map 可以从复杂数据类型中提取出所需要的部分(例如,RequestData)。
    图 8. 为 WebOrder 流程识别单个任务
    图 8. 为 WebOrder 流程识别单个任务
    图 8. 为 WebOrder 流程识别单个任务
    Submit Order 接收了流程的输入。Price Order 任务为订单定价并设置 Orderprice 属性。Transact Payment 任务核实客户信用卡的有效性,Save Order 任务保存订单并返回保存流程的结果,作为流程的输出。
  2. 现在将业务流程中的模型连接到一起。下图描述了业务流程如何贯穿单个任务
    图 9. WebOrder 业务流程工作流
    图 9. WebOrder 业务流程工作流
    图 9. WebOrder 业务流程工作流

    BPEL 编辑器具有黑色的边框。所有以左侧的垂直边为起点的连接表示流程的输入,以右侧垂直边为终结的连接表示流程的输出结果。注意到输入和输出连接均有一个相关的 String 数据类型。 该类型是编辑器关联到每个(流程的)输入和输出连接的默认数据类型。可以改变它以表示其他数据类型。您可能会注意到不能同时看到流程的输入和输出连接,除非水平滚动编辑器屏幕。通过点击编辑器图标选项板中的 Decrease Horizontally 图标可以将滚动条最小化。该图标可以在选项卡的下半部分找到,如下图: xxx
  3. 定义了业务流程的工作流以后,需要为每个任务关联上合适的输入输出类型。将 RequestData 业务项目从 Business Item 文件夹中拖拽到 Submit Order 任务的输入连接部件上。黑色虚线框的出现表示编辑器识别了连接的数据类型。一旦见到黑色虚线框的出现,就可以释放鼠标,然后将 RequestData 部件关联到输入连接上。

    利用下图中显示的业务项目,对每个连接部件都重复相同的步骤。Transact PaymentSave Order 之间的连接与数据类型 String 相关联。为此,单击连接部件,右键单击鼠标以列出可执行的方法。单击 Associate Data 菜单。出现一个可以选择数据类型的对话框。选择 String 作为基本数据类型。 这使得数据类型 String 关联到连接上。

    图 10. 定义了全部连接和输入输出的 WebOrder 流程模型
    图 10. 定义了全部连接和输入输出的 WebOrder 流程模型
    图 10. 定义了全部连接和输入输出的 WebOrder 流程模型

    请注意 Map 部件是如何将 Order 关联到 Price Order 任务上,将 CreditCard 关联到 Transact Payment 任务上。

WebOrder 流程的创建完成了。项目树如下所示:

图 11. 项目树 (Project Tree) 显示了为 WebOrder 业务流程所创建的构件
图 11. 项目树 (Project Tree) 显示了为 WebOrder 业务流程所创建的构件

可以在 ProcessCatalog 文件夹下创建与 WebOrder 流程类似的流程。 注意到建立流程是多么简单。我们没有求助任何参考资料或机构来建立这个简单的流程,因为我们不想创建复杂的流程,而是在现有的简单场景中举出一个完整的“流程建模到实现”的例子。

准备实现

在前面的部分中已经创建了适用于 BPEL 的业务流程模型。流程工件需要以可导入到 Application Developer 中的格式导出。导入的流程构件可用于创建业务流程的实现。

  1. 右键单击项目树中的项目名 ItsAllAboutCricket,然后选择 Export 菜单项。出现了包含不同导出模式的对话框。选择下图中显示的模式。该模式可以使导出的工件符合导入 Application Developer 所需的格式。
    图 12. 选择 WBISF 模式作为导出格式
    图 12. 选择 WBISF 模式作为导出格式
    图 12. 选择 WBISF 模式作为导出格式
  2. 选择流程构件要导出到的目标路径并选择 Overwrite files 复选框(下图中未显示)。
    图 13. 定义目标导出路径
    图 13. 定义目标导出路径
    图 13. 定义目标导出路径
  3. 本流程是依照请求-回复图的短期运行业务流程。在单个事务(或不存在事务)中执行的简短执行流程被称为宏流 (microflow)。在随后的流程执行模式对话框中,选择 Microflow(如下图所显示)。
    图 14. 选择宏流作为流程执行模式
    图 14. 选择宏流作为流程执行模式
    图 14. 选择宏流作为流程执行模式
  4. 单击 Finish。出现一个信息对话框,表明成功导出项目。

这标志着业务流程建模工作的结束。现在导出的流程构件可以很容易地应用于 Application Developer 的开发中。

结束语

本文显示了一个实例业务流程创建场景。文中展示了如何通过定义任务、输入和输出以及如何连接到工作流之上来创建流程。文中还说明了如何导出由 WBI Modeler 所创建的,具有易于导入到 Application Developer 中的格式,且用在业务流程实现过程中的流程构件。

本系列的下篇文章将继续本文的内容。我们将说明如何将导出的 BPEL 构件导入到 Application Developer 中,及如何生成并修改基于 Java 的代码使之包含业务逻辑。我们还将说明如何为业务流程创建 Web 服务定义,Java 客户端如何通过 Web 服务代理调用 Web 服务定义。

如本文一样,在第 2 部分中还将涵盖大量内容,请继续关注!


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=163333
ArticleTitle=从业务建模到 Web 服务实现:第 1 部分:为业务流程建模
publish-date=02012005