余周,侯志松,莊瑩菲,左現(xiàn)剛
(河南科技學院,河南新鄉(xiāng),453003)
工作流引擎是工作流管理系統(tǒng)的核心所在,是工作流管理系統(tǒng)運行和控制的中心,它直接決定整個系統(tǒng)的運行效率和性能.為了應付瞬息萬變的市場變化,企業(yè)業(yè)務流程必須跟隨市場變化做出相應調(diào)整,然而,由于當前現(xiàn)有工作流引擎結(jié)構(gòu)上的局限性,導致工作流管理系統(tǒng)不能適應快速的市場變化,限制了企業(yè)的發(fā)展.因此,本文針對傳統(tǒng)工作流引擎的不足,遵循工作流管理聯(lián)盟的標準,研究并設(shè)計一個基于微內(nèi)核的工作流引擎.
工作流管理聯(lián)盟對工作流管理系統(tǒng)的定義是:是一個軟件系統(tǒng),它完成工作量的定義和管理,并按照在系統(tǒng)中預先定義好的工作流邏輯進行工作流實例的執(zhí)行[1],工作流管理聯(lián)盟提出的工作流參考模型見圖1.
從圖1可以看出:工作流引擎位于工作流管理系統(tǒng)的核心地位,負責解釋業(yè)務流程定義、執(zhí)行業(yè)務流程實例、控制業(yè)務活動運行、為參與者分配任務,并完成與其他工作流引擎的交互和通信.同時,工作流管理聯(lián)盟還制定了描述業(yè)務流程定義的元模型,以及流程定義之間互相轉(zhuǎn)換的流程定義語言規(guī)范,詳細規(guī)定了業(yè)務流程定義、業(yè)務活動、業(yè)務邏輯、變遷條件和參與者等元素的描述方法[2].
但是,現(xiàn)有的工作流引擎通常采用宏內(nèi)核結(jié)構(gòu),即一個工作流引擎就是一個系統(tǒng)內(nèi)核.宏內(nèi)核結(jié)構(gòu)的工作流引擎將業(yè)務活動的調(diào)度、任務分配和流程實例執(zhí)行等服務集中在一個組件中.此時,如果需要修改系統(tǒng)某一功能,將不可避免的影響到上述功能相對穩(wěn)定的服務組件.因此,采用宏內(nèi)核結(jié)構(gòu)實現(xiàn)的工作流引擎功能集中、結(jié)構(gòu)臃腫,增加了系統(tǒng)重構(gòu)的成本,降低了系統(tǒng)的靈活性.
根據(jù)工作流引擎中業(yè)務活動調(diào)度和任務分配功能相對穩(wěn)定、獨立的特性,將這些功能從工作流引擎中抽取出來,形成工作流引擎的微內(nèi)核.此時,當某項工作流引擎功能需要改變時,僅需修改該功能組件即可,而不會影響到工作流引擎的內(nèi)核,從而降低了系統(tǒng)的重構(gòu)成本,提高了系統(tǒng)的靈活性.
本文參照工作流管理聯(lián)盟的規(guī)范,采用基于XML的流程定義語言描述業(yè)務流程,實現(xiàn)基于微內(nèi)核的工作流引擎.該工作流引擎采用微內(nèi)核架構(gòu),分離服務組件和調(diào)度功能,采用組件技術(shù)開發(fā)工作流引擎模塊,進而降低模塊之間的耦合度,從結(jié)構(gòu)上提高工作流引擎的靈活性和可維護性.
工作流引擎最重要的職責是解釋業(yè)務流程,實現(xiàn)業(yè)務流程實例的運行.為了實現(xiàn)這一功能,現(xiàn)實世界的企業(yè)業(yè)務運營過程必須轉(zhuǎn)化為工作流引擎能夠理解的流程定義,工作流引擎才能解釋業(yè)務流程,創(chuàng)建相應的流程實例,完成業(yè)務流程在計算機世界的自動執(zhí)行.
工作流模型是業(yè)務流程的抽象描述,是現(xiàn)實世界業(yè)務流程向計算機內(nèi)部表示轉(zhuǎn)換的工具.工作流模型采用簡單直觀的形式對復雜的流程進行抽象,為人們提供一個描述世界的參考性框架.在一個工作流模型中,除了需要提供描述業(yè)務流程結(jié)構(gòu)的流程元素外,還需要提供表示流程執(zhí)行邏輯和流程業(yè)務功能的變遷和動作.因此,工作流模型必須包含一個用來描述工作流模型的基本元模型.流程定義元模型是現(xiàn)實世界中業(yè)務流程在計算機內(nèi)部的結(jié)構(gòu)化表示方法,用來建模并生成一個能被工作流引擎解釋并執(zhí)行的流程定義.所謂的元模型就是描述模型的模型.在工作流管理系統(tǒng)中,流程定義元模型是工作流模型中描述流程定義內(nèi)在聯(lián)系的模型,反映了工作流模型中所有流程元素的結(jié)構(gòu)功能和內(nèi)在聯(lián)系.使用流程定義元模型,可以建立一個與具體實現(xiàn)無關(guān)的流程定義.
為了簡潔有效的描述業(yè)務流程,實現(xiàn)業(yè)務流程在現(xiàn)實世界與計算機世界的無縫轉(zhuǎn)換,在參考工作流管理聯(lián)盟規(guī)范的基礎(chǔ)上,開發(fā)并定義一個流程定義元模型.在流程定義元模型中,工作流定義、活動、參與者、變遷條件等實體對象的關(guān)系如圖2所示.
圖1 工作流參考模型
圖2 流程定義元模型
從圖2可以看出:流程定義元模型的核心是活動.流程定義與活動、流程定義與工作流相關(guān)數(shù)據(jù)都是一對多的關(guān)系.也就是說:一個流程定義可以由多個活動實體和一系列的工作流相關(guān)數(shù)據(jù)組成.參與者、工作流相關(guān)數(shù)據(jù)、被調(diào)用應用程序,以及變遷條件與活動之間都是多對多的關(guān)系.即:一個活動可以引用多個不同的角色、使用多個工作流相關(guān)數(shù)據(jù)、調(diào)用多種類型的應用程序工具,并能在不同的變遷條件中導航.同時,同一個參與者、工作流相關(guān)數(shù)據(jù)、變遷條件或應用程序工具也可以被多個活動所使用.工作流元模型的屬性要素主要由以下幾種:
(1)工作流類型定義:用來描述業(yè)務流程,反映業(yè)務流程的目的和目標.其主要屬性有:流程定義的名稱、版本號、開始/結(jié)束條件和安全、審查、控制數(shù)據(jù)等.
(2)活動:活動對應業(yè)務流程中的活動和任務,反映了企業(yè)業(yè)務運營的功能實現(xiàn)和功能操作.活動可以由人工執(zhí)行,也可以自動執(zhí)行,或者調(diào)用相關(guān)的應用程序以完成業(yè)務流程指定的工作.活動的主要屬性包括活動的名稱、類型以及該活動的約束條件等.
(3)變遷條件:用來在活動和任務之間導航,決定活動或任務的執(zhí)行屬性,反映企業(yè)業(yè)務的運營規(guī)則.
(4)工作流相關(guān)數(shù)據(jù):描述業(yè)務流程涉及到的數(shù)據(jù),包括流程控制數(shù)據(jù)、流程相關(guān)數(shù)據(jù)和應用數(shù)據(jù).
(5)參與者:用來對組織結(jié)構(gòu)進行分類,簡化流程任務的分配.參與者是活動的具體執(zhí)行者,它可以是人,也可以是能夠自動執(zhí)行的應用程序.
(6)被調(diào)用程序:描述與業(yè)務流程協(xié)作,共同完成企業(yè)業(yè)務運營的工具和手段.
依據(jù)服務組件和調(diào)度功能分離的原則,將業(yè)務活動調(diào)度和任務分配等相對穩(wěn)定的功能抽取出來,構(gòu)建系統(tǒng)的核心層.工作流引擎的架構(gòu)如圖3所示.
圖3 工作流引擎架構(gòu)
如圖3示,基于微內(nèi)核的工作流引擎分為四個層次,各個層次的功能如下:
(1)接口層:接口層是工作流引擎的外部接口.外部應用程序通過該接口與工作流引擎進行交互,實現(xiàn)業(yè)務流程的操作與管理.該接口符合工作流管理聯(lián)盟的工作流管理規(guī)范,可實現(xiàn)工作流產(chǎn)品之間的無縫連接.本層次可分為應用程序接口模塊和管理與監(jiān)控接口兩部分.其中應用程序接口模塊提供與工作流服務有關(guān)的接口,外部應用程序可通過此接口訪問工作流引擎提供的服務;管理與監(jiān)控接口模塊用于工作流服務的管理,比如啟動、掛起或刪除流程實例.
(2)內(nèi)核層:本層次是工作流引擎的核心所在,提供工作流的活動調(diào)度機制和任務分配機制.該層次由微內(nèi)核、工作流執(zhí)行模塊、流程實例模塊和活動管理模塊四個模塊組成.微內(nèi)核負責調(diào)度業(yè)務活動,實現(xiàn)流程實例的執(zhí)行,并將業(yè)務任務分配給參與者;工作流執(zhí)行模塊實現(xiàn)流程實例運行的基本操作,如:啟動、掛起、激活或結(jié)束流程實例;流程實例模塊負責流程實例的管理工作,并通過服務層將流程實例持久化到數(shù)據(jù)庫中,以保證流程實例的持久有效;活動模塊實現(xiàn)業(yè)務活動的管理和持久化.
(3)服務層:服務層是內(nèi)核層的擴展和工作流引擎服務的具體實現(xiàn),可分為三個模塊:運行支持模塊,運行輔助模塊,運行優(yōu)化模塊.運行支持模塊的主要功能是流程定義解析和流程實例持久化.根據(jù)流程定義創(chuàng)建流程實例時,首先,流程定義解析功能對流程定義進行分析,提取創(chuàng)建流程實例所需的數(shù)據(jù)并對流程實例進行初始化操作,然后將已初始化流程實例提交到內(nèi)核層,內(nèi)核層接管流程實例,實現(xiàn)流程實例的調(diào)度執(zhí)行.流程實例持久化服務為內(nèi)核層提供存儲服務,負責將工作流相關(guān)數(shù)據(jù)存儲到數(shù)據(jù)庫中,用于確保工作流服務的持久有效.運行輔助模塊擴展工作流引擎的服務功能,用于增強工作流引擎的功能.該模塊主要的功能有事件監(jiān)聽處理、異常處理、條件處理和活動回退(rollback)等.運行優(yōu)化模塊對工作流引擎進行優(yōu)化,用于提高流程實例的執(zhí)行效率,與工作流引擎的功能無關(guān).
(4)基礎(chǔ)設(shè)備層:為工作流引擎提供公共的服務組件.系統(tǒng)運行日志、工作日管理等均位于該層次.
本文在探討現(xiàn)有工作流引擎設(shè)計局限性的基礎(chǔ)上,設(shè)計了一個基于微內(nèi)核的工作流引擎.基于微內(nèi)核的工作流引擎將調(diào)度與服務分離,內(nèi)核層獨立穩(wěn)定,服務與具體實現(xiàn)無關(guān),當引擎提供的服務需要修改時,只需重構(gòu)引擎的服務實現(xiàn)層,而不必修改內(nèi)核部分,從而降低了系統(tǒng)的重構(gòu)成本;當引擎需要增加新的功能時,僅需擴展工作流引擎接口,使得系統(tǒng)具備了良好的擴展性和靈活性.同時,該工作流引擎采用基于組件的開發(fā)技術(shù),組件之間通過定義良好的接口進行通信,組件耦合度低,當某個組件發(fā)生錯誤時,只需修改該組件即可,有效的降低了維護成本,提高了系統(tǒng)的靈活性.
[1]The WorkflowReference Model[EB/OL].(1995-1-19).[2011-04-20].http://www.wfmc.org/standards/docs/tc003v11.pdf
[2]Layna F.WorkflowHandbook 2005[M].Florida:Future Strategies Inc.2005:19-21.
[3]ProcessDefinitionInterface-XMLProcessDefinitionLanguage[EB/OL].(2008-10-10)[2011-04-20].http://www.wfmc.org/Downloaddocument/WFMC-TC-1025-Oct-10-08-A-Final-XPDL-2.1-Specification.html.
[4]Alexander W.Software Structure and Portabilityofthe FiascoMicrokernel[M].Dresden:Technical UniversityofDresden.2003.
[5]Brown AW,Wallnau K C.Engineering of component-based systems[C].Component-Based Software Engineering:Selected Papers fromthe Software EngineeringInstitute.Los Alamitos,CA:IEEE Computer SocietyPress,1996:7-15.
[6]DlogoMR,Ferreira J J.pintoFerreira.Developinga reusable engine[J].Journal ofsystems Architecture.June,2004,50:309-324.
[7]Brown AW.Large-Scale Component Based Development[M].Prentice Hall:Upper saddle River,2000.
[8]Workflow Management Coalition.Terminology&Glossary[EB/OL].(1999-02-10)[2011-04-20].http://www.wfmc.org/standards/docs/TC-1011_term_glossary_v3.pdf.