`

JBPM的一点资料

 
阅读更多
开源世界的版本问题,永远是入门者的噩梦,简单记录一些资料。
目前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
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics