作者 榮浩 發(fā)布于 2010年12月28日 上午12時(shí)0分
對(duì)jBPM來(lái)說(shuō),今年最大的事件莫過(guò)于jBPM的創(chuàng)建者Tom Baeyens離開JBoss了。Tom Baeyens離開的具體原因尚不清楚,但他的離開產(chǎn)生了兩個(gè)結(jié)果:一是jBPM的下一個(gè)版本jBPM5完全放棄了jBPM4的基礎(chǔ)代碼,基于Drools Flow重頭來(lái)過(guò);二是Tom Baeyens加入Alfresco后很快推出了新的基于jBPM4的開源工作流系統(tǒng)Activiti。 由此不難推測(cè)Tom Baeyens離開的部分原因:JBoss內(nèi)部對(duì)jBPM未來(lái)版本的架構(gòu)實(shí)現(xiàn)產(chǎn)生了嚴(yán)重的意見分歧。更加巧合的是12月1日Activiti5剛發(fā)布,緊 接著12月2日jBPM5就發(fā)布了第一個(gè)候選發(fā)布版本,jBPM與Activiti之間的微妙關(guān)系可見一般。
在這篇文章里,我們將一起回顧jBPM從jBPM3到j(luò)BPM5以及Activiti5的發(fā)展歷程,我們可以清晰的看見jBPM(包括 Activiti)設(shè)計(jì)所遵循的一致原則:強(qiáng)調(diào)流程服務(wù)的可嵌入性和可擴(kuò)展性。同時(shí),從各個(gè)版本之間的變化我們也能看見產(chǎn)品設(shè)計(jì)思路的變化:更加強(qiáng)調(diào)面向 業(yè)務(wù)人員,增加BPMS(業(yè)務(wù)流程管理系統(tǒng))特性。
在回顧之前,我們首先討論一下BPMS應(yīng)該嵌入還是獨(dú)立部署的問題,因?yàn)椴还苁莏BPM還是Activiti,都強(qiáng)調(diào)了流程服務(wù)的可嵌入性。此外,我們還需要討論一下什么是BPMS的特性,它們所解決的問題是什么。
一、嵌入式還是獨(dú)立部署?
不管是jBPM還是Activiti,都強(qiáng)調(diào)了流程服務(wù)的可嵌入性。Tom Baeyens在其個(gè)人博客里稱作為獨(dú)立部署的BPMS已死,原因有兩個(gè):一是獨(dú)立部署的BPMS需要很高的安裝使用成本,需要獨(dú)立部署、需要用戶支出大 量的培訓(xùn)成本和維護(hù)成本;二是獨(dú)立部署的BPMS與外部系統(tǒng)的交互方式是分布式,這使得很多問題變得復(fù)雜,例如分布式事務(wù)。Tom Baeyens代表了相當(dāng)一部分人特別是開發(fā)人員的觀點(diǎn)。
Tom Baeyens沒有完全理解BPMS。什么是BPMS?BPMS最重要的目標(biāo)就是需要打破各個(gè)應(yīng)用系統(tǒng)(CRM、ECM、ERP、SCM)之間的界線,將 分散在這些系統(tǒng)中的流程集中管理,這是BPMS的實(shí)質(zhì)。一如流程再造,打破各個(gè)部門之間的壁壘,減少浪費(fèi),建立流程驅(qū)動(dòng)性的組織。如下圖1所示:

