程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Fire Workflow源碼分析——(基本組成)(1)

Fire Workflow源碼分析——(基本組成)(1)

編輯:關於JAVA

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。

這個包的其他部分下次再講。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved