JBPM中任务分配的几种方式
来源:互联网 发布:js过渡效果 编辑:程序博客网 时间:2024/06/09 15:27
在jbpm中关于任务的分配常见的有以下四种方式:
1、Assignee
2、Candidate-groups
3、assignmentHandler
4、Swimlanes
第一种分配方式在上一篇的博客中已经简单的应用了一下,我们可以通过assignee方式直接分配给用户Candidate-groups方式可以分配给用户组,通过AssignmentHandler在任务创建的时候分配任务:
<assignment-handlerclass="com.tgb.node.task.handler.AssignTask"></assignment-handler>
标签中的class是继承AssignementHandler的类,在这个类中只有一个方法:
public void assign(Assignable assignable, OpenExecution execution)throws Exception {assignable.setAssignee("userA");}
另外在这个方法中我们需要一个序列化ID。Swimlane的方式分配任务.通过第(3)种方式来分配任务时,虽然灵活,但是如果要将多个任务分配给同一个处理人时我们不得不编写多个handler类,造成java类的过度膨胀;这时候就可以通过Swimlane的方式来分配任务,多个相同处理人的Task结点只引用定义好的Swimlane就可以完成任务分配。
下面我们用例子简单理解这几种方式的应用。
1、采用Candidate-groups方式:
jpdl文件如下:
<?xml version="1.0" encoding="UTF-8"?><process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl"> <start name="start1" g="297,16,48,48"> <transition name="提交到任务A" to="任务A" g="-60,-9"/> </start> <end name="end1" g="302,364,31,48"/> <task candidate-groups="manager" name="任务A" g="273,99,92,52"> <transition name="提交到任务B" to="任务B" g="-52,-13"/> </task> <task name="任务B" g="277,189,92,52"> <transition name="提交到任务C" to="任务C" g="-51,-9"/> </task> <task name="任务C" g="281,273,92,52"> <transition name="通过" to="end1" g="-42,-13"/> </task></process>用户组的名称为manager,在java代码中,我们需要给这个组分配用户:
public void deploy() {super.startUp();String group=identityService.createGroup("manager");identityService.createUser("g1", "tom", "uu");identityService.createUser("g2", "tom2", "uu2");identityService.createMembership("g1",group);identityService.createMembership("g2",group);repositoryService.createDeployment().addResourceFromClasspath("com/tgb/node/task/Candidate/task3.jpdl.xml").deploy();}
g1和g2都是manager组中的用户,当一个用户完成任务之后,节点不会继续往下进行,只有这个组中的所有用户都完成任务之后,节点才会往下走。
2、采用assignee-handler监听方式:
<?xml version="1.0" encoding="UTF-8"?><process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl"> <start name="start1" g="297,16,48,48"> <transition name="提交到任务A" to="任务A" g="-60,-9"/> </start> <end name="end1" g="302,364,31,48"/> <task name="任务A" g="273,99,92,52"> <assignment-handler class="com.tgb.node.task.handler.AssignTask"> </assignment-handler> <transition name="提交到任务B" to="任务B" g="-52,-13"/> </task> <task name="任务B" g="277,189,92,52"> <assignment-handler class="com.tgb.node.task.handler.AssignTaskB"> </assignment-handler> <transition name="提交到任务C" to="任务C" g="-51,-9"/> </task> <task name="任务C" g="281,273,92,52"> <transition name="通过" to="end1" g="-42,-13"/> </task></process>
采用这种监听方式,在运行时他会自动监听相关联的java类,然后运行监听类中的assign方法,在监听类中会分配用户。
3、采用SWimlanes泳道方式:
<?xml version="1.0" encoding="UTF-8"?><process key="task" name="task" xmlns="http://jbpm.org/4.4/jpdl"><swimlane name="mySwim" assignee="U1"></swimlane> <start name="start1" g="297,16,48,48"> <transition name="提交到任务A" to="任务A" g="-60,-9"/> </start> <end name="end1" g="302,364,31,48"/> <task swimlane="mySwim" name="任务A" g="273,99,92,52"> <transition name="提交到任务B" to="任务B" g="-52,-13"/> </task> <task assignee="U2" name="任务B" g="277,189,92,52"> <transition name="提交到任务C" to="任务C" g="-51,-9"/> </task> <task swimlane="mySwim" name="任务C" g="281,273,92,52"> <transition name="通过" to="end1" g="-42,-13"/> </task></process>
泳道和UML中的泳道是类似的,它的一个最大的特点就是在一个泳道中的任务是同一个用户完成的。
在这四种分配任务方式中,我们最常使用的就是第一种,如果需要给用户组分配任务,我们可以选择第二中,如果当我们想要监听另外的java类时,我们可以选择第三种,如果有同一个用户会完成多个任务的时候,我们可以采用泳道的分配方式,每种任务的分配方式各有优缺点,我们要根据任务的实际情况而定。
- JBPM中任务分配的几种方式
- Jbpm 分派任务的几种方式
- jbpm中个人任务的指定方式
- jBPM4.4:分配任务的几种方式
- android中执行定时任务的几种方式
- nginx upstream的几种分配方式
- nginx upstream 的几种分配方式
- Nginx upstream的几种分配方式
- 浅谈外存分配的几种方式
- 浅谈外存分配的几种方式
- 几种内存的分配方式
- 浅谈外存分配的几种方式
- 浅谈外存分配的几种方式
- 任务并行的几种方式
- java任务调度的几种方式
- 实现定时任务的几种方式
- 定时任务的几种实现方式
- 任务顺序执行的几种方式
- Qt添加菜单和工具栏
- <志良电子>关于C语言中用Keil软件制作Lib库文件的几点经验
- CodeForces 489C Given Length and Sum of Digits...
- Qt添加状态栏
- 黑马程序员------用代码创建按钮
- JBPM中任务分配的几种方式
- 一步步学习Oracle
- JavaScript跨域总结与解决办法
- 哈哈~2014年5月以后就没有转过或者写过文章了,发生了什么^_^
- 我已不是当年的我——2015年终总结
- 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础
- 1017_A除以B (20)
- Boy or Girl paradox
- javascript同源策略