Fire Workflow是最近興起的國內比較火的開源工作流引擎,本人從發現它、應用它到解讀它,感覺很 有前途。本開源項目有個謙遜的leader——非也,有個穩定良好的團隊,我相信只要堅持,它的發展是長 遠和美好的。
FireWorkflow的源代碼主要 包含兩個部分:FireflowEngine和FireflowModel,其中FireflowEngine 主要是一些工作流運行時的服務,如事件處理、條件判斷、數據持久化、工作流委派等等服務和操作,另 外還預留了一些擴展接口。FireflowModel主要是一些流程定義的基本組建,流程定義的解析服務以及序 列化服務等,另外還提供了對資源和參與者的接口。
先開始講FireflowModel這個部分中的包org.fireflow.model,由於代碼沒有全部看完,因此先說一些 包和類的基本構成,希望對大家有幫助。這是整個包的類圖。
下面開始對每個部分進行分析:
IWFElement:工作流元素的抽象接口
getSn(), setSn(): 返回和設置元素的序列號,系統自動處理,開發者無需關心。
getId():返回工作流元素的Id, 工作流元素的Id采用“父Id.自身Name”的方式組織。
getName(), SetName(): 返回和設置工作流元素的名稱。
getDisplayName(), setDisplayName(): 返回和設置工作流元素的顯示名稱。
getDescription(), setDescription(): 返回和設置工作流元素的描述。
getParent(), setParent(): 返回和設置父節點。
getEventListeners(): 返回事件監聽器列表。
getExtendedAttributes(): 返回擴展屬性Map。
AbstractWFElement:流程元素抽象類。
實現了IWFElement中的方法,並重寫了hashCode()和toString()方法。
Task:工作流任務。
前四個為工作流類型:
TOOL:TOOL類型,即工具類型任務,該任務自動調用java代碼完成特定的工作。
SUBFLOW:SUBFLOW類型,即子流程任務。
FORM:FORM類型,最常見的一類任務,代表該任務需要操作員填寫相關的表單。
DUMMY:DUMMY類型,該類型暫時沒有用到,保留。
接下來三個是任務分配指示:
REDO:重做類型。對於Tool類型和Subflow類型的task會重新執行一遍,對於Form類型的Task,重新執 行一遍,且將該任務實例分配給最近一次完成同一任務的操作員。
SKIP:跳過忽略類型。循環的情況下該任務將被忽略,即在流程實例的生命周期裡,僅執行一遍。
NONE:無類型。對於Tool類型和Subflow類型的task會重新執行一遍,和REDO效果一樣的。對於Form類 型的Task,重新執行一遍,且工作流引擎仍然調用Performer屬性的AssignmentHandler分配任務。
其他變量:
type: 任務類型,取值為FORM,TOOL,SUBFLOW,DUMMY(保留),缺省值為FORM
duration: 自定義類型,任務執行的時限,可查看duration類。
priority: 任務優先級別(1.0版本中暫未使用)。
loopStrategy:循環情況下任務執行策略,取值為REDO、SKIP和NONE。
taskInstanceCreator:任務實例創建器。如果沒有設置,則使用所在流程的全局任務實例創建器。
taskInstanceRunner:任務實例運行器,如果沒有設置,則使用所在流程的全局的任務實例運行器。
taskInstanceCompletionEvaluator:任務實例的終結評價器,用於告訴引擎,該實例是否可以結束。 如果沒有設置,則使用所在流程的全局的任務實例終結評價器。
WorkflowProcess:業務流程,是流程描述的頂層元素。
dataFields:流程數據項,運行時轉換為流程變量進行存儲。
tasks:全局Task。
activities:流程環節,即steps。
transitions: 轉移。
loops:循環。
Synchronizers:同步器。
startNode:開始節點。
endNodes:結束節點。
resourceFile:資源文件(在1.0版本中暫時未使用)。
resourceManager:資源管理器(在1.0中暫時未使用)。
taskInstanceCreator:本流程全局的任務實例創建器。 如果沒有設置,引擎將使用 DefaultTaskInstanceCreator來創建TaskInstance。
formTaskInstanceRunner:本流程全局的FormTask Instance運行器。如果沒有設置,引擎將使用 DefaultFormTaskInstanceRunner來運行TaskInstance。
toolTaskInstanceRunner:本流程全局的ToolTask Instance運行器。如果沒有設置,引擎將使用 DefaultToolTaskInstanceRunner來運行TaskInstance。
subflowTaskInstanceRunner:本流程全局的SubflowTask Instance運行器。如果沒有設置,引擎將使 用DefaultSubflowTaskInstanceRunner來運行TaskInstance。
formTaskInstanceCompletionEvaluator:本流程全局的FormTask Instance 終結評價器,用於告訴引 擎該實例是否可以結束。如果沒有設置,引擎使用缺省實現 DefaultFormTaskInstanceCompletionEvaluator。
toolTaskInstanceCompletionEvaluator:本流程全局的ToolTask Instance 終結評價器,用於告訴引 擎該實例是否可以結束。如果沒有設置,引擎使用缺省實現 DefaultToolTaskInstanceCompletionEvaluator。
subflowTaskInstanceCompletionEvaluator:本流程全局的SubflowTask Instance 終結評價器,用於 告訴引擎該實例是否可以結束。如果沒有設置,引擎使用缺省實現 DefaultSubflowTaskInstanceCompletionEvaluator。
主要方法:
findWFElementById(): 通過ID查找該流程中的任意元素。
findSnById(): 通過Id查找任意元素的序列號。
validate(): 驗證workflow process是否完整正確。
isReachable(): 判斷節點可達性。
isInSameLine(): 判斷兩個Activity是否在同一個執行線上。
getReachableNodes(): 獲取可達的節點集合。
getEnterableNodes(): 獲取當前可流入的節點集合。
DataField:流程變量。
前七個變量為數據類型。
dateType: 數據類型。
initialValue: 初始值。
dataPattern: 數據格式。目前主要用於日期類型。
TaskRef:任務引用。用於Activity引用全局的Task
referencedTask:被引用的Task。
這個包的其他部分下次再講。