当前位置导航:炫浪网>>网络学院>>编程开发>>JAVA教程>>J2EE

JBPM实践之:并发子流程的实现

    关于JBPM中并发子流程的实现方式,网上有很多的说法,但是好像每种办法都有这样那样的缺点,要么实现太复杂,要么就是会使Token无法继续流转。这里我介绍一种我的并发子流程的实现方式:使用TaskNode使任务并行的方式,模拟实现JBPM子流程的并发执行。

    我先简单的介绍一下实现思路:

    1、数据库中应该有至少三个已经发布过的流程定义(ProcessDefinition),发布的顺序无所谓,一个主流程两个子流程

    2、我们在主流程中要实现并发子流程的环节放置TaskNode,设置create-tasks="false"、signal="last-wait"

    3、我们想要实现几个子流程的并发就在第二步放置的TaskNode中放置几个Task,每个Task的名字都是要并发的子流程的名称

    4、在TaskNode的Node-Enter action中,我们手动为每一个Task创建一个任务实例,同时我们取得Task的名字也就是要并发的子流程的名字,创建流程实例

    5、为每个新创建的流程实例设置流程变量:TaskInstanceID表示创建当前子流程的那个主流程任务实例ID,并使子流程开始流转

    6、子流程结束,取得流程变量TaskInstanceID,该流程变量TaskInstanceID是创建他的那个主流程的任务实例,得到该TaskInstance,并TaskInstance.end();

    这个时候因为我们设置了TaskNode的Signal为"last-wait",所以当所有的子流程均结束的时候,主流程才会继续,这样我们也就实现了子流程的并发效果。很简单的一个思路实现起来也并不复杂。

    首先让我们看一下主流程的流程定义:

 1 <? xml version="1.0" encoding="UTF-8" ?>
 2 < process-definition   xmlns =""   name ="super1" >
 3      < start-state  name ="start-state1" >
 4          < transition  to ="task-node1" ></ transition >
 5      </ start-state >
 6
 7      < task-node  name ="task-node1"  create-tasks ="false"  signal ="last-wait" >
 8          < description >
 9             我们要利用这个TaskNode实现并发子流程,create-tasks="true"是为了可以手动控制任务实例的创建,同时创建子流程,
10             signal="last-wait"是为了实现当所有子流程均已完成,主流程才能继续运行的效果
11          </ description >
12          < task  name ="sub1" >
13              < description > 要并发的子流程之一 </ description >
14          </ task >
15          < task  name ="sub2" >
16              < description > 要并发的子流程之二 </ description >
17          </ task >
18          < event  type ="node-enter" >
19              < action  name ="NodeEnterAction"  class ="jbpmTest.bfzlc.action.NodeEnterAction" ></ action >
20          </ event >
21          < transition  to ="end-state1" ></ transition >
22      </ task-node >
23
24      < end-state  name ="end-state1" ></ end-state >
25
26      < event  type ="process-start" >
27          < script  name ="SuperProcessStart" >
28             System.out.println( &quot; 主流程启动,并设置主流程ID &quot; );
29          </ script >
30      </ event >
31      < event  type ="process-end" >
32          < script  name ="SuperProcessEnd" >
33             System.out.println( &quot; 主流程结束 &quot; );
34          </ script >
35      </ event >
36 </ process-definition >

共3页 首页 上一页 1 2 3 下一页 尾页 跳转到
相关内容
赞助商链接