譚恒 周鳳
摘 要:鑒于實(shí)際應(yīng)用需求和工作流管理系統(tǒng)的特點(diǎn),將角色概念引入工作流模型中,并以Activiti工作流引擎為基礎(chǔ),結(jié)合輕量級(jí)框架S2SH改進(jìn)傳統(tǒng)工作流模型,分析工作流技術(shù)。結(jié)果表明,在工作流模型中引入角色動(dòng)態(tài)和靜態(tài)綁定機(jī)制,不僅可以提高系統(tǒng)的安全性,還能實(shí)現(xiàn)對(duì)系統(tǒng)的安全訪問(wèn)控制。此外,在開(kāi)發(fā)新的流程調(diào)度軟件時(shí),可以通過(guò)對(duì)事先定義的業(yè)務(wù)處理接口編寫(xiě)少量代碼,并將其擴(kuò)展,從而實(shí)現(xiàn)對(duì)業(yè)務(wù)過(guò)程的控制,為工作流業(yè)務(wù)的開(kāi)展提供靈活、可擴(kuò)展的快速開(kāi)發(fā)平臺(tái)。另外,還簡(jiǎn)要介紹了基于角色的工作流模型的應(yīng)用實(shí)例,以期為日后的相關(guān)工作提供參考。
關(guān)鍵詞:Activiti引擎;工作流;輕量級(jí)框架;流程調(diào)度軟件
中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.15913/j.cnki.kjycx.2016.01.016
工作流是將一組工作任務(wù)結(jié)合起來(lái)完成某個(gè)過(guò)程的活動(dòng)。它能夠事先定義觸發(fā)順序和觸發(fā)條件,并通過(guò)計(jì)算機(jī)在一個(gè)或多個(gè)參與者的控制下按照某種預(yù)定規(guī)則自動(dòng)傳遞文檔、信息或者任務(wù)。在工作流管理系統(tǒng)中,工作流流程引擎處于核心位置,負(fù)責(zé)生成流程運(yùn)行時(shí)的各種實(shí)例、數(shù)據(jù)監(jiān)控和管理流程的運(yùn)行情況。
在明確了工作流引擎的原理、認(rèn)識(shí)到傳統(tǒng)工作流的不足后,在改進(jìn)、擴(kuò)展傳統(tǒng)工作流模型時(shí),引入了以典型的MVC模式架構(gòu)為基礎(chǔ)的設(shè)計(jì)理念,提出了基于Java EE的輕量級(jí)框架Struts2、Hibernate和工作流框架Activiti技術(shù)開(kāi)發(fā)的原型體系結(jié)構(gòu),即基于S2SH協(xié)同工作流技術(shù)的應(yīng)用框架。
該結(jié)構(gòu)可以支持多個(gè)體交互,實(shí)現(xiàn)多角色、多資源的流程驅(qū)動(dòng)。軟件設(shè)計(jì)人員只需在該應(yīng)用框架原型的基礎(chǔ)上根據(jù)實(shí)際業(yè)務(wù)需要擴(kuò)展應(yīng)用接口,并在配置文件中定義處理流程的每一個(gè)任務(wù)結(jié)點(diǎn)、流結(jié)點(diǎn)和網(wǎng)關(guān)等信息。由于工作流引擎提供了流程定義工具可擴(kuò)展接口,所以,流程定義工具會(huì)先解釋配置文件中的工作流定義,然后轉(zhuǎn)交給工作流引擎執(zhí)行,由它維護(hù)工作流控制數(shù)據(jù)和角色模型數(shù)據(jù),并完成監(jiān)聽(tīng)觸發(fā)事件的任務(wù)。當(dāng)所有觸發(fā)事件按照流程定義執(zhí)行完后,便形成了一個(gè)完整的應(yīng)用流程。目前,該應(yīng)用框架已在多角色資源協(xié)同的環(huán)境和復(fù)雜流程的建模中運(yùn)行,效果顯著。
1 工作流技術(shù)與Activiti引擎的基本原理
在開(kāi)發(fā)應(yīng)用系統(tǒng)的過(guò)程中,整個(gè)應(yīng)用系統(tǒng)架構(gòu)并不是由單一的工作流管理系統(tǒng)組成,涉及到工作流部分的業(yè)務(wù)組件只是其中的一部分。而對(duì)于一個(gè)復(fù)雜系統(tǒng)的開(kāi)發(fā),會(huì)涉及到許多其他領(lǐng)域的復(fù)雜業(yè)務(wù),因此,需要將工作流框架與其他框架相結(jié)合,開(kāi)發(fā)出一個(gè)可擴(kuò)展的工作流系統(tǒng)。本文用輕量級(jí)框架Struts2、Hibernate和以工作流框架Activiti為核心的輕量級(jí)流程引擎搭建可擴(kuò)展型流程調(diào)度應(yīng)用框架,以滿足各類基于數(shù)據(jù)流系統(tǒng)的開(kāi)發(fā)。通過(guò)Activiti工作流框架與Struts2、Hibernate的集成,能提高系統(tǒng)的柔性,適應(yīng)業(yè)務(wù)流程的變化,實(shí)現(xiàn)更好的業(yè)務(wù)過(guò)程控制,提高顧客服務(wù)質(zhì)量,降低系統(tǒng)開(kāi)發(fā)和維護(hù)成本。Activiti核心組成部分Activiti引擎中的ProcessEngine是最核心的類,其他的類都是由它而來(lái)的。利用ProcessEngine可以獲取到RepositoryService、RuntimeService、TaskService、HistoryService等核心組件。各Service的作用分別為:RepositoryService負(fù)責(zé)管理流程定義;RuntimeService負(fù)責(zé)執(zhí)行管理,包括啟動(dòng)、推進(jìn)、刪除流程實(shí)例等操作;TaskService負(fù)責(zé)流程任務(wù)管理;HistoryService負(fù)責(zé)歷史管理(執(zhí)行完的數(shù)據(jù)管理)。
2 應(yīng)用框架設(shè)計(jì)
應(yīng)用框架以Activiti工作流引擎為核心,在不違背Activiti編程接口和有關(guān)約定的前提下,由Spring集中管理流程引擎和其他業(yè)務(wù)接口。這樣做,無(wú)需直接在代碼中new相關(guān)的對(duì)象,而是通過(guò)Spring容器來(lái)組裝(控制翻轉(zhuǎn)),從而降低組件之間的耦合性。當(dāng)系統(tǒng)需要擴(kuò)展其他子系統(tǒng)時(shí),可以直接復(fù)用本應(yīng)用框架,不需要在基本的功能上投入過(guò)多精力。在此過(guò)程中,系統(tǒng)開(kāi)發(fā)人員可以專注于其他組件的開(kāi)發(fā),進(jìn)而縮短相關(guān)基于工作流系統(tǒng)的開(kāi)發(fā)周期,降低工作難度?;赟2SH協(xié)同工作流技術(shù)的應(yīng)用框架如圖1所示。
2.1 集成框架功能
在系統(tǒng)運(yùn)行過(guò)程中,由Web容器自動(dòng)完成對(duì)Spring容器對(duì)象監(jiān)聽(tīng)器的初始化工作,并加載Struts2的核心過(guò)濾器。待初始化工作完成后,它將通過(guò)Struts.xml的配置信息URL匹配映射截獲所有以.action(或.do,由系統(tǒng)開(kāi)發(fā)人員自定義指定)結(jié)尾的URL請(qǐng)求。當(dāng)客戶端由用戶提交表單或者一個(gè)觸發(fā)事件向Web應(yīng)用程序器提交一個(gè)請(qǐng)求時(shí),請(qǐng)求的參數(shù)會(huì)通過(guò)HTTP協(xié)議提交到Web服務(wù)器。Struts的控制器接收到HTTP請(qǐng)求,經(jīng)過(guò)已復(fù)寫(xiě)的Struts攔截器(權(quán)限驗(yàn)證攔截+Struts默認(rèn)攔截器)成功過(guò)濾后,可以訪問(wèn)ActionServlet開(kāi)發(fā)類中對(duì)應(yīng)的Action方法,然后由Struts.xml中的映射直接調(diào)用相應(yīng)的JSP。
Activiti工作流框架底層是基于Spring和ibatis存在的。雖然Hibernate、ibatis都是當(dāng)前業(yè)界優(yōu)秀的O/R mapping框架,但是,只需定義好pojo到數(shù)據(jù)庫(kù)表的映射關(guān)系,就可以通過(guò)Hibernate 提供的方法完成持久層操作。這樣做,在很大程度上提高了系統(tǒng)的開(kāi)發(fā)效率,所以,可將Hibernate與系統(tǒng)集成起來(lái)完成對(duì)數(shù)據(jù)層的操作。由應(yīng)用架構(gòu)圖可知,Spring容器可以管理系統(tǒng)中所有的業(yè)務(wù)和組件類。在實(shí)際項(xiàng)目開(kāi)發(fā)過(guò)程中,通常將核心業(yè)務(wù)注入到Spring容器,而Activiti工作流引擎則由Spring管理。當(dāng)Hibernate與Spring 集成應(yīng)用時(shí),需要在Spring的配置文件中配置Hibernate用到的一系列資源,比如Hibernate的配置、數(shù)據(jù)源(Data-Source)的配置。將Activiti工作流框架與Struts2、Hibernate有效地整合在一起,采取基于MVC的設(shè)計(jì)模式后,可以充分發(fā)揮各個(gè)框架的優(yōu)勢(shì),從而解決單獨(dú)使用這些框架開(kāi)發(fā)系統(tǒng)時(shí)存在的不足。
2.2 基于角色的安全訪問(wèn)控制模型
在設(shè)計(jì)該框架時(shí),引入了基于角色的安全訪問(wèn)控制,并且系統(tǒng)中各種權(quán)限的操作不是直接授予具體的用戶,而是在用戶集合與權(quán)限集合之間建立一個(gè)角色集合,每種角色都有相應(yīng)的權(quán)限。一旦用戶被分配了相應(yīng)的角色后,該用戶就擁有該角色所有的操作權(quán)限。這樣做的好處是不必在每次創(chuàng)建用戶時(shí)都分配權(quán)限,只需要分配用戶相應(yīng)的角色即可,而且角色的權(quán)限變更比用戶的權(quán)限變更要少得多。這樣不僅能簡(jiǎn)化用戶的權(quán)限管理,還能減少系統(tǒng)的開(kāi)銷。另外,通過(guò)權(quán)限控制可以防止系統(tǒng)的工作流應(yīng)用數(shù)據(jù)被非法用戶修改。
此外,對(duì)于工作流系統(tǒng)的訪問(wèn)控制機(jī)制,應(yīng)當(dāng)遵循職責(zé)分離的原則,比如在銀行業(yè)務(wù)中,授權(quán)付款和實(shí)施付款應(yīng)該分開(kāi)操作,如果發(fā)生權(quán)限交叉,則有可能出現(xiàn)欺騙行為。一般職責(zé)分離又分為動(dòng)態(tài)分離和靜態(tài)分離。動(dòng)態(tài)分離的職責(zé)是在系統(tǒng)為一個(gè)任務(wù)選擇執(zhí)行主體時(shí)實(shí)施互斥規(guī)則;靜態(tài)分離的職責(zé)是系統(tǒng)管理員創(chuàng)建用戶指定角色時(shí)實(shí)施互斥規(guī)則。
3 應(yīng)用實(shí)例
本文選取了1個(gè)典型的工作流內(nèi)部控制管理系統(tǒng)作為流程調(diào)度應(yīng)用框架的應(yīng)用實(shí)例。在系統(tǒng)流程運(yùn)轉(zhuǎn)過(guò)程中,其常規(guī)操作步驟是:①系統(tǒng)完成applicationContext.xml配置文件的加載任務(wù)(該配置文件引入了相關(guān)的工作流全局配置文件Activiti.cfg.xml配置文件、Hibernate.cfg.xml配置文件和其他業(yè)務(wù)組件的核心配置文件);②利用applicationContext.xml獲取相關(guān)工作流的服務(wù)接口;③加載工作流文件*.bpmn信息;④由系統(tǒng)管理用戶完成工作流的工作部署。工作流部署成功后,用戶便可以根據(jù)系統(tǒng)分配的角色來(lái)完成其權(quán)限范圍內(nèi)所對(duì)應(yīng)業(yè)務(wù)(流程實(shí)例)的操作。該工作流內(nèi)部控制管理系統(tǒng)如圖2所示。
由圖2可知,整個(gè)系統(tǒng)訪問(wèn)都與角色相關(guān),而且角色決定了用戶所涉及到的訪問(wèn)權(quán)限,通過(guò)該控制模型可以讓各個(gè)用戶根據(jù)指定角色去完成其職責(zé)范圍內(nèi)的任務(wù)。
3.1 用戶與角色
系統(tǒng)中的用戶可以分為系統(tǒng)用戶、管理層用戶和普通用戶。其中涉及到的角色可以分為系統(tǒng)管理員、技術(shù)主管和技術(shù)人員等。
3.2 權(quán)限集合
為了方便權(quán)限分配和回收,在用戶與權(quán)限集合之間引入了角色的概念。在該系統(tǒng)中,通過(guò)建立用戶表與角色表關(guān)聯(lián),再由角色與權(quán)限表關(guān)聯(lián)。當(dāng)一個(gè)用戶被分配了某個(gè)角色后,它便具備了相應(yīng)的訪問(wèn)操作權(quán)限。用戶、角色和權(quán)限對(duì)應(yīng)關(guān)系如表1所示。
系統(tǒng)是基于權(quán)限分離原則實(shí)現(xiàn)角色的安全訪問(wèn)控制和設(shè)計(jì)的,它有效規(guī)避了權(quán)限越界操作行為的發(fā)生,并具有角色動(dòng)態(tài)和靜態(tài)綁定機(jī)制。這樣做,既有效地實(shí)現(xiàn)了系統(tǒng)的便捷式安全訪問(wèn)控制,又增強(qiáng)了系統(tǒng)身份鑒別和授權(quán)控制方面的安全性。
4 結(jié)論
傳統(tǒng)的工作流框架只能支持預(yù)先定義的、固定的、循環(huán)的業(yè)務(wù)流程類型,不支持在不重啟流程實(shí)例的情況下動(dòng)態(tài)的、變化的流程類型和復(fù)雜委托代理過(guò)程等。在項(xiàng)目的實(shí)際開(kāi)發(fā)過(guò)程中,還有可能會(huì)因?yàn)楣ぷ髁骷夹g(shù)設(shè)計(jì)上存在的缺陷縮短系統(tǒng)的生命周期。為了使工作流應(yīng)用框架在實(shí)際項(xiàng)目開(kāi)發(fā)中有更好的通用性和可擴(kuò)展性,本文采用基于jBPM4的開(kāi)源工作流框架Activiti和S2SH改進(jìn)傳統(tǒng)工作流模型,并引入了基于角色的概念和角色動(dòng)態(tài)、靜態(tài)綁定機(jī)制來(lái)提高系統(tǒng)的安全性,實(shí)現(xiàn)對(duì)系統(tǒng)的安全訪問(wèn)控制,進(jìn)而開(kāi)發(fā)出1套適應(yīng)各類Web工作流項(xiàng)目開(kāi)發(fā)的安全原型。該模型不僅能解決文中提到的問(wèn)題,還具有MVC設(shè)計(jì)模式的優(yōu)點(diǎn),在很大程度上降低了視圖層、業(yè)務(wù)層和數(shù)據(jù)層之間的耦合,減少了工作量和程序的繁重程度,進(jìn)一步提升了系統(tǒng)應(yīng)用的通用性、可擴(kuò)展性和可復(fù)用性等。
綜上所述,本文的創(chuàng)新點(diǎn)是以Activiti引擎為核心,基于角色的安全訪問(wèn)控制和MVC設(shè)計(jì)模式,改進(jìn)和擴(kuò)展了傳統(tǒng)的工作流模型,提出了一種基于Java EE的輕量級(jí)框架Struts2、Hibernate和由工作流框架Activiti技術(shù)開(kāi)發(fā)的原型體系結(jié)構(gòu)。該結(jié)構(gòu)是可以支持多個(gè)體交互、多角色、多資源的流程驅(qū)動(dòng)應(yīng)用框架,它的存在使系統(tǒng)應(yīng)用具備通用性、可擴(kuò)展性、可復(fù)用性以及系統(tǒng)身份鑒別和授權(quán)控制方面的功能。
參考文獻(xiàn)
[1]Apache Software Foundation.Apache OFBiz[EB/OL].[2010 -04-01].http://ofbiz.apache.org/.
[2]Activiti.Activiti BPM suite[EB/OL].[2010-06-01].http://www. activiti.org/.
[3]Colosa,Inc.ProcessMaker[EB/OL].[2010-06-01].http://www. processmaker.com/community-support/.
[4]Baeyens T,F(xiàn)aura M V.The process virtual machine[EB/OL].
[2007-05-08].http://docs.jboss.com/jbpm/pvm/article/.
[5]OMG.BPMN v2.0 Beta1[EB/OL].[2009-08-14].http://www. omg.org/cgi-bin/doc?dtc/.
[6]RaviSandhu,Edward Coyne,HalFeinstein,et al.Role-based access control models[J].IEEE Computer,1996,29(2).
[7]Zhong Hua,F(xiàn)eng Yu-lin,Jiang Hong-an.A role hierarchy model for role-based access control and its application[J].Journal of Software,2000,11(6).
[8]ReinhardtA Botha,JanHP Eloff.Separation of duties for access control enforcement inworkflow environments[J].IBM Systems Journal,2001,40(3).
[9]李剛.輕量級(jí)Java EE企業(yè)應(yīng)用實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2011.
[10]范玉順.工作流管理技術(shù)基礎(chǔ)[M].北京:清華大學(xué)出版社,2001.
[11]Walls G,Breidenbach R.Spring in Action[M].Commonwealth of Virginia:Manning Publications Co.,2005.
〔編輯:白潔〕