科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道WebSphere Process Server 业务状态机的概念和功能,第 1 部分: 介绍基本概念

WebSphere Process Server 业务状态机的概念和功能,第 1 部分: 介绍基本概念

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本系列文章概要介绍业务状态机的概念及其功能,并讨论作为替代方法的 BPEL 进程的用法。该系列文章从构建自动售货机开始,并在每篇文章中通过使用更多的业务状态机功能来逐步增强自动售货机的功能。

作者:ibm 来源:ibm 2007年10月7日

关键字: 技术 WEBSPHERE IBM 中间件

  • 评论
  • 分享微博
  • 分享邮件

引言

IBM® WebSphere® Process Server(下文简称为 Process Server)中的业务状态机 (BSM) 组件提供了一种定义和使用业务“名词”的方法。这些名称是“订单”或“行程”之类的内容,它们使用生命周期控制其行为。例如,在行程完成之后将不支持对行程的取消操作,并且相对于未预留的行程,需要以不同的方式进一步处理已预留的行程。BSM 作为一种状态机,提供了一种开发、调试和监视这些“名词”的方法。

BSM 提供对具有生命周期的业务项目的支持。这些项目的状态由事件驱动,而且通常具有循环逻辑(返回以前的状态)。在整个系列文章中,我们将以自动售货机为例进行阐述。自动售货机可以开启、收取钱币、分发产品和找零钱。它周而复始地执行这些循环,直到被关闭为止。它也具有其他循环。例如,自动售货机必须确保客户投进了足够的钱币,才会分发请求的产品。而且,在适用的情况下,还需要把找的零钱返回给客户。

此类应用程序通常使用状态机来表示。状态机主要由状态和状态之间的转换构成。这些转换可以通过多种方式发生。BSM 与 Process Server 中的其他组件类似,是一种服务组件体系结构 (SCA) 组件。其接口使用 Web 服务描述语言 (WSDL) 定义。可以预定义任何数量的 WSDL,并且可以将它们与开发出来的 BSM 相关联。而且,在这些 WSDL 中定义的所有操作都必须在 BSM 中使用。对于 BSM,WebSphere Integrated Developer(下文简称为 Integration Developer)提供了一种以图形方式开发 BSM 的方法。编辑器的表示形式基于状态机建模和设计的统一建模语言 (UML) 定义。我们将介绍在构建和扩展自动售货机时,如何在编辑器中表示状态机。

BSM 编辑器使用状态机的 XML 表示形式,称为状态适应性编排语言(SACL,发音为 sachel)。SACL 文件用于生成业务流程编排 (BPC) BPEL 进程。此进程可以长时间运行,因此它可以管理状态机状态的持久性。事实上,生成进程不会影响 BSM 的开发、调试或监视。不过,当通过 BPC Explorer 或 BPC Explorer 运行时 API 管理 BSM 时,核心功能以及与状态机的交互将由一个长时间运行的 BPEL 进程来表示。

由于 BSM 生成 BPEL 进程,因此,这会导致在设计业务应用程序时碰到何时应使用此方法而不使用彼方法的问题。在最高级别上,可以将进程看做是与“名词”状态机一起使用的“动词”。不过,在状态机比较简单的情况下,使用进程更好一些。例如,不带任何循环(返回原来的状态)的状态机在作为一个进程开发时可能更有意义。但是,如果存在许多循环,则作为状态机进行开发、调试和监视更合理一些。

现在让我们了解一下自动售货机,以便探讨 BSM 支持的核心状态机概念,以及这些概念在 Integration Developer 中的表示形式。





回页首


核心状态机概念

前面我们已经讲过,在本文章系列中,我们将使用自动售货机来阐述 BSM 的功能。在本文中,我们将构建最基本的自动售货机。我们将在后续文章中讲述一些高级概念,例如条件、操作、超时和组合状态。

开启和关闭

自动售货机最简单的用例是维护接口。此接口控制自动售货机的开启和关闭,如图 1 所示。


图 1. 简单状态机的开启和关闭
图 1. 简单状态机的开启和关闭

此状态机有三种状态和两种转换。

  • InitialState1 状态是初始状态,由绿色圆形图标表示。由于这是状态机启动的位置,因此每个状态机均必须有一个确切的初始状态。
  • FinalState1 状态是最终状态,由蓝色圆形图标表示。状态机在到达最终状态后就会结束。可能存在多种最终状态,但由于状态机始终在到达最终状态时结束,因此在 BSM 中定义多个最终状态对应用程序的功能或逻辑没有任何影响。仅在需要不同的输入操作(将在后续文章中讨论)或者通常使状态机更具可读性时才使用多个最终状态。
  • Running 状态是一种简单的状态。在此状态中,可以通过 powerOn 操作进入 Running 状态,并可以通过 powerOff 操作退出该状态。稍后您将了解到,我们可以使用多种操作进入和退出单个状态。

