馬亞鋒 張玉扣
摘 要:(目的)了解當前主流開源工作流引擎,對比各自特點,為進行工作流系統(tǒng)開發(fā)者提供一個客觀的評價,提高學生綜合能力。(方法)針對三個最為常用的引擎進行具體分析,分析各自的背景、架構(gòu)、實現(xiàn)方法及優(yōu)缺點。(結(jié)果)三大主流開源工作流引擎分別是shark、osworkflow和jbpm。shark靠的是Enhydra,osworkflow靠的是opensymphony,而jbpm靠的是jboss。(結(jié)論)osworkflow實現(xiàn)起來簡單靈活,但是功能匱乏,數(shù)據(jù)維護較為復雜;shark的jawe圖形化功能較強,但是表現(xiàn)一般;jbpm基于狀態(tài)圖,提供靈活的表達機制,學生學習起來容易上手。
關(guān)鍵詞:教研;開源;工作流;shark;osworkflow;jbpm
工作流最早是在生產(chǎn)和辦公領域中針對日常生活工作中固定有序的活動提出的一個概念,主要就是為了將一個工作分解成多個任務和角色,依據(jù)特定的規(guī)則來執(zhí)行,針對這些任務對其進行監(jiān)控,從而能夠達到提高工作效率、有效合理地管理業(yè)務等目的。而所謂的工作流引擎,就是在工作流系統(tǒng)中為其提供各種不同信息的傳遞、角色分工等解決方案。由于工作流沒有統(tǒng)一的規(guī)范,因此工作流引擎比較多,而且較雜,大家普遍應用得比較多的三種工作流引擎分別是shark、osworkflow和jbpm。下面,我們針對這三種引擎從它們的持久層、定義語言、穩(wěn)定性和可維護性等多個方面進行對比,以期更多的讀者對這三種引擎有一個全面、客觀的認識,對他們的工作能有一些幫助。
一、主流工作流引擎簡介
(1)Shark。Shark是一個完全基于WFMC和OMG規(guī)范的工作流引擎,使用 XPDL作為工作流定義語言。流程和活動的存儲使用Enhydra DODS(一個開源OR映射工具)。ToolAgents可以用JavaScript、JDBC、EJB訪問、純 Java 類、Email調(diào)用等等。Shark的建模工具是jawe。Jawe是一種基于形式化的過程定義的建模工具,是Enhydra的一個開源產(chǎn)品,符合WMFC規(guī)則,提供了圖形化的界面來進行流程繪制、屬性添加等,能自動將流程定義轉(zhuǎn)化為相應的能夠被工作流引擎解釋的過程定義文件。第一就是過程定義的圖形化表示,第二就是將過程定義輸出到xpdl,最后就是可以將有效的xpdl文件進行導入和圖形化表示。Shark的內(nèi)部調(diào)度機制比較簡單,基本上是基于WfprocessImpl類的run算法,采用的是遍歷循環(huán)的方式,效率較高、直觀易懂,但是很難支持比較復雜的運行模型。
(2)Osworkflow。Osworkflow是純java語言編寫,開放源代碼。它主要面向的用戶群是具有一定技術(shù)背景的軟件開發(fā)人員,用戶可以根據(jù)自己的實際需求,用XML配置出完全符合自身業(yè)務邏輯的流程。OSWorkflow適用于任何Java平臺,在企業(yè)ERP開發(fā)中得到了廣泛的應用。Osworkflow最大的特點,就是其顯著的靈活性和完全面向軟件開發(fā)人員。
(3)jbpm。Jbpm采用jpdl來定義工作流。jPDL(JBoss jBPM Process Definition Language)是基于jBPM框架的流程定義語言之一。Jpdl采用圖形化的流程定義,將每個任務定義為一個uml狀態(tài)圖,每個狀態(tài)圖均有起始狀態(tài)、結(jié)束狀態(tài)以及狀態(tài)的轉(zhuǎn)換。Jbpm還有一個特點,就是它采用Hibernate來進行數(shù)據(jù)庫的管理。Hibernate是一個開源的映射框架,既可以在java客戶端使用,也可以在web應用中使用,支持目前大部分的數(shù)據(jù)庫。
二、三種工作流引擎對比
Shark的體系和功能最為復雜,遵循WfMC的XPDL標準。它有兩個特點,一個就是 XPDL中的Activity基于UML活動圖?;顒訄D最大的優(yōu)勢就是容易進行分叉控制,即可以控制并發(fā)線程同時執(zhí)行或順序執(zhí)行。另一個特點就是采用了泳道來控制工作流引擎中任務的產(chǎn)生,采用“模塊化”思路,容易擴展。OSWorkflow也是一款非常靈活、定位低級別的工作流引擎框架。OSWorkflow在國內(nèi)項目用的較多,很多簡易審批流程項目都是基于此。OSWorkflow在可視化流程定義工具大行其道的今天,逆流而行,反對可視化定義工具的使用,它希望用戶靠XML去手動寫流程,這點我很難理解。同時,持久化配置方式不唯一,差別比較大。有內(nèi)存方式、JDBC方式、SpringHibernate聯(lián)合方式、JDBCTemplate方式、Hibernate方式。
本人覺得,同學們?nèi)绻胍獙W習Spring的源碼的話,不妨先看看JBPM的Bean管理模塊,這樣能非常容易理解 Spring的核心代碼,但卻比直接看Spring源碼簡單了許多。JBPM完全使用Hibernate作為持久化工具,并不強制大家一定只能在JBOSS上使用jbpm,TOMCAT上也能跑。我想,這個工作流引擎既然是 JBOSS主推的,而且很多開源項目上也采用它來做底層組件,那么它的未來一定很光明。
參考文獻:
[1]百度百科.osworkflow[DB/OL].http://baike.baidu.com/view/
674080.htm.
[2]百度百科.jbpm[DB/OL].http://baike.baidu.com/view/10875
11.htm.
[3]王海軍,樊留群,楊力鋒.等.基于Shark的工作流流程的實現(xiàn)
方式研究[J].機械工程與自動化,2005(4).