论坛首页 Java企业应用论坛

jBPM4.0的用户指南(五-1)

浏览 2490 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-03-24   最后修改:2009-03-24
第5章的内容太多了,所以我分开写了

第 5 章 jPDL

jPDL文件描述的是流程的过程,这篇文章也可以作为jPDL的快速参考文档。

下面是一个jPDL流程文件的例子:

<?xml encoding="utf-8"?>
<process name="Purchase" xmlns="http://jbpm.org/4/jpdl">
    <start>
        <transition to="Verify supplier" />
    </start>
    <state name="Verify supplier">
        <transition name="Supplier ok" to="Check supplier data" />
        <transition name="Supplier not ok" to="Error" />
    </state>
    <exclusive name="Check supplier data">
        <transition name="nok" to="Error" />
        <transition name="ok" to="Completed">
    </exclusive>
    <end name="Completed" />
    <end name="Error" />
</process>
   

5.1. process流程处理

顶级元素(element)是流程处理定义

表 5.1. process流程处理的属性
属性 类型 默认值 是否必须 描述
name名称 文本 必须 在与用户交互时,作为流程名字显示的一个名字或是标签。
key键 字母或数字字符 如果省略,key会被非字母和非数字的字符替换。 可选(optional) 用来辨别不同的流程定义。拥有同一个key的流程会有多个版本。对于所有已发布的流程版本,key:name这种组合都必须是完全一样的。
version版本 整型 比已部署的key相同的流程版本号高1,如果还没有与之相同的key的流程被部署,那么版本就从1开始。 可选 流程的版本号

表 5.2. process流程的元素
元素 个数 描述
description描述 0个或1个 描述文本
activities活动 至少1个 流程中会有很多活动,至少要有1个是启动的活动。

5.2. Activities活动

BPMN(Business Process Modeling Notation,业务流程建模符号):我们在这里不仅涉及了BPMN活动,而且还介绍了BPMN的事件(events)和网关(gateways)
5.2.1. start启动

简单的说是流程启动的流向(execution),准确地说是流程的一个启动活动(activity)。一个流程至少有一个启动(start)活动(activity),一个启动活动必须有一个向外的跳转(transition),这个跳转会在流程启动的时候被执行。

已知的限制:一个流程处理只能有一个启动节点(start)。

表 5.3. start启动的属性

属性 类型 默认值 是否必须 描述
name名称 文本 可选 活动的名字,在启动活动没有内部的跳转(transition)时,name名称是可选的。

表 5.4. start启动的元素
元素 个数 描述
transition跳转 1 向外的跳转

5.2.2. State状态节点


一个等待状态节点。流程处理的流向会在外部触发器调用提供的API之前一直等待。状态节点和其他的活动不一样,它没有其他任何属性或元素。
5.2.2.1. 序列状态节点

让我们看一个用序列连接状态和跳转的例子。
序列状态节点

图 5.1. 序列状态节点

<process name="StateSequence" xmlns="http://jbpm.org/4/jpdl">
    <start>
        <transition to="a" />
    </start>
    <state name="a">
        <transition to="b" />
    </state>
    <state name="b">
        <transition to="c" />
    </state>
    <state name="c" />
</process>
               

下列代码将启动一个流向:

Execution execution = executionService.startProcessInstanceByKey("StateSequence");
               

创建的流程处理实例会停留在状态节点a的位置,使用signalExecution的方法就会触发一个外部触发器。

String executionId = exectuion.getId();
execution = executionService.signalExectuionById(executionId);
               

5.2.2.2. 可选择的状态节点

在第2个状态节点的例子里,我们将演示如何使用状态节点实现路径的选择。
状态节点中的选择

图 5.2. 状态节点中的选择

<process name="State" xmlns="http://jbpm.org/4/jpdl">
    <start>
        <transition to="wait for response" />
    </start>
    <state name="wait for response">
        <transition name="accept" to="submit document" />
        <transition name="reject" to="try again" />
    </state>
    <sate name="submit document" />
    <state name="try again" />
               

让我们在这个流程处理定义里启动一个新的流程实例。

Execution execution = executionService.startProcessInstanceByKey("StateSequence");
               

现在,流向到达wait for response状态节点了。流向会一直等待到外部触发器的出现。这里的状态节点拥有多个向外的跳转,外部触发器将为向外的跳转提供不同的信号名(signalName),下面我们将提供accept信号名(signalName):

executionService.signalExecutionById(executionId,"accept");
               

流向会沿着名字是accept的向外的跳转继续进行。同样,当使用reject作为参数触发signalExecutionXxx方法时。流向会沿着名字是reject的向外的跳转继续进行。
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics