本文共 5215 字,大约阅读时间需要 17 分钟。
开源世界的版本问题,永远是入门者的噩梦,简单记录一些资料。 目前jbpm主要有3 4 5三个版本,用5的目前很少,用4的也不多,主要是用的3 然后3.1和3.2的界面不同,3.1用jbpm而3.2用jbpm-console,3.2的功能多些支持用户管理而3.1的界面很好。 主要用3.1.4-startkit和3.2.3-startkit。 开发环境建议 1. jbpm-starters-kit-3.1.4.zip 下载地址: http://nchc.dl.sourceforge.net/project/jbpm/jBPM%203/jbpm-3.1.4/jbpm-starters-kit-3.1.4.zip 2. JBossIDE-1.6.0.GA-Bundle-win32.zip 下载地址: http://jaist.dl.sourceforge.net/project/jboss/JBossIDE/JBoss%20IDE%201.6.0.GA/JBossIDE-1.6.0.GA-Bundle-win32.zip 学习资料 3.1.4 严重建议,手把手:http://www.99inf.net/SoftwareDev/Java/43324.htm 会签(悲催的BlogJava又被墙了):http://www.blogjava.net/liuwentao253/archive/2008/09/22/230339.html 直接贴代码吧,主要有三个文件,原文有个condition的小错误 1/4 processdefinition.xml <?xml version="1.0" encoding="UTF-8"?> <process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="meeting"> <swimlane name="requester"> <assignment expression="user(ernie)" /> </swimlane> <swimlane name="chief"> <assignment expression="user(bert)" /> </swimlane> <swimlane name="boss"> <assignment expression="user(grover)" /> </swimlane> <swimlane name="cosinger"> <assignment class="com.hjz.jbpm.study.CosingerAssiHandler"></assignment> </swimlane> <start-state name="start"> <task name="newprj"> <controller> <variable name="amount" access="read,write,required" mapped-name="金额"></variable> </controller> </task> <transition name="to_submit" to="提交申请"></transition> </start-state> <task-node name="提交申请"> <task name="tc_prj_submit" swimlane="requester"></task> <transition name="to_chiefapprove" to="tc_prj_chiefapprove"></transition> </task-node> <task-node name="tc_prj_chiefapprove"> <task name="tc_prj_chiefapprove" swimlane="chief"></task> <transition name="approve" to="tc_prj_countersign"></transition> <transition name="disapprove" to="提交申请"></transition> </task-node> <task-node name="tc_prj_countersign" signal="last-wait" create-tasks="false"> <task name="tc_prj_countersign"> <event type="task-end"> <action class="com.hjz.jbpm.study.TaskEndCountersign"> </action> </event> </task> <event type="node-enter"> <action name="createInstance" class="com.hjz.jbpm.study.CreateTaskInstanceCountersign"> </action> </event> <transition name="approve" to="amount_decision"></transition> <transition name="disapprove" to="提交申请"></transition> </task-node> <decision name="amount_decision"> <transition name="to_end" to="end1"></transition> <transition name="to_bossapprove" to="tc_prj_bossapprove"><condition>#{amount >= 500}</condition></transition> </decision> <task-node name="tc_prj_bossapprove"> <task name="tc_prj_bossapprove" swimlane="boss"></task> <transition name="approve" to="end1"></transition> <transition name="disapprove" to="提交申请"> </transition> </task-node> <end-state name="end1"></end-state> </process-definition> //2/4 com.hjz.jbpm.study.CreateTaskInstanceCountersign.java package com.hjz.jbpm.study; import org.jbpm.graph.def.ActionHandler; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.graph.exe.Token; import org.jbpm.graph.node.TaskNode; import org.jbpm.taskmgmt.def.Task; import org.jbpm.taskmgmt.exe.TaskMgmtInstance; public class CreateTaskInstanceCountersign implements ActionHandler { private static final long serialVersionUID = 1L; public void execute(ExecutionContext executionContext) throws Exception { Token token = executionContext.getToken(); TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance(); TaskNode taskNode = (TaskNode) executionContext.getNode(); Task task = taskNode.getTask("tc_prj_countersign"); ?????????ldap ?????????????????????? tmi.createTaskInstance(task, token).setActorId("ernie"); tmi.createTaskInstance(task, token).setActorId("bert"); tmi.createTaskInstance(task, token).setActorId("grover"); } } //3/4 com.hjz.jbpm.study.CosingerAssiHandler.java package com.hjz.jbpm.study; import org.jbpm.graph.exe.*; import org.jbpm.taskmgmt.def.*; import org.jbpm.taskmgmt.exe.Assignable; public class CosingerAssiHandler implements AssignmentHandler { private static final long serialVersionUID = 1L; public void assign(Assignable assignable, ExecutionContext executionContext) { String[] a = { "ernie", "bert", "grover" }; assignable.setPooledActors(a); } } //4/4 com.hjz.jbpm.study.TaskEndCountersign.java package com.hjz.jbpm.study; import java.util.Collection; import java.util.Iterator; import org.jbpm.graph.def.ActionHandler; import org.jbpm.graph.exe.ExecutionContext; import org.jbpm.taskmgmt.exe.TaskInstance; import org.jbpm.taskmgmt.exe.TaskMgmtInstance; public class TaskEndCountersign implements ActionHandler { private static final long serialVersionUID = 1L; public void execute(ExecutionContext executionContext) throws Exception { Boolean isDisapprove = Boolean.valueOf((String) executionContext.getVariable("isDisapprove")); if (isDisapprove.booleanValue()) { TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance(); TaskInstance ti = executionContext.getTaskInstance(); final String actorId = ti.getActorId(); Collection c = tmi.getSignallingTasks(executionContext); for (Iterator it = c.iterator(); it.hasNext();) { TaskInstance task = (TaskInstance) it.next(); if (!(actorId.equals(task.getActorId())) && (!task.hasEnded())) { task.end("disapprove"); } } } } } 3.2.3 BPM jPDL 用户开发手册 3.2.3 (全文pdf) http://zhangym.javaeye.com/blog/253544转载地址:http://nudai.baihongyu.com/