最近,我在做流程引擎Activiti相关的东西,刚开始时的一个知识点困扰了我许久,那就是Activiti的ProcessInstance与Execution的区别,这是一个Activiti的难点,能够懂得这个,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是一个东西。