phoebus的专栏

太阳神拉像一个发光的蛋,从父亲圣水努中浮出

转载  jbpm的Token,node 收藏

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的结束和流程的结束。 
 

发表于 @ 2006年08月27日 01:01:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:jBPM表 | 新一篇:流程图中的node type

  • 发表评论
  • 评论内容:
  •  
Copyright © phoebus2006
Powered by CSDN Blog