本例中的转换是由与 BSM 关联的 WSDL 接口(或多个接口)上的操作所导致的。

您可以使用接口编辑器来定义操作。对于本例,该接口(在接口编辑器中)如下面的图 2 所示。


图 2. 自动售货机接口
图 2. 自动售货机接口

这两种操作都是单向操作,每种操作都带有单一参数 (serialNumber),用于唯一地确定自动售货机。换句话说,由于状态机是持久性的,因此我们需要确保操作能够应用到状态机的正确实例。这意味着,每个操作必须传递能够识别状态机实例的独特信息。用数据库术语说,就是 BSM 的主键。BSM 使用与 BPEL 相同的技术来调用此关联信息。

关联信息在编辑器中定义,方法是单击状态机的背景,并在 Properties 视图中选择 Correlation 选项卡(请参见图 3)。


图 3. 关联属性选项卡
图 3. 关联属性选项卡

在本例中,我们是使用称为 serialNumber 的单一变量(也叫做属性)进行关联的,该变量的类型为 String。自动售货机关联 ID 的属性如图 4 所示。


图 4. 设置关联属性值
图 4. 设置关联属性值

需要为 BSM 的接口中定义的每个操作分配关联属性,以确保将操作应用于正确的进程实例。此值可以分配到传入参数的任何部分,因此虽然 serialNumber 可能是 BSM 的关联 ID,但其他传入操作可以将其指定为员工 ID。通过指定用于关联值的参数和参数部分,BSM(如 BPEL)提供了创建属性别名的功能。在我们的示例中,对于每个操作都提供了一个别名,并且指出应从每个操作上的 serialNumber 参数指定关联 serialNumber。尽管本例非常简单,但有些示例可能非常复杂,特别是关联信息来自带有复杂部分的消息时。

回过头看我们的示例,其中的两个转换由导致该转换的操作来标识。齿轮图标用于指示编辑器中的操作。因此,当我们调用 powerOn 操作时,将创建一个 BSM,而且与我们传入的 serialNumber 相关联(因为它是 serialNumber 关联属性的别名)。然后该状态机将转入 Running 状态。如果我们尝试使用相同的序列号再次调用 powerOn 操作,则会失败,因为 Running 状态没有与 powerOn 关联的传出转换。有效的操作只有 powerOff 操作,该操作将导致发生从 RunningFinalState1 的转换。这时 BSM 失效,这意味着现在可以重新使用序列号。使用错误的 serialNumber 调用 powerOff 会导致相应的 BSM 关闭,如果不存在具有该序列号的 BSM,则会导致失败。

初始状态传出的转换是唯一性的。初始状态传出的转换只能有一种,而且为此转换指定的操作只应使用这一次。此转换必须有一种操作,因为在创建状态机实例时必须为状态机设置关联。

现在我们有了一台可以开启和关闭的自动售货机。此状态机将能够运行,我们可以使用 BPC Explorer 测试它。





回页首


在 BPC Explorer 中测试自动售货机

您可以通过 Integration Developer 中的 BPC Explorer 选项或者通过外部 Web 浏览器来启动 BPC Explorer。要在 Integration Developer 内部启动该浏览器(请参见图 5),请右键单击 Servers 视图中的服务器,选择 Launch,然后单击 BPC Explorer


图 5. 在 Integration Developer 中打开 BPC Explorer
图 5. 在 Integration Developer 中打开 BPC Explorer

如果该服务器尚未启动,该此选项将显示为灰色。要在 Web 浏览器中启动 BPC Explorer,请使用以下地址:http://localhost:9080/bpc,其中 localhost 和 9080 分别为缺省主机名和端口值。此缺省页(如图 6 所示)指向一个屏幕,其中显示为您分配的人工任务。


图 6. 打开 BPC Explorer 时等待用户操作的任务列表
图 6. 打开 BPC Explorer 时等待用户操作的任务列表

人工任务与为 BSM 生成的长时间运行进程是分开的,本文没有讨论该人工任务。要找到自动售货机 BSM,请单击左上部的条目 My Process Templates,如图 7 所示。


图 7. 显示活动状态机实例的进程模板
图 7. 显示活动状态机实例的进程模板

术语“模板”用于确定长时间运行进程的定义,“实例”则表示当前运行的长时间运行进程的特定实例。对于 BSM,在调用初始状态传出的操作时将创建进程实例;同时,在到达最终状态时该进程实例将失效。

