内容


使用 BPEL4WS 的业务流程

学习 BPEL4WS,第 4 部分

用 BPWS4J 编辑器创建流程

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: 使用 BPEL4WS 的业务流程

敬请期待该系列的后续内容。

此内容是该系列的一部分:使用 BPEL4WS 的业务流程

敬请期待该系列的后续内容。

用于 Java 的 Web 服务中的业务流程(Business Processes in Web Services for Java,BPWS4J)软件包提供了一个运行时引擎实现,该实现支持 Web 服务的业务流程执行语言(Business Process Execution Language for Web Services,BPEL4WS)规范,这个规范定义了 Web 服务的工作流和业务流程。这个软件包于 8 月份在 alphaWorks 上发行,它提供了一个运行时引擎以及一个用于创建流的工作流编辑工具。本文着重讨论一个简单的回送流程的实现练习,在该流程流中,一个流程接收消息,另一方将一份完全相同的消息副本反射回到发送方。

在本文中,我将假设您熟悉 Eclipse 项目并且熟悉基本 Eclipse 环境的使用。本文解释了用于 Eclipse 的 BPWS4J 功能。

把粗略的概念流程转变成其有效的 BPEL4WS 表达式,有两种显而易见的方式:

  • 自底向上(bottom-up)方式:采用这种方式,您从基本活动入手,然后发展成宏观层次(macro-level)的流程,在进行过程中添加结构、链接以及其他数据。回送流程将包括两个基本任务 ― 通过 receive 活动接收一条消息以及通过 reply 活动向发送方作出应答。您需要添加某种结构,因为您必然要求应答跟在响应后面 ― 它们要按顺序执行,否则对流程是没什么意义的。这意味着您需要进行排序,您可以使用 sequence 活动实施排序。在自底向上方式中,您先通过创建基本活动来定义流程,然后再将活动添加到 sequence 中。BPWS 编辑器为此提供了某种支持,使您能够用结构化活动包装基本活动。因此,例如,您可以创建 receive 活动,然后将它包装在一个 sequence 中。
  • 自顶向下(top-down)方式:另一种看待事物的方式是从外部入手,然后深入到基本任务。对于这个回送流程,您需要让有些步骤按照一定的顺序执行,所以,您添加一个 sequence 作为顶层活动,然后再将 receivereply 植入 sequence 。BPWS4J 编辑器同样允许您采用这种方式。

这里,很重要的一点是,完整的、可部署的 BPWS4J 运行时单元由以下部分组成:

  • 描述流程的 BPEL4WS 文件
  • 一个 WSDL 文件,它描述了流程定义(被称作 流程 WSDL)所引用的消息、操作、端口类型以及其他信息(服务链接类型、相关性属性等)
  • 流程中包含的每个伙伴的 WSDL 定义,除非流程不使用伙伴所提供的任何 WSDL 操作

在上述这些部分当中,BPWS4J 编辑器允许您创建描述流程的 BPEL4WS 文件。要编辑部署 BPEL4WS 流程所需的 WSDL 文件,您可以使用其他工具。不过,这些工具将不支持 BPEL4WS 规范中已经提议的非标准的 WSDL 扩展(如服务链接、相关性属性等)。您将不得不手工添加那些定义;BPWS4J 中的样本应该足以指导您完成这一任务。

我将阐述 BPWS4J 编辑器是什么样子,还将阐述在开发回送流程示例的过程中如何使用它。

安装 BPWS4J 编辑器

要使用 BPWS4J 编辑器,您将既需要来自 alphaWorks 的 BPWS4J 编辑器软件包,也需要来自 Eclipse.org Web 站点的 Eclipse 软件包。如果您没有 Eclipse 2.0,那么就应该从 Eclipse 站点(请参阅 参考资料)下载它,然后安装该软件。

一旦您已经从 alphaWorks(请参阅 参考资料)下载了 BPWS4J 编辑器软件包 ― 一个与 BPWS4J 运行时引擎分开的软件包,请将其内容解压缩(unzip)到 Eclipse 安装目录下。解压缩之后,您应该验证您有了一个名为 eclipse/plugins/com.ibm.cs.bpws.tools.bpwsbuilder的目录。然后,您应该启动 Eclipse 环境。

创建 BPWS 项目

对于这个项目,您通过在 Eclipse 工作区中创建一个新项目着手。在 File菜单中单击 New,选择 BPWS作为文件类型。如果您在可用文件类型列表中没有看到该类型,那么您可能不得不单击 Other文件类型来查找它。一旦您这样做了,您应该参看 图 1a中的抓屏来确定项目的文件名和位置;图 1a 中的抓屏还提供了流程名称(process name)的缺省值和名称空间(namespace)的缺省值。这一屏会转到如 图 1b所示的下一个屏幕,它让您设置流程的顶层属性,如 Abstract processSuppress join faultsEnable instance compensationSerializable container access;稍后我将解释这些属性。请确保您在选中了 Open this file for editing when done选项之后才单击 Finish。这应该会在您定义的位置中创建该文件并在 BPWS4J 编辑器中打开它。

