jBPM4常见概念
1. 流程定义(Process Definition)
流程定义是记录在xml文件中的对流程的描述,它包含惟一的流程开始节点和多个流程功能节点,每一个节点之间使用transition进行链接。
Process Definition使用id, key和version进行标识,jBPM中可能包含多个key值相同的Process Definition,key值相同的Process Definition会拥有不一样的version值,而id是使用key-version的形式用来表示惟一的Process Definition的。
jBPM中使用RepositoryService来控制流程定义的发布,浏览,删除等操做。
2. 流程实例(Process Instance)
以流程定义为蓝本生成的流程实例,在jBPM属于Execution的一种。
当咱们执行start时,会根据流程定义启动一个新的流程实例,而后它会根据流程定义里的节点运行,在遇到state或task时停顿,等待外部用户调用signal,最后会执行到end节点,结束整个流程。
jBPM中只容许有一个start节点,因此每一个流程都是单一入口的,jBPM4中能够容许有多个end节点,因此咱们能够在任意位置结束流程。
jBPM中使用ExecutionService来控制流程实例的启动,浏览,执行,删除等操做
3. state节点
状态结点是一个典型的等待状态。同任务结点不一样的是,状态结点不会向任务列表添加任务实例。当业务进程须要等待外部系统的干预时,这种结点是颇有用的。(须要外部系统干预,但又不是让人去干预)假设以下状况:在进入该结点时,经过node-enter事件向外部系统发送一个消息,而后结点进入等待状态;当外部系统完成处理,并回送一个消息,这将致使触发一个signal()方法的运行,该方法从新激活正在等待的流程继续下行
jBPM中使用ExecutionService来控制对state的signal操做。
4. task节点
任务结点(task-node)任务结点是表明由人介入的一个或多个任务。所以当流程运行到一个任务结点时,会生成“任务实例对象(task instances)”,并添加到参与人的任务列表中,以后结点会处于等待状态,直到参与人完成他们的任务,并激活流程继续向下执行。
task节点可使用assignee, swimelane等方式为任务定义分配到某我的或者某个组,对应的用户能够执行completeTask()结束任务,并控制任务结束后流程实例向哪一个方向前进。
jBPM中使用TaskService控制task的各项操做。
5. Identity身份验证
jBPM中的身份验证分为User, Group和Membership三部分,用户表示登录用户,Group表示用户组,用户和用户组之间的关联关系保存在Membership中。User和Group与Task中的assignee和swimelane是息息相关的。
6.事件
Event反映的是流程执行中的各个时刻。在流程执行中 JBPM引擎会在计算下一个状态的时候触发各类事件。一个事件一般和流程定义中的一个元素相关联,好比流程定义自己,节点或者转移。大部分的元素可以触发不一样类型的事件,好比一个节点能够触发节点进入事件,节点离开事件。事件实际上是和动做链接在一块儿的。每一个事件维护一个动做列表。当JBPM引擎触发一个事件的时候,该事件维护的动做列表中的动做将被执行。
JBPM中事件类型是写死在事件类中的,共有16种:
EVENTTYPE_TRANSITION = "transition"; // 转移
EVENTTYPE_BEFORE_SIGNAL = "before-signal"; // 发信号前
EVENTTYPE_AFTER_SIGNAL = "after-signal"; // 发信号后
EVENTTYPE_PROCESS_START = "process-start"; // 处理开始状态
EVENTTYPE_PROCESS_END = "process-end"; // 处理结束状态
EVENTTYPE_NODE_ENTER = "node-enter"; // 进入节点
EVENTTYPE_NODE_LEAVE = "node-leave"; // 离开节点
EVENTTYPE_SUPERSTATE_ENTER = "superstate-enter"; // 进入超级状态
EVENTTYPE_SUPERSTATE_LEAVE = "superstate-leave"; // 离开超级状态
EVENTTYPE_SUBPROCESS_CREATED = "subprocess-created"; // 子流程建立
EVENTTYPE_SUBPROCESS_END = "subprocess-end"; // 子流程结束
EVENTTYPE_TASK_CREATE = "task-create"; // 任务建立
EVENTTYPE_TASK_ASSIGN = "task-assign"; // 任务分派
EVENTTYPE_TASK_START = "task-start"; // 任务启动
EVENTTYPE_TASK_END = "task-end"; // 任务结束
EVENTTYPE_TIMER = "timer"; // 定时器
7.transition
关联两个节点,用于表示节点的走向
8.经常使用类说明
ProcessEngine:它是整个jBPM4的入口,而且是单例模式。经过它能够获取processEngine,并藉此得到工做流引擎所提供的各类服务
RepositoryService:控制流程定义的发布,浏览,删除等操做
ExecutionService:控制流程实例的启动,浏览,执行,删除等操做
IdentityService:控制身份的各项操做node
*********************************************************************************************数据库
对jBPM4.3数据库的几张表简单介绍 spa
JBPM4_DEPLOYMENT 流程定义表
JBPM4_DEPLOYPROP 流程定义属性表
JBPM4_EXECUTION 流程实例表
JBPM4_HIST_ACTINST 流程活动(节点)实例表
JBPM4_HIST_DETAIL 流程历史详细表
JBPM4_HIST_PROCINST 流程实例历史表
JBPM4_HIST_TASK 流程任务实例历史表
JBPM4_HIST_VAR 流程变量(上下文)历史表
JBPM4_ID_GROUP 角色表
JBPM4_ID_MEMBERSHIP 用户角色表
JBPM4_ID_USER 用户表
JBPM4_JOB 定时表
JBPM4_LOB 存储表
JBPM4_PARTICIPATION 参与者表
JBPM4_SWIMLANE 泳道表
JBPM4_TASK 任务表
JBPM4_VARIABLE 上下文表
红色的表为常用的表.这里不使用JBPM本身的权限角色定义.xml
发布一个流程deploy后
jbpm4_deployment新增一条记录
jbpm4_deployprop新增三条记录
jbpm4_lob新增一条记录
开始一个流程startProcessInstanceByKey后
jbpm4_execution新增一条记录
jbpm4_hist_actinst新增一条记录
jbpm4_hist_procinst新增一条记录
jbpm4_hist_task新增一条记录
jbpm4_task新增一条记录对象
流程定义相关的布署信息就存储在(1) JBPM4_DEPLOYMENT、(2) JBPM4_DEPLOYPROP 及(3) JBPM4_LOB 中。上传一个包含png和jpdl.xml的zip包后,JBPM4_DEPLOYMENT多一条记录 JBPM4_DEPLOYPROP多三条, JBPM4_LOB多两条。
(4)J B PM4_HIST_PROCINST 与(5) JBPM4_HIST_ACTINST 分别存放的是Process Instance、Activity Instance的历史记录。
(6)JBPM4_EXECUTION 主要是存放JBPM4的执行信息,Execution机制代替了JBPM3的Token机制(详细参阅JBPM4的PVM机制,过段时间我也会进一步分析)。
(7)JBPM4_TASK 存放须要人来完成的Activities,须要人来参与完成的Activity 被称为Task。
(8)JBPM4_PARTICIPATION 存放Participation的信息,Participation的种类有Candidate、Client、Owner、 Replaced Assignee和Viewer。而具体的Participation既能够是单一用户,也能够是用户组。
(9)JBPM4_SWIMLANE。 Swim Lane是一种Runtime Process Role。经过Swim Lane,多个Task能够一次分配到同一Actor身上。
(10) JBPM4 _VARIABLE 存的是进行时的临时变量。
(11) JBPM4_HIST_DETAIL 保存Variable的变动记录。
(12)JBPM4_HIST_VAR 保存历史的变量 。
(13) JBPM4_HIST_TASK Task的历史信息。
(14)JBPM4_ID_GROUP (15)JBPM_ID_MEMBERSHIP (16)JBPM4_ID_USER 这三张表很常见了,基本的权限控制,关于用户认证方面建议仍是本身开发一套,JBPM4的功能太简单了,使用中有不少须要难以知足。
(17) JBPM4_JOB 存放的是Timer的定义。blog