天天看點

Activiti 流程啟動及節點流轉源碼分析

具體的流程圖如下:

Activiti 流程啟動及節點流轉源碼分析

流程圖對應的xml檔案如下:

Activiti 流程啟動及節點流轉源碼分析

流程啟動跟蹤分析:

圖一:

Activiti 流程啟動及節點流轉源碼分析

圖二:

Activiti 流程啟動及節點流轉源碼分析

圖三:

Activiti 流程啟動及節點流轉源碼分析

圖四:

Activiti 流程啟動及節點流轉源碼分析

以上主要是跟蹤分析了,三個節點之間的流轉情況。

在流轉的時候需要注意以下兩個接口:

原子操作(atomicoperation)接口:

注意:

interpretableexecution接口:

單獨摘出來的兩個方法是圖一中:

Activiti 流程啟動及節點流轉源碼分析

上下文、原子操作、執行器實體三者互相調用的關鍵。

上圖的具體調用情況如下:

executionentity類中的:

performoperation函數中調用上下文commandcontext類中的:

performoperation函數調用原子操作(atomicoperation)接口中的void execute(interpretableexecution execution)來處理。

該處的處理分為兩種情況:

1、根據atomicoperation接口辨別來繼續進行流轉

(再次調用executionentity類中的performoperation(atomicoperation executionoperation)方法)

比如:

process_start=》process_start_initial=》activity_execute。。。。。。

具體可以參考本文圖一到圖四的代碼跟蹤中的辨別。

2、根據節點上的activitybehavior類進行不同的處理

Activiti 流程啟動及節點流轉源碼分析

activiti節點(開始、結束、任務、網關等等)都是activity類型的,隻是其挂的activitybehavior不同,通過不同的activitybehavior來實作相應的操作。