馳騁工作流引擎JFlow與activiti的對比之4種高階分支同步模式
- 多重選擇(Multiple Choice)
在流程中,當一個活動完成後,有多個分支進行選擇,可以選擇執行其中的一個或者N個分支。
例子:比如去世博園玩,在門口檢票後,可以選擇A-E個片區中的N個進行觀光。
ACTIVITI 中的支援情況:
1.JPDL方式不支援先定義好這裡的幾種,然後根據條件去篩選其中的幾種進行,但是ACTIVITI.4之後支援一種叫foreach的節點,允許我們在執行時指定幾種特定的任務,比如上面例子中的片區,我們可以在選定後再去迴圈。
2.BPMN方式支援根據條件執行多個子分支。
JFLOW中的支援情況:
1.通過定義流程為異表單分合流來實現。
a通過條件控制發起子執行緒數量。設定方向條件的時候,可以根據需要,選擇不通的條件設定,比如:崗位條件、部門條件、表單條件等。
b通過節點樹形中設定手工選擇方向控制,可以控制發起子執行緒的發起數量。
2.通過父子流程也可以實現。
- 同步聚合(Synchronizing Merge)
在流程中的某個聚合點,流程會等待所有的分支到來,才能啟用後續的活動。如果分支只有一個,那麼就變成簡單聚合模式;如果存在2個以上分支,那就是同步模式。
這種模式的關鍵在於能夠動態的根據分支的多少進行聚合。
ACTIVITI 中的支援情況:
可以通過設定ACTIVITI 的join節點屬性multiplicity的值為某個變數,並在程式中動態的修改變數的值來制定分支的數量。
JFLOW中的支援情況:
分合流中合流操作。無論分支有多少,都可以進行彙總,並且可以對彙總的子執行緒進行刪除操作、完成率控制等。
JFLOW的多重選擇與同步聚合例項圖:
結束為聚合點,中間的為分支。
- 多重聚合(Multiple Merge)
在流程中的多個分支,都可以啟用後續的活動,也就是會產生多個例項。
例子:遊客觀光完N個片區之後,每個片區各自的系統可以對遊客在自己片區的資訊進行儲存。
ACTIVITI 與JFLOW的支援請參考 同步聚合。
- 鑑別器(Discriminator)
在流程的某個聚合點,N個分支的第一個分支到達後,就立刻啟用後續活動;與此同時,流程仍然要等待其餘的分支完成並忽略完成。
注意:在其餘分支未全部完成前,第一個到達的分支所啟用的後續節點是無法執行的。
例子:個人申請提交後,並行提交給第一導師審批、第二導師審批、第三導師審批,他們中只要有一個完成了,那麼就可以提交給學院審批。
N-out-of-M鑑別器模式:
跟鑑別器模式一樣的,只是這種模式是N個到達後,啟用後續節點,而剩下的M-N個節點未完成前,新啟用的後續節點一樣無法被執行。
ACTIVITI 中的支援情況:
沒有直接支援這種模式,但是通過自定義節點,應該是可以處理這種模式的。
JFLOW中的支援情況:
有兩個屬性的控制,可以實現功能,就是上面所說的子執行緒完成路和子執行緒刪除規則。
第1個:子執行緒完成率。 該規則可以決定是否可見
第2個:子執行緒刪除規則。該規則決定那些子執行緒可以被刪除以及他們的刪除方式。