过程模型
9.1. Overview
流程定义主要基于定向图表示了一个商业流程的规范。定向图包括了节点node和变迁transition。有很多类型的节点,节点的类型定义了运行时的行为,流程定义有且只有一个开始状态。
令牌token是一个执行的路线,token是一个运行时的概念,用来维护图中指想节点的指针。
过程实例process instance是一个过程定义的实现,process instance建立后,一个令牌也为主要执行路线建立了. 这个令牌称为这个流程实例的根令牌,它的位置处于流程定义的开始状态。
信号signal通知token继续graph的执行。当接收到一个匿名的signal,token将通过默认的transition离开当前node;当接收到一个指定的信号,token将通过指定的transition离开node。信号发给一个被委托给根令牌的流程实例。
当一个token到达node,node将执行,节点自己有责任延续图执行。图执行的连续是通过让令牌离开节点来完成的。不同类型的node有不同的执行方式,不能传递执行的node叫做状态state节点。
活动action是过程运行期间由事件event触发的执行(一段java代码),图是软件需求沟通的一种工具,图仅仅是软件的一个视图,他隐藏了很多细节。action则在图外部增加了很多细节,一旦图放在某个地方,它可有动作来修饰,同时加入action不会影响图本身的结构。主要的event包括进入节点、离开节点、执行事务 。
9.2. Process graph
最基本的过程定义是包含了节点和变迁的图,可以通过processdefinition.xml描绘。节点有很多类型如:state, decision, fork, join,... 每个节点又对应一组变迁,变迁通过命令来区分,如下是一个拍卖的过程图和对应的xml:
<process-definition> <start-state> <transition to="auction" /> </start-state> <state name="auction"> <transition name="auction ends" to="salefork" /> <transition name="cancel" to="end" /> </state> <fork name="salefork"> <transition name="shipping" to="send item" /> <transition name="billing" to="receive money" /> </fork> <state name="send item"> <transition to="receive item" /> </state> <state name="receive item"> <transition to="salejoin" /> </state> <state name="receive money"> <transition to="send money" /> </state> <state name="send money"> <transition to="salejoin" /> </state> <join name="salejoin"> <transition to="end" /> </join> <end-state name="end" /> </process-definition> |
9.3. Nodes
jbpm提供了一组现成的节点类型给我们使用,同时,我们也可以自己实现自定义的节点类型。
节点的职责,每个节点有2个职责,首先,节点可执行,可执行一定的功能如建立任务实例、发送信息、更新数据库;其次,可以将过程执行进行传播,传播的过程分为几种情况:
- 执行没有传播,这是一个等待状态wait state。
- 通过执行节点的一个离开转换来传播执行. 令牌到达节点是通过一个离开转换API executionContext.leaveNode(String). 现在节点作为可执行一些定制程序逻辑及不用等待连续流程执行的自动节点。
- 建立一个新的执行路线,即节点建立了一个新的令牌,每个新令牌代表了一种新的执行路线,这个新建的令牌将自动跨过变迁。比如一个分叉fork节点。
- 执行的结束ÿ