圖 1:BPMS打破應(yīng)用系統(tǒng)之間的界線
BPMS所要解決的問題要求其必然是獨(dú)立部署的。Tom Baeyens錯(cuò)誤的根本原因在于其將BPMS與工作流系統(tǒng)的定義混為了一談,他如此定義BPMS:BPMS旨在簡(jiǎn)化對(duì)組織核心流程進(jìn)行支撐的軟件創(chuàng)建。 也就是BPMS面向的是軟件開發(fā)人員,旨在簡(jiǎn)化他們的開發(fā),降低他們使用流程的門檻。而這正是工作流系統(tǒng)需要解決的問題。
BPMS面向企業(yè)用戶,工作流面向開發(fā)社區(qū)和系統(tǒng)集成商。
二、BPMS特性
jBPM4、jBPM5和Activiti5都增加了其BPMS特性,那些特性能夠稱為BPMS特性呢?我們先看一看BPMS需要解決的問題,為解決這些問題所增加的特性就是BPMS特性。
-
如何設(shè)計(jì)流程,在組織中高效地對(duì)設(shè)計(jì)出的流程進(jìn)行溝通,取得共識(shí)?
- 提供跨越組織的流程標(biāo)準(zhǔn)標(biāo)記符號(hào)與術(shù)語(yǔ)(BPMN已經(jīng)成為標(biāo)準(zhǔn))
- 流程及相關(guān)文檔的可視化(流程/內(nèi)容存儲(chǔ)倉(cāng)庫(kù))
- 提供在組織結(jié)構(gòu)內(nèi)進(jìn)行不同層次之間的流程導(dǎo)航(流程存儲(chǔ)倉(cāng)庫(kù)支持組織模型)
- 流程定義在各個(gè)層次/部門間的一致性,避免業(yè)務(wù)人員的流程建模轉(zhuǎn)換到IT系統(tǒng)時(shí)受到損耗(流程引擎支持基于圖的建模,支持?jǐn)U展)
-
如何更好地執(zhí)行流程?
- 業(yè)務(wù)活動(dòng)的實(shí)時(shí)監(jiān)控,預(yù)警與控制(BAM)
- 流程執(zhí)行的仿真
- 流程執(zhí)行的統(tǒng)計(jì)分析與反饋(報(bào)表)
- 如何更好地管理流程?
- 打破各個(gè)應(yīng)用系統(tǒng)之間的界線,統(tǒng)一管理所有流程(EAI,與ESB的集成)
- 對(duì)業(yè)務(wù)人員友好的建模工具
- 如何在執(zhí)行流程過(guò)程中遵循業(yè)內(nèi)最佳實(shí)踐和規(guī)則?
三、完整的工作流實(shí)現(xiàn)jBPM3
jBPM3的最新版本是3.2.7,其包括了以下組件:基于Eclipse的流程設(shè)計(jì)器、用于監(jiān)控案例(流程實(shí)例)和處理任務(wù)的Web控制臺(tái)以及jPDL核心庫(kù)。如下圖2所示:

