工做流引擎是指workflow做爲應用系統的一部分,併爲之提供對各應用系統有決定做用的根據角色、分工和條件的不一樣決定信息傳遞路由、內容等級等核心解決方案。工做流引擎是爲工做流實例提供執行環境,它是工做流管理系統的核心服務,所以,工做流引擎設計的好壞直接關係到工做流的執行效率與可擴展性。設計模式
工做流引擎是工做流管理系統中爲過程實例和活動實例提供運行環境的服務軟件,是整個工做流管理系統的核心,工做流引擎的主要功能有:併發
(1)、解釋流程定義異步
(2)、建立流程實例(人工建立、自動建立;自動建立又包括自動定時建立和自動週期建立)分佈式
(3)、控制過程實例(流程實例的建立、運行、掛起、中斷、恢復、終止等)工具
(4)、控制活動實例(活動實例的建立、運行、掛起、中斷、恢復、終止等)spa
(5)、控制工做任務(工做任務的建立、運行、掛起、恢復、終止等)線程
(6)、與外部資源交互完成各項活動設計
(7)、維護工做流控制數據和工做流相關數據3d
工做流系統在實際應用分爲三個階段:模型定義、模型實例和模型執行。日誌
模型定義:利用流程建模工具設計用戶業務流程。
模型實例:定義的模型導入到運行庫,並作好狀態初始化,並分配每一個活動執行所需的資源(設備、參與者等)。
模型執行:根據運行庫的狀態,條件的斷定,推進流程的狀態躍遷,並完成之,同時對過程與活動的執行狀況進行監控與跟蹤。
總的來講,引擎就是一臺狀態機,裏面充斥了各類工做流對象的瞬時狀態,狀態之間的變遷也會相互影響,而且提供了接口讓外界的系統瞭解裏面的工做流對象的當前狀態。
工做流對象包括3種:過程,活動,任務。每一個對象的狀態有所不一樣,各個對象之間的狀態躍遷會相互之間有所影響。
工做對象中的過程實例、活動實例、工做任務之間的包含依賴關係以下:
過程實例的基本狀態能夠歸納爲以下六種:初始(Initiated)、運行(Running)、掛起(Suspend)、中斷(Abort)、終止(Terminate)、完成(Complete)。
這幾種狀態之間存在着基本的狀態轉換,以下圖所示:
發生狀態轉換的緣由多是因爲工做流引擎響應外部的特殊命令(如某個改變狀態的外部事件到來),也多是由於知足了過程定義中指定的狀態轉換條件(如一個時間依賴的狀態變換到達了規定的時間,或者數據依賴的狀態變換知足了數值的要求)、基本的狀態介紹以下:
(1)、初始(Initiated)
一個過程實例已經被建立,包括建立一些相關過程狀態數據和工做流相關數據,如分配該流程實例的ID,取得過程的初始相關數據及激活條件等。可是該過程實例尚未收到並響應一個啓動過程實例的事件。處於初始狀態的過程實例必定得經過啓動過程事件(如建立開始活動、將過程初始相關數據賦予開始活動以及啓動開始活動等行爲事件)來開始整個過程實例的運行。
狀態轉換:合適的條件下,初始狀態能夠轉換變遷到其餘的狀態。
A、初始==》運行
過程實例建立完成後,接受到啓動過程實例的事件,則過程實例將變遷到運行狀態,接着能夠建立合適的活動實例。
B、初始==》刪除
處於初始狀態下的過程實例,此時還沒建立活動實例,當接受到用戶刪除的請求後,自動刪除本過程實例,及相關業務數據。
(2)、運行(Running)
過程實例已經激活啓動執行,當處於運行狀態下的過程實例必須知足至少一個活動實例處於運行狀態。當知足條件的狀況下,過程實例所包含的初始狀態任何一個活動實例均可以被激活啓動運行。
狀態轉換:不一樣狀況下,運行狀態能夠轉換變遷到其餘的狀態。
A、運行==》掛起
當處於運行狀態下的過程實例被有權限的用戶發出掛起事件,或因爲工做流引擎自身處理異常致使發出過程實例掛起事件,有流程引擎將過程實例的狀態變動爲掛起狀態。掛起過程實例將致使全部處於運行狀態的活動實例和處於運行、領用狀態下的工做任務都將被掛起。
B、運行==》終止
過程實例沒有正常結束,而是在運行中被有操做權限的用戶終止,終止運行狀態的過程實例將致使全部未完成的活動實例和工做任務消失。
C、運行==》完成
當全部的活動實例都正常結束時,過程實例發現除告終束活動外再沒有其餘能夠執行的活動,則過程實例進入結束活動,調用結束活動的完成方法,過程實例進入完成狀態。
(3)、掛起(Suspend)
過程實例處於一種不活動的狀態,在該狀態下,不能啓動和操做任何活動實例和工做任務,除非過程實例已經過一個恢復過程實例事件或重啓動事件返回到運行狀態。
致使過程實例掛起的基本緣由有以下狀況:
(1)、工做流引擎的主動掛起:即運行到某個時刻,工做流引擎在導向下一個活動時出現異常,而且不能跳轉到可執行的行爲時,便主動將過程實例掛起。
(2)、工做流引擎的被動掛起:即運行到某個時刻,當有操做權限的用戶因爲某種緣由發出一個掛起事件給工做流引擎,工做流引擎會先記錄下該命令,等全部活動實例都結束、終止、掛起時,工做流引擎便當即將過程實例掛起而不去理會下一步如何流轉。
上述兩種過程實例的掛起,都將同時把過程實例中處於運行狀態的活動實例和處於運行、領用狀態下的工做任務掛起,這種活動實例或工做任務的掛起與過程實例在掛起前已經被掛起的活動實例或工做任務在恢復時將經過一個最近狀態改變事件屬性來加以區別。若是在過程實例掛起前活動實例或工做任務已經被掛起,則在掛起時只是修改過程實例的最近狀態改變時間。在進行恢復時也是經過比較活動實例或工做任務和過程實例的最近狀態改變事件來進行恢復:若是過程實例和活動實例或工做任務的最近狀態改變事件一致,則在恢復過程時將活動實例或工做任務同時進行恢復;若是不一致,則只是恢復過程實例,而活動實例或工做任務則繼續保持掛起狀態。
狀態轉換:不一樣狀況下,掛起狀態能夠轉換變遷到其餘的狀態。
A、掛起==》運行
工做流引擎收到恢復命令。如由於有權限的用戶修改了模版或者從新分配工做任務後,又恢復運行。恢復過程實例時將同時恢復過程實例掛起時被同時掛起的活動實例和工做任務。
B、掛起==》中斷
工做流引擎收在處理過程當中發現了過程實例的掛起時間超過過程實例的生存週期,便從掛起異常狀況下直接中斷過程實例。中斷一個被掛起的過程實例將使全部未完成的活動實例和工做任務消失。
C、掛起==》終止
處於掛起狀態下的過程實例接受到有權限的用戶發出的終止過程的命令,工做流引擎自動執行將過程實例轉換到終止狀態。 終止一個被掛起的過程實例將使全部未完成的活動實例和工做任務消失。
(4)、中斷(Abort)
過程實例處於中斷狀態下,說明過程實例已經結束。只有在過程實例處於掛起的狀態下,當工做流引擎在處理過程當中發現過程實例的掛起時間超過過程實例的生存週期,便從掛起異常狀況下執行中斷事件,結束過程實例。中斷狀態也是狀態轉換中的最後一個狀態,今後再也不有狀態轉換行爲發生。
(5)、終止(Terminate)
在正常結束以前該過程實例的執行已被結束。內部的操做(如錯誤登記、數據恢復、發出終止事件等)執行終止結束過程實例。終止狀態也是狀態轉換中的最後一個狀態,今後再也不有狀態轉換行爲發生。終止一個過程實例將終止該過程實例全部未完成的活動實例和工做任務。
(6)、完成(Complete)
過程實例已經知足告終束條件,被正常結束,並記錄內部的日誌數據或統計數據。全部的行爲按照業務流程的要求流轉完畢,即已經徹底或者基本達到了過程實例生成者的設計目的,完成狀態是狀態轉換中的最後一個狀態,今後再也不有狀態轉換事件發生。只有處於運行狀態的過程實例發現除告終束行爲外再沒有別的可執行的活動時,建立結束活動實例並調用其完成方法後獲得的狀態纔是完成狀態。這意味這該結束不是因爲任何強迫行爲所致使的結果,而是活動實例和工做任務按照預約的方案進行正常的狀態轉換所造成的結果。
活動實例的基本狀態能夠歸納爲以下:初始(Initiated)、運行(Running)、掛起(Suspend)、中斷(Abort)、終止(Terminate)、完成(Complete)。
這幾種狀態之間存在着基本的狀態轉換,以下圖所示:
(1)、初始(Initiated)
活動實例已經被建立,處於初始狀態狀況下,可是尚未符合開始激活啓動運行的條件,即尚未建立工做任務。
狀態轉換:合適的條件下,初始狀態能夠轉換變遷到其餘的狀態。
A、初始==》運行
當活動實例中至少一個工做任務已經被建立而且知足激活啓動運行的條件,即至少一個工做任務處於運行或領用狀態下,活動實例狀態將自動變遷爲運行狀態。
B、初始==》刪除
當接受到終止過程實例的命令後,處於初始狀態的活動實例將自動被引擎刪除。
(2)、運行(Running)
活動實例中至少一個工做任務已經建立而且激活啓動運行(至少一個工做任務狀態處於運行或領用狀態)。若是是人工活動則分配給指定的活動實例參與者來處理,若是是自動活動則分配給任務調度引擎來處理。此時的活動實例的狀態爲運行。
針對人工活動的活動實例與參與者之間的關係有兩種:獨佔式和分佈式。獨佔式是指活動實例的工做任務可由活動實例參與者中的任一個獨立完成,而且一旦其中的一個參與者處理後,其餘參與者便不能再處理。分佈式是指活動實例的工做任務被複制給活動實例的全部參與者,全部參與者所有處理後纔能有效。
狀態轉換:合適的條件下,運行狀態活動實例能夠轉換變遷到其餘的狀態。
A、運行==》掛起
當處於運行狀態下的活動實例接受到用戶發出的掛起事件時,引擎自動將活動實例的狀態變遷爲掛起狀態。該掛起事件將致使該活動實例的全部處於運行或領用狀態下的工做任務被掛起。這種工做任務的掛起和在活動實例執行掛起時已經被掛起的工做任務,在活動實例執行恢復時經過使用一個最近狀態改變事件屬性來進行區別對待;若是工做任務的最近狀態改變時間和活動實例的最近狀態改變時間相同,則代表該工做任務是因爲活動實例掛起而被掛起的,在活動實例恢復時對其進行恢復;若是活動實例和工做任務的最近狀態改變時間不一樣,則代表在活動實例掛起以前此工做任務已經被掛起,在恢復時不對其進行恢復。
B、運行==》終止
當處於運行狀態下活動實例接受到用戶發出的終止事件後,引擎自動將活動實例的狀態變遷爲終止狀態。終止活動實例將致使全部未完成的工做任務消失。
C、運行==》完成
當處於運行狀態下活動實例接受到工做任務處理完成的命令後,將正常結束完成本活動實例。
(3)、掛起(Suspend)
活動實例處於一種不活動的狀態,在該狀態下,不能啓動和操做任何本活動下的工做任務,除非活動實例已經過一個恢復活動實例事件或重啓動事件返回到運行狀態。
狀態轉換:不一樣狀況下,掛起狀態能夠轉換變遷到其餘的狀態。
A、掛起==》運行
工做流引擎收到恢復活動實例命令。恢復活動實例時將同時恢復活動實例掛起時被同時掛起的工做任務。
B、掛起==》中斷
工做流引擎在自動處理過程當中發現此活動實例的掛起時間超過活動實例的生存週期,便從掛起異常狀況下中斷活動實例。中斷一個被掛起的活動實例將使此活動下全部未完成的工做任務消失。只有這種狀況下才能從掛起到中斷的狀態變遷。
C、掛起==》終止
處於掛起狀態下的活動實例接受到有權限的用戶發出的終止活動的命令,工做流引擎自動執行將活動實例轉換到終止狀態。終止一個被掛起的活動實例將使此活動下全部未完成的工做任務消失。
(4)、中斷(Abort)
活動實例處於中斷狀態下,說明活動實例已經結束。只有在活動實例處於掛起的狀態下,工做流引擎在自動處理過程當中發現活動實例的掛起時間超過活動實例的生存週期,便從掛起異常狀況下執行中斷事件,結束過程實例。中斷狀態也是狀態轉換中的最後一個狀態,今後再也不有狀態轉換行爲發生。
(5)、終止(Terminate)
活動實例的執行被異常結束,即活動實例的參與者沒有所有提交工做任務便被終止。活動實例不容許用戶對其直接進行終止,只有當有權限的用戶在終止過程實例時而被該過程實例中的活動實例處於初始、掛起、運行狀態時候,才能夠對其進行終止。終止處於掛起、運行狀態的活動實例將致使活動實例的多有未完成的工做任務終止。終止狀態也是狀態轉換中的最後一個狀態,今後再也不有狀態轉換行爲發生。終止一個活動實例將終止該活動實例全部未完成的工做任務消失。
(6)、完成(Complete)
活動實例的執行正常結束,而且引擎將取得並評估該活動的後繼條件,以決定後續行爲。即該活動實例的全部參與者都被成功提交了各自的工做任務。完成狀態是活動實例變化中最後一個狀態。
工做任務的基本狀態能夠歸納爲以下:初始(Initiated)、運行(Running)、領用(Receive)、掛起(Suspend)、拒絕(Reject)、終止(Terminate)、完成(Complete)。
這幾種狀態之間存在着基本的狀態轉換,以下圖所示:
(1)、初始(Initiated)
工做任務已經被建立,可是尚未知足激活啓動運行的條件。
狀態轉換:以下狀況可致使工做任務從建立變遷到另外的狀態:
A、初始==》運行
當工做任務知足被激活啓動運行的條件後,狀態將自動變遷爲運行狀態。
B、初始==》刪除
工做流引擎接受到終止過程實例(或終止活動實例)的命令後,將自動清除處於初始狀態的工做任務。
(2)、運行(Running)
工做任務已經知足被激活運行啓動的條件,工做任務處於運行狀態。
狀態轉換:合適的條件下,運行狀態工做任務能夠轉換變遷到其餘的狀態。
A、運行==》掛起
當處於運行狀態下的工做任務接受到用戶發出的掛起事件時,引擎自動將工做任務的狀態變遷爲掛起狀態。
B、運行==》領用
當工做任務的參與者打開了分屬於本身的工做任務,此時工做任務將自動變遷爲領用狀態。
C、運行==》終止
當處於運行狀態下工做任務接受到用戶發出的終止事件後,引擎自動將工做任務的狀態變遷爲終止狀態。只有活動實例被終止狀況下才可能終止工做任務,用戶不能本身終止工做任務。
(3)、領用(Receive)
當處於領用狀態的工做任務說明已經被參與者打開過,則說明工做任務已經 被領用。
A、領用==》掛起
當處於領用狀態下的工做任務接受到用戶發出的掛起事件時, 引擎自動將工做任務的狀態變遷爲掛起狀態。
B、領用==》終止
當處於領用狀態下工做任務接受到用戶發出的終止事件後,引擎自動將工做任務的狀態變遷爲終止狀態。只有活動實例被終止狀況下才可能終止工做任務,用戶不能本身終止工做任務。
C、領用==》拒絕
當工做任務的執行者拒絕執行分配的工做任務,則工做流引擎將該工做任務變遷到拒絕狀態,拒絕狀態是狀態轉換中的最後一個狀態,今後再也不有狀態轉換行爲發生。
D、領用==》完成
當工做任務的執行者已經按照預約的要求完成了工做,而且向工做流引擎成功提交了工做結果,該工做任務便進入完成狀態。
(4)、掛起(Suspend)
工做任務變爲一種不活動的狀態,該狀態下,參與者不能打開該工做任務,除非它已經回到了運行或者領用狀態下。
狀態轉換:不一樣狀況下,掛起狀態能夠轉換變遷到其餘的狀態。
A、掛起==》運行
工做流引擎收到恢復工做任務命令。在變遷到掛起前的狀態爲運行狀態,則引擎自動恢復成運行狀態。
B、掛起==》領用
工做流引擎收到恢復工做任務命令。在變遷到掛起前的狀態爲領用狀態,則引擎自動恢復成領用狀態。
C、掛起==》終止
處於掛起狀態下的工做任務接受到有權限的用戶發出的終止活動的命令,工做流引擎自動執行將掛起狀態下的工做任務轉換到終止狀態。
(5)、拒絕(Reject)
工做任務參與者拒絕參與執行分配的任務項,處於拒絕狀態下的工做任務屬於結束狀態,拒絕狀態是狀態轉換中的最後一個狀態,今後再也不有狀態轉換行爲發生。拒絕屬於非正常結束工做任務。
(6)、終止(Terminate)
工做任務的執行被異常結束。在工做任務處於掛起、運行、領用狀態時才能被終止。工做任務不能有用戶直接進行終止操做,只有有權限的用戶在終止過程實例而終止其所屬的活動實例時,才能對工做任務進行終止。
(7)、完成(Complete)
工做任務執行完成正常結束,參與者按照要求完成了分配的工做任務。
只有處於領用狀態下的工做任務在成功提交後才能到達完成狀態。活動實例的全部工做任務都正常結束時,活動實例的狀態也到達完成狀態。
過程實例、活動實例、工做任務這三個工做流對象之間的總體的狀態的變遷及變遷過程當中相互的影響關係。三個對象的幾種狀態之間存在着基本的狀態轉換,以下圖所示:
工做流基本包含以下多種模式用於工做流過程建模和分析:
(1)、基本模式 5種
● 順序模式---- 按照順序執行各項活動
● 並行分支模式----同時運行兩個活動
● 同步模式----同步兩個並行的執行線程
● 單選模式----從多條路徑中選擇一個執行
● 簡單合併模式----合併兩個二選一路徑
(2)、高級分支與同步模式 5種
● 多選模式----從多條執行路徑中選出幾條
● 同步合併模式----合併多條路徑,若是有多條路徑被選擇,則進行同步;如 果只有一條路徑被選擇,則進行簡單合併
● 多合併模式----合併多條路徑
● 鑑別器模式----合併多條路徑而不進行同步,只執行一次後續活動
● M中的N模式-----合併多條路徑,進行部分同步,只執行一次後續活動
(3)、結構模式 2種
● 任意循環模式----沒有任何限制的執行工做流
● 隱含終斷模式----若是沒有事情可作,就結束
(4)、多實例模式
● 設計期多實例---流程設計時已知實例數目
● 運行時前置多實例---實例數目在運行時才能肯定
● 運行時非前置多實例---實例數目沒法肯定
● 同一任務多實例並要求同步運行
(5)、基於狀態模式
● 延期選擇---執行兩個可選進程之一,選擇執行進程是隱含的
● 交叉並行路由---隨機執行一個任務但不併行
● 里程碑---直到達到某個里程碑方激活一個任務
(6)、取消模式
● 取消活動---取消或禁止一個活動
● 取消過程---取消或禁止一個過程
(7)、其它模式
● 結構化循環
● 遞歸
● 臨時觸發器
● 持續觸發器
● 取消範圍
● 多實例的取消
● 多實例的手工完成
● 鑑別阻塞
● 鑑別取消
● 結構化N選M
● N選M阻塞
● N選M取消
● AND合併
● 多實例的N選M
● 多實例的N選M取消
● 動態多實例的N選M
● 循環的同步合併
● 同步合併
● 區域互斥
● 交叉路由
● 線程合併
● 線程分支
● 顯式終止
(1)、順序模式(Sequence)
最基本的過程模型:按照順序執行各項活動,前驅活動的完成是後續活動開始的必要條件,每個工做流系統都直接實現了這種模式,這個模式是工做流能運行的一個重要基石。
這個理論模型十分簡單,只是一個工做單元完成了,緊接着無條件執行下一個工做單元。
(2)、並行分支模式(Parallel Split)
在流程執行過程當中,須要將單進程的某個控制點分紅能夠並行執行的多進程控制,因而容許任務同時執行或者以任何順序執行。此一模式,實際就是咱們常接觸到的 AND 模型。
值得注意的是這個定義來講通常B、C、D之間是併發的,實現上通常是幾個不一樣的線程/進程。
(3)、同步模式(Synchronization)
AND分支之後,一個最爲廣泛的合併方式就是AND合併。當多個並行任務都完成後才能開始執行下一任務。
須要注意的細節是"同步"這個問題,不少時候存在現實業務的考慮,即便是同一個動做,也不必定是非要合併不可。
通常狀況下,並行分支和合並是組合使用,組合執行模型以下:
(4)、單選模式(Exclusive Choice)
單選模式其實就是「排它選擇」模式,在流程的某一節點,依據一個結果或流程控制數據, 從多個分支路徑中選定一個路徑執行。
須要注意的是這個"排他"性,只能選擇其中一個分支,另外多個分支將不會走下去。通常來講,這個模式的實現通常爲在運行時的條件選擇,就是條件判斷的代碼放到XOR 這個結點,而後去根據這些代碼去判斷下一步的走向。
(5)、簡單合併模式(Simple Merge)
在流程中某點,需將兩個或更多可選分支聚合而不一樣步;換言之,「合併」在任一入口鏈接觸發時被觸發。
這個模式主要是爲了應付前軀只有一個分支的流程,這個模式也是一個很經常使用的模式。在許多的流程圖中,沒有顯式說明的通常均可以看做是 XOR-join,就是任意一個前軀完成,就觸發下一個工做單元。
通常狀況下,單選模式和簡單合併模式是組合使用的,組合模式以下:
(1)、多選模式(Multiple Choice)
在工做流過程的某點,依據斷定或工做流控制數據,選擇一個或多個分支來進行執行。一般意義上來說就是咱們所說的OR_Split
(2)、同步合併模式(Synchronising Join)
流程中某點多條路徑聚合成一個線程,若多於一條路徑觸發,則活動線程需同步;若僅有一條路徑觸發,則可選分支應再收斂,無需同步。
工做流程中的多個路徑在一個點被匯合成一個單一的進程。若是多於一個的路徑到達了,活動線程就須要進行同步。若是隻有一個路徑到達,那麼其它的路徑應該異步的從新會聚。
這一個模式是爲了應付多選模式(Multiple Choice)或者一般意義所說的 OR-Split 所產生的分支。
說明:這個分支的合併,須要瞭解上下文的關係。若是前面只產生了A分支,那麼到達同步-JOIN節點就能夠觸發後續活動D。若是前面產生的分支A、B、C都被激活觸發,而且A、B、C分支是併發的,那麼當A、B都已到達同步-JOIN節點,可是C分支尚未到達,那麼就須要進行等待,等到C分支也到達本節點後,才能觸發執行下一節點D活動。
(3)、多合併模式(Multiple Merge)
多合併模式即多路合併,在流程中某節點,兩條或更多分支無同步再收斂。若多於一個分支被激活或多個分支被同時激活,流程須要對每一個被激活分支進行響應一次,則須要採用多合併模式。其實多路合併並非真正意義的合併,而是到達多路_JOIN節點時繼續相同的後續分支。
說明:如圖所示,B\C\D三個活動,當B先到達「多路_JOIN」節點時,則觸發E1,C到達時候,觸發E2,D到達時候,觸發E3,觸發完成所有分支後,E觸發完成結束。其實每次觸發的都是相同的E,可是產生的任務爲E1,E2,E3,他們是對每個流入的分支都進行響應一次功效。當所有觸發完成後,流程繼續進入E後續的流程活動。
(4)、鑑別器模式(Discriminator)
路徑鑑別器是指在流程的某點,激活後續任務以前等待許多流入分支的完成。從它開始之時起,等待全部剩餘分支的完成並「忽略」它們。一旦全部的流入分支都被觸發,它使本身復位,以即可被再次觸發。
鑑別器模式只只對And_Split同時執行的狀況;此種模式有三種狀況:
(1)、B、C同時到達鑑別器Discriminator節點,則執行D
通常這種狀況不會發生,由於計算機執行的時候,老是有前後執行順序的,總有一個爲先執行。
(2)、B先到達鑑別器Discriminator節點,那麼就沒必要等待C的執行結果,直接執行D,當C到完成後到達鑑別器Discriminator節點時,流程將自動忽略C的結果,將鑑別器Discriminator恢復原位,繼續等待被觸發。
(3)、C先到達鑑別器Discriminator節點,那麼就沒必要等待B的執行結果,直接執行D,當B到完成後到達鑑別器Discriminator節點時,流程將自動忽略B的結果,將鑑別器Discriminator恢復原位,繼續等待被觸發。
(5)、M中的N模式(N-out-of-M Join)
M中選N合併是指流程的某點M 條並行路徑聚合到一點,只要其中N條路徑完成則激活後續任務,全部其它剩餘路徑的完成應被忽略。相似於路由鑑別,只要全部流入分支被觸發,則該合併使本身復位,以即可被再次觸發。M中選N其實就是合併多條路徑,進行部分同步,只執行一次後續活動。
說明:上圖所示 M 爲3,N咱們設定爲2 ,則,若是B\C 都完成到達N-out-of-M Join節點,則知足N-out-of-M 規則,則沒必要等待D的執行結果,直接轉向執行E;當D完成後到達N-out-of-M Join節點,流程則忽略D的執行結果,將N-out-of-M Join節點復位等待再次被觸發。
(1)、任意循環模式(Arbitrary Cycles)
在工做流過程的執行過程當中,一個或多個任務可被重複執行。
(2)、隱含終斷模式(Implicit Termination)
這個模式叫隱式結束,或者天然結束。就是當全部正在運行結點都沒有後繼結點,流程就視爲結束了。也就是不須要指明結束的結點,只要跑完全部的結點(或者沒有找到後繼結點),就視爲流程結束。
多實例模式
(1)、設計期多實例(Multiple Instances with a Priori Design-Time Knowledge)
流程中的某個任務可能須要建立多個實例,其數目在設計模型時已知。即在某種情形下,一個任務被激活屢次,其指定任務在給定狀況下實例的個數在設計時已知。這一模式是用於確立多實例的入口方式。入口主要處理的問題就是肯定所須要生成的實例個數 N 。而這個 N 在設計流程的時候就肯定了。
(2)、運行時前置多實例(Multiple Instances with a Priori Run-Time Knowledge)
一個任務的實例個數是動態的,亦即在設計時未知,而在運行期間全部實例需被執行前的某點可獲知其數目。能夠將本模式看做一初始化該任務的For循環。在某種狀況下,任務可被激活屢次,給定任務的實例數在指定情形下是一變量,取決於狀況特徵或資源的可用性, 但在運行期的某些階段才已知, 即該任務的實例在運行時候才肯定。
入口方式也能夠動態肯定,這一模式是表示在流程運行的過程當中,B 中第一個實例產生之前就肯定 N 。固然了,肯定這個N 的時機能夠是前面 A,也能夠是 A 前的工做任務。總之是在第一個實例產生前就肯定下來的,也能夠視做該模式的應用。
(3)、運行時非前置多實例(Multiple Instances without a Priori Run-Time Knowledge)
實例的數目是動態的,亦即實例數設計時不知,在運行期間,全部這些實例須要被激活前的任何階段都沒法知道。可將本模式看做是任務實例化的WHILE循環。
(4)、同步多實例(Multiple Instances without a Priori Run-Time Knowledge)
實例數在設計時未知,任務的全部實例完成後另外一任務才能啓動(或開始)。
基於狀態模式
(1)、延期選擇(Deferred Choice)
一個線程激活任務A, 另外一線程激活任務 B,而兩個任務都在任務列表中),只要一個線程啓動, 另外一線程應消失(亦即若任務 A 啓動,則任務B 應從工做列表中消失)。
工做流中的一個節點,有一個或多個分支已經被選擇。與XOR拆分相比,並無明確的選擇,可是,選擇是取決於環境的。與AND拆分相比,二者中只有一個被執行。這意味着一旦環境啓動了其中的一個,另外一個就被取消。要注意,選擇是被延遲到兩個分支中的一個真正開始執行時,也就是說,選擇是能夠儘量的推後的。 例子:在收到貨物以後,有兩種方法能夠將其送到。選擇取決於相關資源的可用性。所以,選擇會被推遲到直到其中一個資源可用爲止。
(2)、交叉並行路由(Interleaved Parallel Routing)
一組活動以任意的順序執行,每一個活動都被執行,他們的順序是在運行時決定的,而且在任意一個時刻都不會有兩個活動在執行。
(3)、里程碑(Milestone)
一個活動可否執行取決於一個指定的狀態。也就是說,只有在到達一個特定的未過時的里程碑時,活動才被執行。
(1)、取消活動(Cancel Activity)
一個可執行的活動被強制失效了,也就是說,一個正在等待執行的活動所在線程被移除了。
例子:若是顧客取消了一個請求,那麼與之相關的活動也被取消了。
(2)、取消過程(Cancel Case)
一個過程實例, 被徹底取消。
(1)、結構化循環(Cancel Activity)
(2)、遞歸(Recursion)
(3)、臨時觸發器(Transient Trigger)
(4)、持續觸發器(Persistent Trigger)
(5)、取消範圍(Cancel Region)
(6)、多實例的取消(Cancel Multiple Instance Activity)
(7)、多實例的手工完成(Complete Multiple Instance Activity)
(8)、鑑別阻塞(Blocking Discriminator)
(9)、鑑別取消(Cancelling Discriminator)
(10)、結構化N選M(Structured Partial Join)
(11)、N選M阻塞(Blocking Partial Join)
(12)、N選M取消(Cancelling Partial Join)
(13)、AND合併(Generalised AND-Join)
(14)、多實例的N選M(Static Partial Join for Multiple Instances)
(15)、多實例的N選M取消(Cancelling Partial Join for Multiple Instances)
(16)、動態多實例的N選M(Dynamic Partial Join for Multiple Instances)
(17)、循環的同步合併(Acyclic Synchronizing Merge)
(18)、同步合併(General Synchronizing Merge)
(19)、區域互斥(Critical Section)
(20)、交叉路由(Interleaved Routing)
(21)、線程合併(Thread Merge)
(22)、線程分支(Thread Split)
(23)、顯式終止(Explicit Termination)
過程推動是針對工做流系統正常流轉的一個總體的引擎調度流程,它是工做流系統完整流轉的總體過程描述。
(1)、業務建立
用戶在WEB端建立單據
業務流程建立業務單據、公文流程編制文稿數據,此時業務單據的狀態爲草稿狀態,同時產生一條狀態爲【初始】的過程實例。若是用戶刪除業務單據,則同時刪除產生的過程實例。
(2)、流程啓動
第一步完成後,啓動工做流程。流程的啓動方式分多種,手工啓動、自動啓動、事件啓動、郵件啓動、外部啓動等。
<A>、將流程定義模型導入到運行庫(工做流流程的執行狀況表)中;運行庫包含以下內容:
● 過程執行狀況:生成過程記錄,狀態爲【初始】
● 活動執行狀況:
● 任務執行狀況
<B>、將過程實例狀態變遷爲【運行】
<C>、生成全部活動的活動實例。
<D>、將第一開始活動的活動實例狀態變遷爲完成。
<E>、生成開始活動的工做任務,將狀態變遷爲完成。
<F>、更新運行庫記錄。將過程記錄狀態變動爲【運行】,生成一條第一開始活動的執行狀況記錄,狀態爲【完成】,生成第一活動的任務執行狀況記錄,狀態修改成【完成】。
(3)、過程執行
流程啓動後,SDP工做流流程的設計模式是已經完成了第一開始活動的全部任務,直接進行第二活動的執行,此時整個過程開始真正的執行,那麼咱們就須要開始分析活動實例,在許可狀態(Running)下,分析活動類型:
<A>、普通
普通類型是指在工做流過程當中,各個活動(人工活動或自動活動)相互之間路徑沒有分支,只有單一的流向,此種類型屬於普通活動。如圖所示:
此種狀況下直接讀取活動變遷表的後續活動的字段信息。
<B>、路由
路由類型是指在工做流過程當中,活動相互之間的路徑變遷有多種(大於1)分支,此種狀況屬於路由類型。路由分幾種狀況:分裂、匯聚、循環
第一開始活動執行完成後,根據遷移條件是否開始激活運行下一步活動實 例,活動實例在過程實例建立時候已經所有建立完成,此處只要執行激活 運行活動實例,激活運行活動實例的條件是必須至少一個工做任務被建立 而且知足啓動運行的條件,那麼此時就須要先建立工做任務項,而且啓動 運行工做任務,即工做任務的狀態變遷爲運行,變動完成後,將活動實例 狀態變遷運行。
(4)、業務結束
業務單據及工做流流程的結束。結束方式分:完成(正常流轉完成),終止(非正常的結束),中斷(因工做流在掛起狀態下被發現過程實例超過了它的生存週期,有工做流引擎自動執行過程當中斷。)
業務和流程的結束,工做流引擎將自動清除過程實例、活動實例、工做任 務記錄。運行庫中,將過程執行狀況、活動執行狀況、任務執行狀況的記錄狀態變動爲相應的結束狀態(注意:當非正常結束時,須要清除未完成的活動和任務記錄)。
過程推動是由工做流系統的調度引擎來執行,它是工做流系統完整流轉的總體過程描述。