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