圖 2:jBPM3組件
- 基于Eclipse的流程設(shè)計(jì)器
提供給開發(fā)人員繪制jPDL流程圖,因?yàn)樵撛O(shè)計(jì)器基于Eclipse,所以生成的流程文件可以與開發(fā)代碼一起組織管理,非常容易進(jìn)行單元測(cè)試。實(shí)現(xiàn)了工作流管理系統(tǒng)參考模型里的接口1。
- Web管理控制臺(tái)
主要有兩個(gè)功能:一是作為工作流客戶端應(yīng)用接口,給用戶提供一種手段,以處理案例運(yùn)行過(guò)程中需要人工處理的任務(wù);二是對(duì)案例的狀態(tài)進(jìn)行監(jiān)控與管理。實(shí)現(xiàn)了工作流管理系統(tǒng)參考模型里的接口2和5。
- jPDL核心庫(kù)
jPDL核心庫(kù)是一個(gè)單獨(dú)的JAR包,可以嵌入到目標(biāo)應(yīng)用中執(zhí)行,它包括了:
- 流程倉(cāng)庫(kù):解析jPDL流程定義文件并存儲(chǔ)讀取;
- 流程引擎:對(duì)流程定義進(jìn)行初始化和調(diào)度執(zhí)行,節(jié)點(diǎn)的運(yùn)行期行為與jPDL里定義的節(jié)點(diǎn)類型一一綁定;
- 任務(wù)管理:生成任務(wù)節(jié)點(diǎn)所對(duì)應(yīng)的工作項(xiàng),管理工作項(xiàng)的生命周期(初始化、分配執(zhí)行者、執(zhí)行、掛起、結(jié)束、終止);
- 事件管理:發(fā)布案例和任務(wù)的開始、結(jié)束事件,通過(guò)監(jiān)聽者模式調(diào)用相應(yīng)的事件處理器;
- 異步執(zhí)行機(jī)制:通過(guò)線程實(shí)現(xiàn)了Job Executor,進(jìn)行異步工作的處理,這些工作包括了時(shí)間處理、異步動(dòng)作。
- 身份組件模型:實(shí)現(xiàn)了一套簡(jiǎn)單的身份組件模型,包括了組、用戶和權(quán)限。
通過(guò)調(diào)用自定義Java代碼實(shí)現(xiàn)了對(duì)外部應(yīng)用的調(diào)用,從而實(shí)現(xiàn)工作流管理系統(tǒng)參考模型里的接口3。
jBPM3是一個(gè)輕量級(jí)的嵌入式工作流系統(tǒng)。它在Java社區(qū)的成功得益于兩個(gè)方面:一是嵌入式,這降低了使用工作流的門檻;二是對(duì)開發(fā)人 員友好,這表現(xiàn)在易讀的jPDL、流程的可測(cè)試性(Eclipse插件)以及節(jié)點(diǎn)行為的可擴(kuò)展性,我們可以非常容易的在流程運(yùn)行中加入自己定制的行為(通 過(guò)事件處理器和Action)。jBPM3面向開發(fā)人員,它解決的問題是流程的自動(dòng)化,它的影響力集中在Java開發(fā)社區(qū),是一個(gè)完整的工作流系統(tǒng)實(shí)現(xiàn)。
四、向BPMS努力的jBPM4
與jBPM3相比,jBPM4最大的變化是引入了流程虛擬機(jī)(PVM),同時(shí)增加了BPMS的特性。jBPM4不再滿足于工作流系統(tǒng)的定位,開始向BPMS努力。
-
為什么引入流程虛擬機(jī)
盡管jBPM3在Java社區(qū)取得了很大的成功,但是有一件事始終被人們?cè)嵅。蔷褪撬恢С至鞒陶Z(yǔ)言規(guī)范,從最開始的XPDL、BPEL 到后來(lái)的BPMN,它采用了自定義的jPDL。在jBPM3中,節(jié)點(diǎn)的運(yùn)行期行為與jPDL里定義的節(jié)點(diǎn)類型是一一綁定的,這造成了流程引擎與特定流程語(yǔ) 言的綁定,要支持其他的流程語(yǔ)言變得困難。于是在jBPM4中,jBPM提出了流程虛擬機(jī)的概念,即流程引擎與流程語(yǔ)言解耦,通過(guò)一套通用的流程模型并配 以可定制的節(jié)點(diǎn)運(yùn)行期行為實(shí)現(xiàn)了對(duì)多流程語(yǔ)言的支持。
流程虛擬機(jī)帶來(lái)的好處是多方面的:第一也是最重要的是jBPM4支持了BPMN。
第二是實(shí)現(xiàn)了基于流程組件的流程引擎,流程圖(語(yǔ)言)與實(shí)現(xiàn)解耦,我們使用通用編程語(yǔ)言實(shí)現(xiàn)節(jié)點(diǎn)運(yùn)行期行為,稱之為流程組件,通過(guò)將流程圖 與流程組件掛接,避免了圖的損耗。在這一點(diǎn)上,Tom Baeyens對(duì)BPMN到BPEL的轉(zhuǎn)換提出了一針見血的批評(píng):BPMN和jPDL以及XPDL都是基于圖的,而BPEL是基于塊的,這造成了當(dāng)將業(yè)務(wù) 人員使用BPMN所建立的流程模型向BPEL執(zhí)行模型進(jìn)行轉(zhuǎn)換時(shí),出現(xiàn)許多的不匹配,最初的流程模型會(huì)扭曲變形。而扭曲的后果就是業(yè)務(wù)人員與開發(fā)人員之間 的協(xié)作困難,這影響了流程從業(yè)務(wù)到技術(shù)的實(shí)現(xiàn)。
第三個(gè)好處是我們可以定義領(lǐng)域特定語(yǔ)言(DSL),在特定的應(yīng)用里,采用DSL約定并隱藏了大部分的技術(shù)細(xì)節(jié)可能做到業(yè)務(wù)人員對(duì)執(zhí)行流程的直接修改,例如企業(yè)文檔管理里的審批流程。
-
BPMS特性的加入
這表現(xiàn)在以下三個(gè)方面:第一是支持了BPMN,BPMN已經(jīng)成為業(yè)務(wù)人員的流程建模標(biāo)準(zhǔn);第二是引入了Signavio作為面向業(yè)務(wù)人員的Web建模器;第三是在已有的Web管理控制臺(tái)加入了對(duì)案例和任務(wù)的統(tǒng)計(jì)功能。jBPM4的組件如下圖3所示:

