传智播客--JBPM流程图详解总结

来源:互联网 发布:数据挖掘入门书籍推荐 编辑:程序博客网 时间:2024/06/06 01:17

今天是 jbpm 的第二天,我们会接着学习 JBPM 的流程图等内容.这两天是基础.接下来的几天中,我们会做一个 OA 的项目,在这个项目中我们会综合的运用到这两天在 JBPM 中学习到的知识.对这个项目我和我的同学们都是很期待的.所以,要把这几天的基础打好.要不 OA 项目没法做了.好好努力吧.

1.jbpm 流程图
在jbpm的Eclipse的插件中,提供了各种各样的形状,不同的形状代表不同的意思和功能.如果现有的形状还不够用,还可以自定义新的形状.不同的节点类型代表不同的行为。
在画流程图的时候要特别注意, 每个流程都必须要有开始节点和结束节点,而且只能有一个.

2.预定义节点
start-state,开始节点:标识流程开始、
end- state,结束节点:标识流程结束、
task-node,任务节点:可以放0个或多个任务、
decision,决策节点:路径选择,只使用一个流转(叉路口)、
fork/join,分支节点/合并节点:可以分为多个并行执行的分支、
state,状态节点:等待。
总结:
还有mail-node、process-state、super-state等
每个节点都对应一个类(Jbpm的持久化类),都是 org.jbpm.graph.def.Node的子类。节点都有名字、流转(end-state除外)。
start-state 节点
开始节点:标识流程开始边界。开始状态有且只有一个,就是说流程中不能有任何 transition 指向开始节点。
创建新的流程实例后,就有一个对应的Token(RootToken,根令牌)指向 start-state。并且处于等待状态,需要给 Token 发信号(signal)才能使流程继续执行。
end-state 节点
结束节点:标识流程的结束边界。不需要 transition 元素。
流程实例执行到结束节点是时,流程实例结束,会填充结束时间。(以流程实例的结束时间是否为null,判断流程实例是否结束)
task-node 节点
任务节点:可以包含任意数量(0..*)的Task(任务定义)。人就是通过任务与流程交互的。
默认行为:
进入节点时会创建任务实例。(create-tasks)
处于等待状态,直到任务实例全部完成。(Signal)

3.节点执行过程
1)当执行到一个任务节点的时候,将会根据这个 task-node 中的 task 的定义,创建相同数量的 TaskInstance(任务实例)(为每一个Task都创建一个任务实例,并且分配给任务定义中指定的参与者)。
2)这个 task-node 一直处于等待状态。等到这些任务实例都被完成后,才会离开当前的节点,到达下一个节点。如果一个 task-node 中没有定义任务。执行时,一进入这个节点就会马上离开,即 Token 不会在这个 task-node 上停留。因为他发现所有的任务实例都执行完了(任务实例的数量为0)。

4.节点属性
1)signal属性
指定完成任务实例对执行流程的影响,发信号。指定哪个任务实例完成后会发信号离开节点.
属性可取的值:
last:默认值,当最后一个实例被完成时候发信号。当在这个入口没有任务被生成时候,流程继续执行(发信号)
first:当第一个实例被完成时候发信号。当在这个入口没有任务被生成时候, 执行继续.
never:不管任务实例是否完成,都不发信号。
nsynchronized:进入节点后就发信号,不管任务是否没建立或有没有完成。就是说任务的执行和流程执行互不影响。
last-wait:当进入节点时没有任务实例被创建时,就会一直处于等待状态,直到任务实例被创建;创建任务实例后,就是当所有的实例都执行完成后发信号(和last一样了)。

2)decision 节点
决策节点:用于计算流向。在 decision 中使用 DecisionHandler。或使用一个表达式,也是返回要使用的 transition 的 name。

3)fork 与 join (分支节点与合并节点)
fork(分支节点)的作用是将单个执行流程分裂成多个并发的执行流程。默认的行为是为每个分支生成一个子令牌,并建立子令牌和主流程令牌之间的父子关系。此时,父令牌指向fork节点,子令牌指向各个分支节点。

join(合并节点)将分支收拢。当从同一个fork中出来的所有的分支都到达该节点的时候,join节点将结束这些分支上的子token,并给他们的父Token发一个信号离开 join节点(从fork节点直接到join节点的下一个节点,不会经过join节点)。如果只有分支中的部分token到达时,join结点将处于等待状态。

fork和join节点要成对的出现。

今天学习了那么多,得及时做做练习,要不不能很好的理解和运用.最近的学习,发现了自己的一个缺点,动手能力不是很好.有很多的原理听的很明白,可是自己一动手写代码的时候就不是那么回事.总是发生这样或那样的问题.所有,听懂和能写代码了是两回事.得抓紧时间多多的练习.

原创粉丝点击