图 1a. 创建一个新的 BPWS 项目
图 1a. 创建一个新的 BPWS 项目
图 1a. 创建一个新的 BPWS 项目
图 1b. 创建一个新的 BPWS 项目 II
图 1b. 创建一个新的 BPWS 项目 II
图 1b. 创建一个新的 BPWS 项目 II

接下来,您需要确保 Eclipse 的 BPWS 透视图是打开的;这个透视图将创建视图,这个视图和编辑器区域一起有助于您定义流程。在 Window菜单中选择 Open Perspective,然后选择 BPWS 透视图;和前面一样,您可能不得不单击 Other,从而确定 BPWS 是其中一个选项。这应该会在 Eclipse 中打开透视图。BPWS 透视图由 Editor、Navigator 视图、Outline 视图、Properties 视图和 Tasks 视图组成。接下来,我将对其中的每一个进行更详细的研究。

Process 编辑器和 Source 编辑器

BPWS4J 编辑器是一个多页工具,其中一个页名为 Source 编辑器,它使您能够对正在定义的业务流程的原始 XML 进行编辑;另一个页名为 Process 编辑器,它是所涉及的流程的树视图。在新创建的文件中显示的是缺省流程编辑器树视图。单击位于编辑区域左下角的 Source选项卡,以切换到 Source 编辑器中的 XML 代码视图。处于 Source 编辑器中之后,您同样可以单击 Process选项卡以返回到树视图。

Process 编辑器(请参见 图 2)是流程的树视图,所有的活动和能够包含活动的 BPEL4WS 元素在树中都以节点的形式被显示出来。例如, process 元素包含顶层活动,而 catchFault 元素包含另一个用来捕获 SOAP Fault 消息的活动。

对于新创建的流程,树将只有一个节点,即 process 元素。请注意,树视图不显示有关流程属性的信息,也不显示流程中定义的容器和伙伴。试图这么做将把树视图弄得一塌糊涂。相反,这些内容是在流程的 Outline视图和 Property视图中定义的。当您在树中选择一个流程节点时,您将看到它的属性出现在右边的 Property 视图中。这个示例的 Outline 视图当前只显示了流程;稍后,当您定义容器和伙伴时,它们将出现在 Outline 视图中的流程节点后。

图 2. Process 视图
图 2. Process 视图
图 2. Process 视图

Source 编辑器(请参见 图 3)是一个简单的文本编辑工具,它使您能够编辑原始 XML。除非您熟谙 BPEL4WS 语法,否则手工编辑 XML 既易于出错也难以进行,所以,我建议您大多数情况下还是使用 Process 编辑器,当您需要填写详细的信息时,请切换到 Source 编辑器,这是因为在 Process 编辑器的属性框中操作很麻烦。

图 3. Source 视图
图 3. Source 视图
图 3. Source 视图

当您编辑信息时,Source 编辑器和 Process 编辑器是双向同步的。要对此进行测试,请试着在 Source 编辑器中更改流程的名称,然后单击 Process 编辑器检查它。您将看到树中的名称跟着改变了,当您单击流程节点时,已更新的名称也反映在 Property 视图中。现在,请使用 Property 视图修改流程的 Name 属性。当您返回到 Source 编辑器时,您将看到这个相同的属性在原始 XML 中也已经被修改了。

每当在 Source 编辑器中进行编辑时,您都要格外小心,确保没有引入任何语法错误。引入语法错误将会阻止有效的 BPWS 文件,还将 阻止您切换到 Process 编辑器。要进行演示,请删除原始 XML 中的 <process> 元素结尾处的 > 字符。这显然是无效的 XML。当您单击 Process 选项卡以切换编辑器时,您将获得一个要求您更正错误的对话框,它给出了有关错误原因的一些详细信息。一旦您将字符放回原处,就可以切换编辑器。

构建一个骨架(skeleton)流程

现在,您可以开始构建回送流程了。该流程定义的根节点是 process 元素,这是 BPEL4WS 的语法所要求的。为此,请添加一个 sequence 活动,它将成为回送流程所要求的最外层的结构元素。您可以通过工具栏添加这个活动,也可以通过 BPWS菜单添加这个活动。工具栏和菜单基本上由两组操作组成:

  1. 添加操作:这些操作向流程树中已经存在的一个节点添加一个节点;例如,您可以向一个 process 添加一个 scope 活动,或者向一个 flow 添加一个 while 活动。存在一些只能包含活动的活动节点和元素节点。因此,您不能通过工具栏或菜单向 process 元素添加 container 元素;将来,您可以在 process 元素的 Outline 视图中完成这个操作。
  2. 包装操作:这些操作使您能够将一个已经存在的节点包装在一个新节点中;例如,您可以将一个 sequence 包装在一个 scope 中,或者将一个 reply 包含在一个 flow 中。

