关闭

jbpm的Token,node

标签: tokenjbpmtransitionsignalaction任务
1758人阅读 评论(1) 收藏 举报
分类:

Token

jbpm中最重要的概念,应该是令牌(Token)和信令(Signal)

在整个流程实例运行过程中,我们可以迅速的利用token得到其当前的current state。在解决“并行”等(比如Fork)问题时,jBpm让Token对象维护了父子关系,这种关系在涉及到Fork的时候会产生。 jBpm让Token这个对象身兼了多种使命:(1)快速定位current state (2)用于fork,join算法 (3)用于告知任务执行者的任务索引。

如下代码:

//pd是process definition,pi是process instance ProcessInstance

pi = new ProcessInstance( pd );

//得到根令牌

Token token = pi.getRootToken();

//发信令

token.signal();

Token的signal方法也可以传入transition参数,这个方法把信令发送给Token,这样,令牌将被激活,并沿指定的transition离开当前的状态(如果没有指定transition,将沿缺省的transition 离开当前状态).

jbpm是怎么实现的呢?其实很简单:

1)Token记录了当前的状态(current state),只有当前的状态(或称节点)拥有该令牌

2)向TOKEN发signal后,当前状态收到该signal

3)当前状态把令牌传给signal中指定的transition

4)transition收到令牌后,不强占,马上把令牌传给下个状态.

5)根据令牌的位置,流程的状态已经发生改变.

 

node

 

一个流程图由许多node和transition组成。每个node都有一种类型,这个类型决定了当流程执行到这个node时的不同行为。jbpm有一组node type可以供你选择,当然你可以定制自己node 。
node的作用
node有两个主要的作用:
1)执行java代码,比如说创建task instance(任务实例)、发出通知、更新数据库等等。很典型的就是在node 上挂上我们的action
2) 控制流程的执行:
A、等待状态
流程进入到这个node时将处于等待状态,直到一个signal 的发出
B、流程将沿着一个leaving transition越过这个node
这种情况特殊一点,需要有个action挂在这个node上(注意这个action不是event触发的!),action中将会调用到API里
executionContext.leaveNode(String transitionName),transitionName即这里的leaving transition名字。
C、创建新的执行路径
很典型的就是fork node。流程在这里会分叉,产生新的执行路径。这样就创建了新的token,每个新的token代表一个新的执行路径。注意的是,这些新的token和产生前的token是父子关系!
D、结束执行路径
一个node可以结束一条执行路径,这同样意味着相应的token的结束和流程的结束。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:109578次
    • 积分:1563
    • 等级:
    • 排名:千里之外
    • 原创:33篇
    • 转载:20篇
    • 译文:7篇
    • 评论:30条
    文章存档
    最新评论