圖3:jBPM4組件
和jBPM3一樣,jBPM4依然是輕量級(jí)的、可嵌入的工作流系統(tǒng)。相比jBPM3,它將業(yè)務(wù)人員作為最終用戶之一,增加了部分BPMS特性,同時(shí)PVM的引入使得它的可擴(kuò)展性得到了極大的增強(qiáng),我們甚至可以定義自己的DSL。
在BPMS特性里我們提到了應(yīng)該避免業(yè)務(wù)人員的流程建模轉(zhuǎn)換到IT系統(tǒng)時(shí)受到損耗,最理想的情況是業(yè)務(wù)人員與開發(fā)人員共用一個(gè)流程模型,業(yè) 務(wù)人員能夠直接對(duì)流程進(jìn)行調(diào)整(在特定應(yīng)用中,通過(guò)DSL是可以做到的);其次是通過(guò)BPMS將業(yè)務(wù)人員的模型與實(shí)際執(zhí)行的技術(shù)模型關(guān)聯(lián)起來(lái)(很多商業(yè)產(chǎn) 品已經(jīng)做到了這一點(diǎn),在Activiti5中我們也會(huì)看到這一點(diǎn)),業(yè)務(wù)人員、開發(fā)人員以及運(yùn)營(yíng)團(tuán)隊(duì)之間能夠做到很好的協(xié)調(diào);最差是業(yè)務(wù)人員與開發(fā)人員各 自為政,獨(dú)立維護(hù)各自的流程模型,并且模型之間存在極大的不匹配,此時(shí)流程的迅速變化基本上是奢望。
五、鳩占鵲巢的Drools Flow與jBPM5
目前jBPM5剛剛發(fā)布了第一個(gè)候選發(fā)布版本,jBPM5基本上完全拋棄了jBPM4的代碼,所有代碼全部來(lái)自原先的Drools Flow。Drools Flow最初被用來(lái)解決規(guī)則執(zhí)行順序的問題。其實(shí)從Drools Flow開始支持BPMN時(shí)起,我們已經(jīng)預(yù)感到它與jBPM的競(jìng)爭(zhēng)關(guān)系。
jBPM5依舊定位為輕量級(jí)的可嵌入的工作流系統(tǒng)。在jBPM5的特性里,有這么兩條引人關(guān)注:一是引入了Guvnor作為流程倉(cāng)庫(kù),這解決了流程 的可視化問題,流程定義作為資源被管理,我們可以對(duì)流程定義進(jìn)行可視化管理以及全文檢索(Guvnor使用了Jackrabbit作為了其存儲(chǔ)實(shí)現(xiàn),但我 們的經(jīng)驗(yàn)表明Jackrabbit在大數(shù)據(jù)量情況下性能存在嚴(yán)重問題);第二是規(guī)則引擎(Drools Expert)、事件處理引擎(Drools Fusion)與流程引擎的合三為一,這是jBPM5最讓人期待的地方。jBPM5的組件如下圖4所示:

