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