最近,我在做流程引擎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是一個東西。