JBPM实践之并发子流程的实现Word文件下载.doc
《JBPM实践之并发子流程的实现Word文件下载.doc》由会员分享,可在线阅读,更多相关《JBPM实践之并发子流程的实现Word文件下载.doc(7页珍藏版)》请在冰点文库上搜索。
![JBPM实践之并发子流程的实现Word文件下载.doc](https://file1.bingdoc.com/fileroot1/2023-4/30/65c3e779-4397-4033-8c48-2e0b8d47826b/65c3e779-4397-4033-8c48-2e0b8d47826b1.gif)
1<
?
xml
version="
1.0"
encoding="
UTF-8"
>
2<
process-definition
xmlns="
"
name="
super1"
3
<
start-state
start-state1"
4
transition
to="
task-node1"
/transition>
5
/start-state>
6
7
task-node
create-tasks="
signal="
8
description>
9
我们要利用这个TaskNode实现并发子流程,create-tasks="
true"
是为了可以手动控制任务实例的创建,同时创建子流程,
10
是为了实现当所有子流程均已完成,主流程才能继续运行的效果
11
/description>
12
task
sub1"
13
要并发的子流程之一<
14
/task>
15
sub2"
16
要并发的子流程之二<
17
18
event
type="
node-enter"
19
action
NodeEnterAction"
class="
jbpmTest.bfzlc.action.NodeEnterAction"
/action>
20
/event>
21
end-state1"
22
/task-node>
23
24
end-state
/end-state>
25
26
process-start"
27
script
SuperProcessStart"
28
System.out.println(&
quot;
主流程启动,并设置主流程ID&
);
29
/script>
30
31
process-end"
32
SuperProcessEnd"
33
主流程结束&
34
35
36<
/process-definition>
下面是主流程的Node-EnterAction的代码:
1public
class
NodeEnterAction
implements
ActionHandler
{
2
public
void
execute(ExecutionContext
executionContext)
throws
Exception
//取得本节点所有的Task
Set<
Task>
tasks
=
((TaskNode)executionContext.getNode()).getTasks();
6
TaskMgmtInstance
tgmt
executionContext.getTaskMgmtInstance();
for
(Task
:
tasks)
//为每一个Task创建实例
TaskInstance
taskInstance
tgmt.createTaskInstance(task,
executionContext);
//业务Service
JbpmTestFacade
jbpmTestFacade
((JbpmTestFacade)SpringBeanUtil.getBean("
jbpmTestFacade"
));
//根据Task的名字,为每一个Task创建相应的子流程
ProcessInstance
processInstance
jbpmTestFacade.createProcessInstance(task.getName());
//设置创建这个子流程的流程实例ID
processInstance.getContextInstance().setVariable("
TaskInstanceID"
taskInstance.getId());
//子流程开始流转
processInstance.signal();
}
23}
再看其中一个子流程的定义:
Sub1Task"
SubTask1"
11
13
ProcessStartScript"
-------------------sub1流程启动------------------------------&
19
SubProcessEndAction"
jbpmTest.bfzlc.action.SubProcessEndAction"
23<
24
下面是该子流程的ProcessEndAction:
SubProcessEndAction
System.out.println(executionContext.getProcessDefinition().getName()+"
结束"
//得到创建当前子流程的那个TaskInstanceID
String
taskInstanceID
executionContext.getContextInstance().getVariable("
).toString();
//取得创建当前子流程的那个主流程taskInstance
jbpmTestFacade.geTaskInstance(Long.valueOf(taskInstanceID));
taskInstance.end();
14
15}
思路很清楚,代码也很简单,按照这种方式我们可以让子流程实现所有Task能实现的功能