`
cicada_IT
  • 浏览: 51707 次
社区版块
存档分类
最新评论

jbpm入门 流配置(纯属记录)

阅读更多
如果,你掌握了一个流程引擎的灵魂,你才有能力理解它的全部。否则,一个引擎对你来说,可能只是一个复杂的结构,丰富多彩API、令人眼花缭乱的“功能”和“服务”而已。------引自:“揭秘jbpm流程引擎内核设计思想及构架 ”胡长城

fork:

有一个分支到达流程就可以继续执行的效果了,如下:

  1. import org.jbpm.graph.def.ActionHandler;   
  2. import org.jbpm.graph.exe.ExecutionContext;   
  3. import org.jbpm.graph.node.Join;   
  4.   
  5. public class JoinAction implements ActionHandler {   
  6.   
  7.     public void execute(ExecutionContext arg0) throws Exception {   
  8.         Join join=(Join)arg0.getNode();      
  9.         join.setDiscriminator(true);    
  10.     }   
  11.   
  12. }  

decision: 

一个decision用以决定在多个执行路径中哪个才可以被执行。如果你是一个程序员,把它可以理解成switch case结构即可,一个decision能够具有许多离开的transition。Handler所指定的DecisionHandler的实现类里的decide方法返回一个字符串,表示要执行哪个transition,如下例:

java 代码
  1. import org.jbpm.graph.exe.ExecutionContext;   
  2. import org.jbpm.graph.node.DecisionHandler;   
  3.   
  4. public class ForkDecision implements DecisionHandler {   
  5.   
  6.     public String decide(ExecutionContext arg0) throws Exception {   
  7.         String dayCount = (String) arg0.getVariable("dayCount");   
  8.         String go = "to boss approve";   
  9.         if (Integer.parseInt(dayCount) > 10) {   
  10.             go = "to join";   
  11.         }   
  12.         return go;   
  13.     }   
  14.   
  15. }  

event:

JBPM定义了一系列与工作流节点元素相关联的事件,例如,流程实例运行过程中,可以触发节点进入(node-enter)、节点离开 (node-leave)、流程启动(process-start)、流程结束(process-end)、任务创建(task-create)、 任务分派(task-assign)、任务启动(task-start)等事件。

个人理解,event为action服务,在action外面包一层,使action更加灵活。

timer:

定时器timer可以被用于decision fork join node process-state state super-state task-node,可以设置开始时间duedate和频率repeat,定时器动作可以是所支持的任何动作元素,如action或script。
timer 还有一个很重要的属性cancel-event,这个是timer和task结合时使用的,任务定时器的cancel-event可以被定制。默认情况 下,当任务被结束时(=完成)任务上的定时器将被取消,这是通过在定时器上使用cancel-event属性,流程开发者可以定制诸如task- assign或task-start。cancel-event支持多个事件,通过在属性中指定一个用逗号分割的列表,可以组合cancel-event 的类型。

Task:

Task 是是流程定义里的一部分,它决定了task instance的创建和分配。

swimlane:

实际应用中,一个人是一个流程中多个Task的参与者(actor)的情况是很常见的。在jbpm中通过创建一个swimlane并且把swimlane赋给一个task的方式来设置当前task的参与者(actor)。一个业务流程中的swimlane可以被看做为一个参与者的参与者对象的名称,当然它不一定是固定的某个人,它可以是一个用户组,一个特定用户的角色等。首次执行到达一个Task,赋给该Task的一个swimlane就会算出参与者(actor)。

controller(控制器):

在任务执行时,可能需要读、写流程变量;在任务完成并提交时,可能需要写流程变量。为此,jBPM提供了"任务变量"的概念。在某些情况下,任务变量和流 程变量并非简单的一一对应关系,例如,三个流程变量代表三个月的销售额,任务变量只需要它们的平均值。为实现任务与流程实例之间的信息交流,jBPM设置 了任务控制器机制。该机制也采用递进模式:首先,jBPM提供基本(默认)的任务控制器;如果不敷使用,二次开发人员可以使用自定义的任务控制器。 jBPM的任务控制器机制在流程变量和任务变量之间架起了一座桥梁。

例子:

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <process-definition xmlns="" name="test">  
  3.     <!--定义一个开始结点,名为start,指向fork1-->  
  4.     <start-state name="start">  
  5.         <transition name="" to="fork1"></transition>  
  6.     </start-state>  
  7.     <!--在fork1分支结点上,我们定义了两个走向(transition)tr1和tr2,其中tr1指向top-state节点,tr2指向一个process-state,当token到达for1时会自动形成两个child token,沿着tr1和tr2的指向继续向执行-->  
  8.     <fork name="fork1">  
  9.         <transition name="tr1" to="top-state"></transition>  
  10.         <transition name="tr2" to="test-sub-process"></transition>  
  11.     </fork>  
  12.     <!--top-state是一个state类型的节点,也就是前面提到的手工节点-->  
  13.     <state name="top-state">  
  14.         <transition name="to test-task" to="test-task"></transition>  
  15.     </state>  
  16.     <!--test-task是一个task-node类型的节点,它可以有多个task节点,生成我们的taskInstance,这里我们定义了三个节点-->  
  17.     <task-node name="test-task" signal="first">  
  18.         <task name="task-a"></task>  
  19.         <task name="task-b"></task>  
  20.         <task name="task-c"></task>  
  21.         <transition name="to buttom-node" to="buttom-node"></transition>  
  22.     </task-node>  
  23.     <!-- buttom-node 是一个node节点,可以自动执行,不用人工干预处理-->  
  24.     <node name="buttom-node">  
  25.         <transition name="" to="join1"></transition>  
  26.     </node>  
  27.     <!--  在test-sub-process里我们加上了一个子流程处理,子流程定义我们写在了里面定义的enter-sub-process-action 里-->  
  28.     <process-state name="test-sub-process">  
  29.         <event type="node-enter">  
  30.             <action name="enter-sub-process-action"  
  31.                 class="gaojie.process.action.EnterSubProcessAction">  
  32.             </action>  
  33.         </event>  
  34.         <transition name="" to="join1"></transition>  
  35.     </process-state>  
  36.     <!--join1是一个join节点,与fork节点对应,从fork分支出发的所有child token汇集到join后继续向下执行-->  
  37.     <join name="join1">  
  38.         <transition name="" to="end"></transition>  
  39.     </join>  
  40.     <!--最后是结束结点,流程执行到此就宣告结束了-->  
  41.     <end-state name="end"></end-state>  
  42. </process-definition>  

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics