Fire Workflow 介紹
2009-02-02日 Fire Workflow 的Eclispe設計器插件上傳到google code ,并有較詳細的文檔(2_通過設計器和模擬器快速了解Fire Workflow.pdf,3_各種工作流模式的實現.pdf)。
請到http://code.google.com/p/fireflow下載。
鏡像:http://www.bt285.cn http://www.5a520.cn
Fire workflow FAQ
1、為什么要寫Fire Workflow
本人從事企業MIS系統開發很多年頭了,感覺MIS系統很多領域都有比較好的解決方案并已成為事實標準,例如Spring,Hibernate等等;然而工作流還沒有令人滿意的開源產品。我了解過的工作流產品(主要是開源的,收費產品沒有什么研究,僅僅看看其白皮書而已)都存在如下毛病:
- 缺乏嚴密的理論做支撐,工作流模型大多千篇一律地照搬WfMC的xpdl,
- 因為缺乏理論支撐,所以工作流引擎的算法有點七拼八湊,擴展性也比較差。
- 沒有好的設計器,應用比較困難
最近研究并應用了一下JBoss的Jbpm,除了其面向圖的引擎算法讓我眼前一亮外,其他的也不是令人滿意。其引擎的擴展性不好,表結構太復雜,在大數據量系統中,性能令人堪憂。
鑒于此,我動手寫了一個Fire Workflow,拋磚引玉。
2、Fire Workflow的定位
我從來不認為工作流可以“自定義”,所以Fire Workflow是面向開發人員的。Fire Workflow和Spring、Hibernate一樣,是一個或幾個普普通通的jar包,嵌入到系統中,用以解決系統開發中工作流領域的問題。
因為Fire Workflow是面向開發人員的,所以在下面兩個方面花了較大功夫。
- 流程設計器。Fire Workflow用于幫助開發人員解決系統中的流程問題,所以好的流程設計器有助于開發人員提高開發效率。Fire Workflow設計器和主流IDE緊密集成(目前有Eclipse插件和NetBeans插件),使得開發人員開發調試流程就像開發調試一個普通java類一樣簡單。
- 工作流引擎。Fire Workflow引擎設計充分考慮擴展性,因為業務系統的需求五花八門,所以一個寫的很死的引擎必然沒有生命力。Fire Workflow引擎的各種服務都可以擴展或者替換。
3、Fireflow的特點
理論嚴密
Fire Workflow以Petri Net作為理論基礎,流程的順序流轉、分支、匯聚、跳轉等算法都有定義/定理為依據。
設計合理
Fire workflow將工作流引擎的職責分解委派到各種服務中,每中服務都可以被擴展或者替換。
應用簡單
Fire workflow的API以及數據庫表結構非常簡單。
性能優良
Fire workflow著重在流程實例的數據量,數據庫IO等方面進行性能優化。
4、Fireflow的構成
Fire Workflow由模型、引擎、設計器(包含模擬器)三部分組成。
- 模型部分規定了流程定義文件的各種元素及其相互關系,例如流程(WorkflowProcess)、活動(Activity)、轉移(Transition)、開始節點(StartNode)、結束節點(EndNode)、同步器(Synchronizer)。模型部分的實現在org-fireflow-model.jar中。
- 引擎讀取流程定義文件并解釋執行。引擎提供一組對象和相關的API供外部系統調用,如流程實例(ProcessInstance)、任務實例(TaskInstance)、工單(WorkItem)、事件等等。引擎部分的實現在org-fireflow-engine.jar中。
- 設計器編輯并輸出流程定義文件。Fire Workflow的設計器附帶了強大的模擬器,可以在設計時模擬流程的執行,從而檢查流程定義的正確性。
此處附帶解釋一下我的一個觀點:我認為,流程定義文件和java文件一樣,是應用系統源代碼的一部分。因此,流程設計器做成了當前流行的IDE的插件,便于開發人員進行流程開發。而且每個流程單獨一個定義文件,就像每個java類在通常情況下單獨一個文件一樣。
5、Fire Workflow的流程定義語言為什么不使用Xpdl
本人認為Xpdl好看不好用。
相較于Xpdl,Fire workflow 的流程定義語言主要做了如下變動。
- 廢除Package的概念:在我看來一個流程一個文件比較方便開發,流程定義文件在某中程度上和java類文件一樣,是系統源代碼的一部分
- 廢除全局和局部的概念:在xpdl中有全局DataField和局部DataField區分,實際上其作用不大。
- 增加同步器節點:Fire Workflow將流程中的節點分成兩類 ,即Acitivyt和Sychronizer(Start Node和End Node是synchronizer的特例)。這兩類節點分別代表了業務子系統的邏輯操作和工作流子系統的邏輯操作。
- 增加Task元素:一個Activity可以包含多個Task,Task代表實際的業務邏輯。