JBPM的重要概念

xiaoxiao2026-05-23  13

JBPM的表关系:

JBPM_ACTION                                 action记录表 JBPM_DECISIONCONDITIONS     结果条件表 JBPM_DELEGATION                        委托表 JBPM_EVENT                                    事件表 处理进入或者离开事件 JBPM_EXCEPTIONHANDLER        异常处理表 JBPM_ID_GROUP                             用户组表 JBPM_ID_MEMBERSHIP                 用户成员表   表现用户和组之间的多对多关系 JBPM_ID_PERMISSIONS                用户权限表 JBPM_ID_USER                                用户表 JBPM_MODULEDEFINITION         模块定义表 JBPM_MODULEINSTANCE            模块实例表 JBPM_NODE                                     流程节点表 JBPM_POOLEDACTOR                   汇集参与着表 JBPM_PROCESSDEFINITION         流程定义表 JBPM_PROCESSFILE                       流程文件表 JBPM_PROCESSFILEBLOCK         流程文件块表 JBPM_PROCESSINSTANCE           流程实例表 JBPM_RUNTIMEACTION               运行中行为表 JBPM_SCRIPTVARIABLES             脚本变量表 JBPM_SWIMLANE                          泳道表 JBPM_SWIMLANEINSTANCE       泳道实例表 JBPM_TASK                                     任务表 JBPM_TASKACTORPOOL             用户行为汇总 JBPM_TASKINSTANCE                 任务实例 JBPM_TIMER                                   计时表 JBPM_TOKEN                                 令牌表 JBPM_TOKENVARIABLEMAP      令牌变量影射表 JBPM_TRANSITION                        转换表 JBPM_VARIABLEINSTANCE         变量实例表 JBPM_VARIABLEINSTANCEBLOCK  变量实例块表 JBPM_VARIABLEMAPPING            变量影射表

流程图 流程图由节点(node)和转换(transition)组成. 在文件 processdefinition.xml中定义 . 每个节点有一个类型. 每个节点有一套离开转换. 可以给离开节点的转换一个名字来区别. 节点 每个节点有一个指定的类型. 节点类型定义当执行到达这个节点的时候将发生什么. jBPM 有一套你可以使用的预实现的节点类型.另外也有自定义节点类型,你可以编写自己的定制代码实现你自己的指定的节点行为. 节点责任 每个节点有2个主要责任: 首先,它可以执行传统java代码. 传统java代码同节点功能相关. 比如.建立一个新的任务实例, 发送一个通知, 更新数据库.其次,节点传播流程执行. decision节点 路由节点,解决流转的路由问题。当需要在流程中根据不同条件来判断执行不同路径时, 就可以用decision节点。 state 节点 是纯粹的wait节点,除非主动的调用signal,否则一直处于等待状态;比如,和外部系统 交互,等待外部系统响应成功之后,再继续process的执行 node 节点 node节点可以让你在节点中写你自己的代码. node节点期望一个子元素动作(action), 在 执行到达这个节点时候被执行.你的action要实现ActionHandler接口。同样,在你的action里要控制流程! 事件(Event) 例如节点可产生node-enter(节点进入)事件和一个node-leave(节点离开)事件。事件是同动作(action)挂钩的. 每个时间有一个动作(action)清单.当jBPM引擎产生一个事件,动作(action)清单就会被执行.不同的节点支持的事件类型不同,是由event元素所在的node的类型决定的 不同元素支持的事件类型: node node-enter node-leave start-state node-leave end-state node-enter transition 只有一个执行转换的事件(taking a transition) 配置时不用指定类型 task task-create task-start task-assign task-end 动作(action) 一个action是一段java代码 在流程执行期间在一些事件上定义,这样会在相关事件触发时自动执行 用来引入附加的处理逻辑 可以放在node内,也可以放在events中 --可以用在多个元素之内,用来辅助当前节点完成业务逻辑 属性: class name ref-name Script 使用的是beanshell脚本 可以直接使用已设置的流程变量 以下变量在Script中可以直接引用: executionContext token node task taskInstance 提示: 能使用action的地方一般也能使用script 可用<![CDATA[   ]]>包围内容 fork 把一个执行路线分割成多个执行路线,并为每个transition(分支)建立一个子令牌(父母-子女 关系)。如果token(parent token)遇到fork节点,会自动的分裂成多个child token,此时,parent token指向fork节点,child token指向各个分支节点。每次分支的token往前移动时,都会检查是否需要在结束自己的同时也把parent token 往前移动。 join 让所有来自同一个父母的子令牌联合. 当来自同一个fork的全部令牌都进入join的时候, join就结束了. 然后join将检查父母-子女. 当所有兄弟令牌到达联合(join),父母令牌将传播(唯一的)transition. 当还有兄弟令牌活动时,联合(join)的行为将作为等待状态. start-state  标识流程开始边界 支持事件类型:node-leave 可以包含task元素(需要在流程实例创建之前进行认证) end-state  标识流程的结束边界 支持事件类型:node-enter 不需要transition元素 mail-node  发送邮件节点

jbpm中最重要的概念,应该是令牌(Token)和信令(Signal) Token 在整个流程实例运行过程中,我们可以迅速的利用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的结束和流程的结束。
转载请注明原文地址: https://www.6miu.com/read-5049264.html

最新回复(0)