圖 4:jBPM5組件
規(guī)則引擎在流程中的應(yīng)用已經(jīng)非常廣泛了,我們這里說(shuō)說(shuō)事件處理引擎。
事件處理引擎是業(yè)務(wù)活動(dòng)監(jiān)控(BAM)的基礎(chǔ),BAM的功能及執(zhí)行過(guò)程,如下:
- 捕獲:BAM捕獲各種事件(通過(guò)消息監(jiān)聽器、適配器、代理等)。這些事件來(lái)自應(yīng)用、系統(tǒng)軟件、外部交易伙伴。消息是BAM的核心——它們反應(yīng)底層業(yè)務(wù)流程的狀況。
- 過(guò)濾:BAM過(guò)濾掉沒有直接后果的事件,在很多情況下由支持事件流處理(Event Stream Processing,簡(jiǎn)稱ESP)或復(fù)雜事件處理(Complex Event Processing,簡(jiǎn)稱CEP)引擎來(lái)進(jìn)行過(guò)濾。
- 分析:BAM根據(jù)分析模型和規(guī)則將相關(guān)事件聯(lián)系起來(lái)。
- 警告:BAM向用戶提出警告,以便用戶在必要時(shí)進(jìn)行控制。
如上所示,BAM的執(zhí)行過(guò)程包含四個(gè)步驟,而前三個(gè)步驟都是對(duì)事件進(jìn)行相關(guān)的處理(捕獲事件、過(guò)濾事件、分析事件、關(guān)聯(lián)事件),因此在大多數(shù)BAM的技術(shù)實(shí)現(xiàn)方案中,都基于CEP和ESP的引擎來(lái)實(shí)現(xiàn)BAM的功能。
與jBPM4相比,jBPM5對(duì)PVM的放棄也帶來(lái)了幾個(gè)不小的問題:第一是對(duì)開發(fā)人員來(lái)說(shuō)只支持BPMN,不再支持jPDL(當(dāng)然提供了遷移工 具);第二是流程執(zhí)行的可擴(kuò)展性回到了jBPM3的年代,僅僅支持自定義動(dòng)作(相當(dāng)于jBPM3里的Action)。此外,Web建模器由 Signavio替換為了Oryx Designer。
總而言之,jBPM5通過(guò)引入流程倉(cāng)庫(kù)和BAM繼續(xù)向BPMS邁進(jìn)(目前的進(jìn)展是與流程倉(cāng)庫(kù)的集成還未完成,BAM基于日志進(jìn)行分析),同時(shí),由于不再支持PVM和jPDL,帶來(lái)了流程擴(kuò)展性的降低和社區(qū)開發(fā)人員的未來(lái)流失。
六、Activiti5的反擊
Activiti5是Tom Baeyens加入Alfresco后推出的新的基于jBPM4的開源工作流系統(tǒng),1號(hào)剛剛發(fā)布第一個(gè)版本。Activiti的開發(fā)團(tuán)隊(duì)相比與jBPM強(qiáng) 大了許多,有23位核心開發(fā)者。當(dāng)然這也是由于activiti規(guī)劃的功能所致:包括核心引擎、Web的流程建模器、協(xié)作工具Activiti Cycle、Activiti Probe、Activiti Explorer、與Spring的集成、與Mule的集成等。

圖 5:Activiti5的組件
如上圖所示,Activiti5由三種類型的組件組成,分別是:專用工具(Dedicated Tools)、內(nèi)容存儲(chǔ)工具(Stored Content)和協(xié)作工具(Collaboration Tool)。
專用工具包括以下:
- Alfresco—Alfresco公司的企業(yè)級(jí)內(nèi)容管理產(chǎn)品
Alfresco 是一個(gè)開源的、企業(yè)級(jí)的內(nèi)容管理系統(tǒng),功能包括:文檔管理、協(xié)作、記錄管理、知識(shí)庫(kù)管理、Web內(nèi)容管理等功能。Alfresco與Activiti的深 入集成實(shí)現(xiàn)了流程及相關(guān)文檔的可視化。更重要的是Alfresco支持組織模型,能夠提供在組織結(jié)構(gòu)內(nèi)進(jìn)行不同層次之間的流程導(dǎo)航。
- Activiti Modeler—建模器
基于開源Signavio Web流程編輯器的一個(gè)定制版本,提供了對(duì)BPMN2.0圖形化規(guī)范的支持,建模后的流程以文件格式進(jìn)行存儲(chǔ)。
- Activiti Designer—Eclipse插件形式的建模器
- Activiti probe—管理及監(jiān)控組件
對(duì)流程引擎運(yùn)行期實(shí)例提供管理及監(jiān)控的Web控制臺(tái)。包含部署的管理、流程定義的管理、數(shù)據(jù)庫(kù)表的檢視、日志查看、事務(wù)的平均執(zhí)行時(shí)間、失敗多次的工作等功能。
- Activiti Explorer—任務(wù)管理組件
提供任務(wù)管理功能和對(duì)案例、任務(wù)基于歷史數(shù)據(jù)的統(tǒng)計(jì)分析(報(bào)表)功能。Web應(yīng)用程序。
內(nèi)容存儲(chǔ)工具:包括了文檔倉(cāng)庫(kù)、模型倉(cāng)庫(kù)、SVN倉(cāng)庫(kù)、MVN倉(cāng)庫(kù)和Activiti引擎。其中文檔倉(cāng)庫(kù)、SVN倉(cāng)庫(kù)和MVN倉(cāng)庫(kù)三個(gè)組件為協(xié)作工具(Activiti Cycle)提供底層的支撐。Activiti引擎則是以前的PVM。
協(xié)作工具:與jBPM4相比,Activiti5最令人矚目的特性就在于它的協(xié)作工具組件。
Activiti Cycle完全是一種新類型的BPM組件。它是一個(gè)用來(lái)促進(jìn)業(yè)務(wù)人員、開發(fā)人員和IT運(yùn)營(yíng)人員協(xié)作的Web應(yīng)用程序。 在現(xiàn)實(shí)的場(chǎng)景中,業(yè)務(wù)文檔有業(yè)務(wù)人員所持有,而軟件程序由開發(fā)團(tuán)隊(duì)所管理,被部署的軟件應(yīng)用則被IT管理人員所管理。三者之間不能很好的協(xié)作。我們可以想 象這樣一個(gè)場(chǎng)景,業(yè)務(wù)經(jīng)理用文檔來(lái)維護(hù)需求和visio格式的流程圖,開發(fā)人員管理可執(zhí)行的流程和大量的Java源文件而IT維護(hù)人員則管理部署在 Tomcat中的.war文件和存儲(chǔ)在Activiti數(shù)據(jù)庫(kù)中的流程。

