博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JBPM的一点资料
阅读量:4171 次
发布时间:2019-05-26

本文共 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/

你可能感兴趣的文章
BIM+GIS应用的八大挑战
查看>>
.net实现.aspx页面自动加载.cs程序定义的变量并按照格式输出
查看>>
[Leetcode]最后一个单词的长度
查看>>
merges sort use c++
查看>>
插入排序用递归实现
查看>>
工作流审批平台-审批流程-指定审批部门
查看>>
商务智能-系统概述-数据图形方式
查看>>
软件项目管理系统-项目管理-模块定义-开发内容
查看>>
工作流审批平台-审批功能
查看>>
商务智能-基本方法-特征与角度
查看>>
软件项目管理系统-项目管理-模块定义-开发笔记
查看>>
工作流审批平台-业务申请-申请书一览
查看>>
商务智能-基本方法-数据钻取
查看>>
C++程序员技术需求规划(发展方向)
查看>>
聊聊我当年在培训学校做开发的经历
查看>>
用Docker搭建Redis主从复制的集群
查看>>
盘点这些年我出的书,以及由此得到的收获
查看>>
用Python的Pandas和Matplotlib绘制股票KDJ指标线
查看>>
面试必问:对java多线程里Synchronized的思考
查看>>
最近接了本分布式组件面试书的选题,请大家一起来提意见
查看>>