在上面的屏幕中,对于我们的 BSM 仅有一个模板。该模板的名称与我们为 BSM 给定的名称 VendingMachine 相同。尽管在我们的示例中只有 BSM,但该视图中显示了系统中所有 BPEL 和 BSM 应用程序的所有进程模板。

要创建自动售货机的实例,请单击 VendingMachine 前面的复选框,然后单击 Start Instance 按钮,请参见图 8。


图 8. 在 BPC Explorer 中创建状态机实例
图 8. 在 BPC Explorer 中创建状态机实例

在此屏幕中(图 8),您可以指定用于创建 BSM 的参数。Process Name 是用于确定与 BSM 的此实例关联的进程的名称。serialNumber 是创建状态机的 powerOn 操作的参数。如果 powerOn 操作有多个参数,则它们也会显示在这里。我们还记得,在设计 BSM 时,serialNumber 是用于进行关联的,因此它必须是唯一的。

在单击 Submit 时,将创建一个 BSM 实例,而且 BPC Explorer 会自动导航回 My Process Templates 屏幕。这时,我们可以使用多种方法来查看刚才创建的状态机实例。其中一种方法是单击 VendingMachine 前面的复选框,并单击 Instances 按钮。这将显示该模板的所有实例(无论您是否创建了它们)。另一种方法是单击 BPC Explorer 左导航部分中的 Started By Me 选项。这会显示您使用任何模板创建的实例。在我们的示例中,图 9 显示了一个相同的实例。


图 9. 活动自动售货机进程实例
图 9. 活动自动售货机进程实例

在本文中,我们的重点是测试 BSM,因此不计划详细介绍在此屏幕上可以执行哪些操作,但将重点介绍以下几项。

了解一些基本的 BSM 操作

BPC Explorer 中显示的状态与 BSM 实例的状态毫无关系。此状态与实例本身有关。对于 BSM,Terminate 按钮将立即终止该实例。这在尝试安装其他版本的 BSM 时会特别有用。如果服务器不是处于开发模式,则 BPEL 在有运行的实例后将不允许替换模板。在生产中,BSM 与 BPEL 类似,其中可以指定“Valid from”日期,该功能可导致在“Valid from”日期之后创建的所有实例都使用该版本的模板。“Valid from”可以在总体 BSM 的 Properties 视图中找到(在 BSM 编辑器的空白处单击),如图 10 所示。


图 10. 状态机属性中可选的“Valid from”设置
图 10. 状态机属性中可选的“Valid from”设置

在我们的示例中没有使用“Valid from”。

我们还必须能够对 BSM 执行其他操作。为实现这一点,请单击进程名称 (test1)。这将转到图 11 所示的屏幕,其中显示了该实例的详细信息。


图 11. 可以在活动状态机上执行的可用操作
图 11. 可以在活动状态机上执行的可用操作

您也可以在此屏幕上终止该实例,但要调用某个操作,请单击 Events 选项卡(即使它显示为灰色),如图 12 所示。


图 12. 对活动状态机实例发送操作
图 12. 对活动状态机实例发送操作

这将显示可以对 BSM 调用的所有操作。注意,这里显示了所有操作,无论它们在 BSM 的当前状态中是否有效。例如,图 13 中显示了 powerOn 操作,但使用该操作要么会导致创建一个新的 BSM(如果使用了唯一的序列号),要么会由于 Running 状态不支持该操作而导致失败(如果使用了相同的序列号)。要使用某个操作,请单击相应的操作名称。在我们的示例中,请单击 powerOff 转到一个新页,其中可以为特定操作输入数据。


图 13. 向自动售货机发送 powerOff 事件
图 13. 向自动售货机发送 powerOff 事件

我们可以输入序列号并单击 Submit。该序列号必须与我们先前创建 BSM 实例使用的序列号相同。在接受此操作之后,BSM 将结束。BPC 浏览器返回到操作列表屏幕,但由于状态机实例不再可用,因此操作列表将替换为“No items found”。如果返回 Started By Me 视图,则不再显示 BSM 实例。





回页首


结束语

在本文中,我们讨论了 BPEL 进程与 BSM 之间的区别,并重点介绍了状态机如何为事件驱动的循环“名词”提供优秀的解决方案。我们创建了一个基本的自动售货机,并使用 BPC 浏览器对其进行了测试。在本系列的后续文章中,我们将对自动售货机进行扩展,使其能够收取钱币并分发产品。我们还将寻求其他方法来测试和调试 BSM。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章