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