圖 6:Activiti cycle協(xié)作組件邏輯示意圖
Activiti Cycle通過(guò)BusinessLink將與流程相關(guān)的業(yè)務(wù)人員、開發(fā)團(tuán)隊(duì)與IT維護(hù)人員關(guān)聯(lián)起來(lái),實(shí)現(xiàn)他們之間的協(xié)作。
總而言之,與jBPM4相比,Activiti5目前最重要的增強(qiáng)就是實(shí)現(xiàn)了流程的可視化以及創(chuàng)新的Activiti Cycle協(xié)作組件,此外,通過(guò)與Mule的集成加強(qiáng)了其集成能力。其對(duì)PVM的保留使其繼承了jBPM4強(qiáng)大的可擴(kuò)展能力,對(duì)jBPM的老用戶來(lái)說(shuō),這是向其遷移的重要理由。
七、總結(jié)
jBPM3是一個(gè)完整的工作流系統(tǒng)實(shí)現(xiàn),面向開發(fā)人員,目的在于簡(jiǎn)化對(duì)組織核心流程進(jìn)行支撐的軟件創(chuàng)建,不支持標(biāo)準(zhǔn)。
jBPM4引入PVM,使其擁有更強(qiáng)大的擴(kuò)展性,同時(shí)增加BPMS特性,這些特性包括了對(duì)BPMN的支持、面向業(yè)務(wù)人員的Web建模器和簡(jiǎn)單統(tǒng)計(jì)分析功能的加入。
jBPM5基于原先的Drools Flow,支持BPMN,通過(guò)與Drools的合并支持BAM,通過(guò)內(nèi)容倉(cāng)庫(kù)增加對(duì)流程可視化的支持。由于放棄了jBPM4的PVM,引擎的可擴(kuò)展性受到損害,并且不再支持jPDL。
Activiti5基于jBPM4,與Alfresco的集成增加了其流程可視化與管理能力,同時(shí)通過(guò)創(chuàng)新的Activiti Cycle協(xié)作組件支持流程相關(guān)人員之間的協(xié)調(diào),最后,它加強(qiáng)了集成能力。
對(duì)于工作流應(yīng)用或者jBPM3、jBPM4的老用戶,建議轉(zhuǎn)向Activiti5。
關(guān)于作者
榮浩,ThoughtWorks咨詢師,關(guān)注敏捷和企業(yè)流程改進(jìn)過(guò)程,目前正與辛鵬合著《Head First Process-深入淺出IT流程》一書。博客地址http://ronghao.javaeye.com。
轉(zhuǎn)自:http://www.infoq.com/cn/articles/rh-jbpm5-activiti5