一、ProcessInstance与Execution的区别
这是一个Activiti的难点,能够懂得这个,工作流也就入门大半了。
下面,我就细致的讲解一下他们的区别。
(1)首先,我们来看一张我总结的图片(这个图片中两条红色的execution包含网关与开始与结束节点,这个图片能够理解,那就不用再细致的看了)
这张图片就细致的说明了Activiti中流程实例ProcessInstance与Execution的区别,ProcessInstance与Execution的区别主要表现在有分支的流程中:
(i)如果流程是单线流程,那么此时的ProcessInstance就是Execution,这可以再数据库表act_ru_execution表中看出,在数据库表act_ru_exection表中的ID_与PROC_INST_ID_的值相同,这时的数据代表的就是ProcessInstance的相关数据,标红的数据再与上面条数据进行对比,就会非长容易的发现,再标红的数据下面没有数据的PARENT_ID_是等与标红的PROC_INST_ID_的,因为act_ru_execution表就是执行实例表,所以ProcessInstance也就是Execution的一种特殊情况,所以此时的ProcessInstance就是Execution。
(ii)下面我们来说一下图中的分支流程部分,在图中可以看出,一个流程会对应一个ProcessInstance还有与分支数量相同的Execution,然后我们通过act_ru_exection表中的数据细致的分析与对比一下
此时我们图中所画的流程图在act_ru_execution表中对应的三条数据,与单线流程的知识相结合可以得知,此时得第一条数据对应的就是ProcessInstance的相关数据,三条数据的PROC_INST_ID_相等,可以得知它们是属于同一流程,再通过下面两条数据的PARENT_ID_等于第一条数据的PROC_INST_ID_可以知道,这两条数据是两条不同分支的执行实例信息Execution
(2)然后,我们再在代码层面说说ProcessInstance与Execution的关系
在这里,我们可以看出ProcessInstance继承与Execution,本质上ProcessInstance与Execution是一个东西。
二、多实例会签时的execution
(1)串行,配置两人,生成了3个执行实例,第一个是流程实例的执行实例,第二个是执行实例的主节点,第三个是当前正在执行的实例。
当第一个任务执行完后,会自动生成第二个任务,继续使用之前的执行实例,当前任务的执行实例不会改变,执行实例列表也无任何变化。
等当前节点全部任务执行完毕后,会删除第二和第三条执行实例,生成下个节点的执行实例。
(2)并行时,配置两人,发现共生成了4个执行实例。
第一个:流程实例的执行实例;
第二个:并行执行实例的父实例
第三和第四:是真正任务的实例
并行执行实例的父实例,被标注为根节点,并且激活状态为false;