现在,您可以继续前进,向 process 添加 sequence 元素。接下来,您应该向 sequence 添加 receive ,然后添加 reply 。如果您在任何地方犯了错误,您可以删除活动然后重新开始。您也可以通过工具栏或菜单访问 delete操作,该操作能够删除以所选择的节点为根节点的子树。

对于某种特定情形,并不是所有操作都有意义;例如, process 元素可以包含正好一个活动。因此,一旦您已经添加了 sequence ,那么菜单中的 add 操作对于该流程节点就被禁用了。然而,如果您选择 sequence 元素,则这些操作就又被启用了,这是因为一个 sequence 中可以包含无限个活动。BPWS4J 编辑器菜单因此是上下文敏感的且限制了可用的操作,这样,用户在创建流程时就可以少犯一些错误。

在 Outline 视图中添加容器和伙伴

BPWS4J 编辑器中的 Outline 视图(请参见 图 4)用于显示流程树中选择的节点的结构。这与 Eclipse 插件中的标准 Outline 视图形成了对比,后者中的 Outline 要求编辑器显示所有输入。将详细信息转到 Outline 视图中将使主 Process 树视图的条理更清晰些,这样设计师就可以将注意力集中在宏观层面(活动以及它们彼此之间的结构关系)上而不用担心细节问题。

图 4. Outline 视图
图 4. Outline 视图

针对回送流程,您有一个伙伴:发出回送消息的客户机。由于这条消息一到达就要被存放在容器中,所以我们的流程还需要定义一个容器。因为这条消息保持不变且流程中不涉及其他消息,所以一个容器就足够了。容器和伙伴都通过 outline 视图在 process 元素中进行定义。请在树中选择流程节点,现在,您应该能够使用 Outline 视图的工具栏在 Outline 视图上添加容器和伙伴。当您进行此操作时,您将看到 process 元素的 outline 随每个操作而更新。

在 Porperty 视图中定义属性

您已经看到了如何使用主菜单和工具栏创建活动及其他结构元素,还看到了如何使用 Outline 视图定义额外的元素。剩下的就是针对每个元素填写其各个属性的详细信息。您可以使用 Property 视图(请参见 图 5)来完成这一任务。

图 5. Property 视图
图 5. Property 视图

当您在 Process 树中或 Outline 视图上选择一个节点时,Property 视图就被更新以反映该特定元素的属性。这个视图列出了属性名称和值,并且允许您编辑这些值。在有些情况下,视图将向您提供可能的值的下拉列表;对于任何有可能减少由输入过失引入的错误的情况,视图都将向您提供这种下拉列表。当无法提供这种下拉列表时,您将被允许直接输入文本。

现在,请选择新定义的容器;该容器具有下面两个属性:容器名称和消息类型。您可以随意填写这些内容。请注意,消息类型必须是一个全限定名,位于窗口底部的 BPWS4J 编辑器的状态栏告诉您所要求的全限定名的格式;对于不符合所要求的格式的输入,消息类型将不会接受。这个消息类型必须与流程 WSDL 中所定义的消息类型一致。最后,请在流程节点的 Outline 视图中填写伙伴元素的属性,同样要确保此处的信息与流程 WSDL 一致。

在 Task 视图中检查流程有效性

BPWS4J 编辑器最有用的功能之一就是,它能够在创建流程的过程中检查流程的有效性。这是通过在 Task 视图(请参见 图 6)中显示错误列表实现的。至此,在回送流程示例中,您已经创建了必需的活动、流程的容器并且标识了所涉及的伙伴。不过,您还没有填写 receive 活动和 reply 活动的属性。如果您切换到 Source 编辑器,您将看到 Task 视图已经用我们的流程的错误列表进行了更新。所有这些错误都与不完整的 receive 活动和 reply 活动规范有关。如果您在 Task 视图中单击一个特定的错误,则 Source 编辑器将突出显示存在错误的活动定义。每次您切换编辑器或者保存流程定义的时候,Task 视图都将随之更新。

图 6. Task 视图
图 6. Task 视图
图 6. Task 视图

尽管 Task 视图能够捕获许多常见错误,但 BPWS4J 编辑器是独立运行的,它并不知道流程 WSDL 文件的位置。因此,无法验证对 WSDL 信息(诸如消息、操作、端口类型、相关性属性或服务链接类型)的引用的有效性。

完成示例

通过返回到流程编辑器并每次处理一个未完成的任务,您就可以完成流程定义。当您选择任务时,存在错误的节点将被突出显示。您可以单击该节点来查看它的属性,并更新属性数据来消除错误。一旦您完成了 receive 活动和 reply 活动的属性的输入,您的流程定义就完整了。

现在,您应该拥有了一个可以部署和运行的、有效的流程 WSDL 文件。在将来的一篇文章中,我们将对此作进一步的讨论。


相关主题


评论

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

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=SOA and web services
ArticleID=22036
ArticleTitle=使用 BPEL4WS 的业务流程: 学习 BPEL4WS,第 4 部分
publish-date=11012002