陳路路,周鳳
(貴州大學(xué) 計算機科學(xué)與技術(shù)學(xué)院,貴州 貴陽 550025)
摘要:隨著當(dāng)前信息技術(shù)突飛猛進的發(fā)展,各行各業(yè)對于辦公效率都有了更高的要求,尤其是在一些財政審批、貸款辦理等這些流程較多的行業(yè),工作流技術(shù)成了其業(yè)務(wù)辦理不可或缺的一部分。傳統(tǒng)的工作流框架只支持事先設(shè)定的、循環(huán)的業(yè)務(wù)流程,對于一些動態(tài)變化和復(fù)雜的業(yè)務(wù)顯得捉襟見肘。該設(shè)計采用Activiti5和Struts2+Spring3+Hibernate4 3種輕量級框的整合,添加柔性表單,并且引入角色的權(quán)限機制來提高訪問的安全性。該設(shè)計不僅能方便不同部門的協(xié)同工作,而且能滿足動態(tài)流程的變化,提高辦公效率。
關(guān)鍵詞:Activiti5;柔性表單;工作流;Struts2+Spring3+Hibernate4
0引言
為進一步增強和完善該公司的售后服務(wù)質(zhì)量及用戶體驗,使售后服務(wù)管理流程化、規(guī)劃化,進一步提升公司的市場競爭力,滿足實際項目的需要,開發(fā)本系統(tǒng),實現(xiàn)售后管理業(yè)務(wù)的規(guī)范化、信息化。該設(shè)計是對車輛混燃系統(tǒng)的一套售后服務(wù)系統(tǒng)。伴隨公司業(yè)務(wù)的擴大,人工的管理和服務(wù)消耗了大量的物力、財力,而且對于一些設(shè)備安裝等流程化問題,工作人員稍有疏忽,就會出錯,實時性很差,不能跟蹤和監(jiān)控,降低客戶的滿意度,因此,在公司業(yè)務(wù)需要下,開發(fā)和設(shè)計一套流程化的、滿足動態(tài)業(yè)務(wù)的、可隨時監(jiān)控的售后信息平臺。該平臺的開發(fā)采用S2SH輕量級開發(fā)框架[13],敏捷開發(fā),代碼復(fù)用率高,便于移植、擴展和后期的維護;采用MVC的設(shè)計模式[4],降低Model、View和Control之間的耦合度,使其分離開來,極大削弱其相互之間的依賴,減少了工作量和降低開發(fā)難度。在S2SH輕量級框架的基礎(chǔ)上,整合Activiti5框架,采用其核心ProcessEngine類調(diào)用TaskService、RepositoryService、RuntimeService、 HistoryService 等組件,然后對流程定義、啟動和刪除以及流程任務(wù)和歷史的流程管理等進行管理,另外增加柔性表單設(shè)計,動態(tài)地響應(yīng)流程的變化,來滿足實際項目的需求。該系統(tǒng)還增加了角色管理,該系統(tǒng)有管理員、普通職員、技術(shù)主管3個主要角色,根據(jù)不同的角色,分配不同的權(quán)限,這樣保證了系統(tǒng)的高效性和安全性。
1主要相關(guān)技術(shù)簡介
1.1柔性工作流技術(shù)
柔性,顧名思義就是在外界條件改變或者外力沖擊的情況下,自身有一定的張力和適應(yīng)力,從而保持自己原有特性的一種能力。柔性工作流管理系統(tǒng)就是當(dāng)系統(tǒng)的流程或者系統(tǒng)的某些功能模塊發(fā)生變化時,僅僅對相應(yīng)的流程定義或者相關(guān)參數(shù)和規(guī)則進行調(diào)節(jié)即可,而系統(tǒng)本身的業(yè)務(wù)邏輯代碼不需要大的改動,這種柔性的實現(xiàn)原理主要是靠代碼邏輯的低耦合、高內(nèi)聚來實現(xiàn)的。系統(tǒng)的功能設(shè)計很大程度上決定系統(tǒng)的柔性限度,在柔性管理系統(tǒng)中最重要的一方面就是要設(shè)計出統(tǒng)一通用的算法以及相關(guān)的業(yè)務(wù)邏輯,這樣能夠使系統(tǒng)在不同的環(huán)境下實現(xiàn)真正的柔性適應(yīng)。該設(shè)計采用柔性化的工作流管理系統(tǒng),可以避免二次開發(fā)帶來的成本開銷,減少不必要的人力和物力。
1.2S2SH輕量級框架
S2SH框架是當(dāng)前開發(fā)者首選的框架之一,其便捷的開發(fā)、極高的松散性、較短的開發(fā)周期等優(yōu)點成為開發(fā)人員首選的一種開發(fā)框架。該系統(tǒng)采用Struts2+Spring3+Hibernate4這3種技術(shù)整合的開發(fā)框架[5]。其中,Struts2是在Struts1和WebWork的基礎(chǔ)上出現(xiàn)的一種輕量級框架。該系統(tǒng)采用Struts2的原因在于它是表示層框架,通過struts2.xml配置文件可以讓框架結(jié)構(gòu)一目了然,方便開發(fā)人員縮短開發(fā)周期。另外一個優(yōu)勢在于,其特有的核心過濾器和攔截器可以對一些非法的操作進行過濾和攔截,通過攔截器后才可以進入控制層進行下一步的操作,提供面向抽象類編程,還提供對于接口類的開發(fā)。Spring3是整個S2SH框架中核心地位,一方面是它可以與Struts2進行向上整合,與Hibernate4進行向下整合;另一方面它可以解決軟件耦合性差和復(fù)用性弱的問題,將系統(tǒng)進行分層設(shè)計。該框架中,最引人注目的就是控制反轉(zhuǎn)( Inversion of Control, IOC)和面向切片編程(Aspect-Oriented Programming, AOP)這兩個功能,前者是將對象的創(chuàng)建交給外部容器,系統(tǒng)中所用到的組件都可以綁定到配置文件中,通過配置文件和核心類庫來完成容器的各種操作;后者面向切面編程,主要是由JDK Proxy以及Ciglib來完成切面工作,AOP模塊被直接嵌入到了框架,只需要在Spring的核心配置文件中配置相應(yīng)文件,然后通過調(diào)用AOP接口即可完成AOP需求的任務(wù)。最后一種整合框架是Hibernate4,它是一種對象關(guān)系映射框架,早期的編程人員采用的都是JDBC,采用這種方式進行開發(fā)代碼顯得臃腫,復(fù)用性太差。而Hibernate4則只需要對JDBC進行一次編寫,就能完成任何地方都能進行引用的效果,并且使用Hibernate4框架可以很容易生成數(shù)據(jù)庫表,在SQL語句的書寫上,省去了很多不必要的操作,只需要書寫HQL就可以操作數(shù)據(jù)庫。
2Activiti5與S2SH框架整合的系統(tǒng)結(jié)構(gòu)
2.1系統(tǒng)的整體架構(gòu)圖
該設(shè)計采用的結(jié)構(gòu)是B/S結(jié)構(gòu),選取Eclipse IDE開發(fā)平臺,運用Struts2+Spring3+Hibernate4組合的Web框架,采用jQuery等開發(fā)技術(shù),有表現(xiàn)層、業(yè)務(wù)邏輯層、持久層等。在業(yè)務(wù)邏輯層中整合Activiti5引擎[67]。另外采用MVC設(shè)計模式,使層與層之間的耦合度降低,增強代碼的復(fù)用性,便于開發(fā)人員對后期功能的擴展和維護。系統(tǒng)總體結(jié)構(gòu)如圖1所示。
2.2該系統(tǒng)設(shè)計的原理
該系統(tǒng)采用的是3層架構(gòu)[8],即表現(xiàn)層、邏輯層、持久層。表現(xiàn)層采用的主要技術(shù)有BootStrap、JSP和Jquery,當(dāng)用戶向Web應(yīng)用器提交一個請求時,這個請求可以是觸發(fā)一個事件或者提交一個表單,請求參數(shù)會通過HTTP協(xié)議提交到Web服務(wù)器,Struts2的攔截器經(jīng)過過濾后,通過訪問ActionService類中對應(yīng)的Action,由其Struts.xml 中的映射進而調(diào)用相應(yīng)的JSP等。在業(yè)務(wù)邏輯層,Activiti工作流引擎則由Spring管理,因為Activiti工作流底層框架是基于Spring和ibatis的,其中Activiti引擎[9]可以解析基于BPMN2.0繪制的流程圖,進而對流程進行管理。Activiti中的Activiti Designer是一個Eclipse插件,允許在IDE環(huán)境內(nèi)用BPMN2.0建立流程模型,這方便了設(shè)計人員和開發(fā)人員的溝通,使他們不用進行面對面的交流就可以使開發(fā)人員進行編程和代碼設(shè)計。持久層的Hibernate與Spring集成時,在Spring的配置文件中只需要配置Hibernate需要的資源即可,例如一些DataSource的配置等,將Hibernate框架與系統(tǒng)集成起來完成對數(shù)據(jù)的操作。整個系統(tǒng)的實現(xiàn)是由這幾種框架整合集成來的,這樣可以充分利用各個框架自身的優(yōu)勢,相互補充,避免了單獨使用的不便。
3該售后業(yè)務(wù)平臺的實現(xiàn)
3.1數(shù)據(jù)庫初始化
數(shù)據(jù)庫初始化代碼如下。
/**使用代碼創(chuàng)建工作流需要的23張表*/
@Test
public void createTable(){
ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();//連接數(shù)據(jù)庫的配置
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/itcast0711activiti?useUnicode=true&characterEncoding=utf8");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("111");
processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
//工作流的核心對象,ProcessEnginee對象
ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
System.out.println("processEngine:"+processEngine);
}
在Activiti5中,創(chuàng)建核心的流程引擎對象時會自動建表。如果程序正常執(zhí)行,MySQL會自動建庫,然后創(chuàng)建23張表。
3.2工作流程圖設(shè)計
該設(shè)計的流程圖是用Activiti5 Modeler工具來制作的,業(yè)務(wù)流程以圖形化的方式呈現(xiàn)出來,這樣方便開發(fā)人員使用,從而避免業(yè)務(wù)人員和開發(fā)人員由于地理上的局限而帶來的難以溝通的問題。該流程圖有開始節(jié)點和結(jié)束節(jié)點,這是流程圖繪制過程中必不可缺少的,另外還有任務(wù)節(jié)點和排他網(wǎng)關(guān),當(dāng)流程執(zhí)行到排他網(wǎng)關(guān)時,流程引擎會自動檢索網(wǎng)關(guān)出口,從上到下檢索,如果發(fā)現(xiàn)第一條決策結(jié)果為true或者沒有設(shè)置條件的(默認(rèn)為成立),則流出。圖2所示為本系統(tǒng)中某任務(wù)的流程圖。
4結(jié)論
該設(shè)計主要以Activiti5工作流引擎為核心,集成了Struts2、Spring3、Hibernate4這幾種輕量級框架的最新版本,添加了安全訪問機制,提高了系統(tǒng)的訪問安全性。另外采用MVC的設(shè)計模式,使模型、視圖、控制器這三者徹底分離開來,降低了視圖層、業(yè)務(wù)層和數(shù)據(jù)層的耦合性,使它們的松散性增強,極大方便了開發(fā)人員的開發(fā)。除此之外還增加了柔性表單,可以讓工作流管理系統(tǒng)有一點的柔性,這樣可以在業(yè)務(wù)流程改變或者功能模塊改變的時候,不需要對業(yè)務(wù)代碼進行大的改動,只需要修改流程定義或者流程參數(shù)或規(guī)則即可。該設(shè)計的可擴展性和復(fù)用性提升了工作流管理系統(tǒng)的性能,進一步提升了公司信息化水平。
參考文獻
[1] 李剛.輕量級Java EE企業(yè)應(yīng)用實戰(zhàn)[M].北京: 電子工業(yè)出版社,2011.
[2] 張耀民.SSH框架在Web項目開發(fā)中的構(gòu)建和應(yīng)用實踐[J].微型機與應(yīng)用,2013,32(15):1821.
?。?] 范新燦,趙明.基于Struts + Hibernate + Spring的輕量級架構(gòu)開發(fā)應(yīng)用研究[J].現(xiàn)代計算機(專業(yè)版),2010(1):176 179.
?。?] 唐永瑞,張達敏.基于Ajax與MVC模式的信息系統(tǒng)的研究與設(shè)計[J].電子技術(shù)應(yīng)用,2014,40(2):128131.
?。?] 王學(xué)偉.基于S2SH2和Fireflow工作流的辦公自動化系統(tǒng)的設(shè)計與實現(xiàn)[D].武漢:武漢科技大學(xué),2011.
?。?] 王虎. 基于jBPM的計量管理信息系統(tǒng)的設(shè)計與實現(xiàn)[D].合肥:合肥工業(yè)大學(xué),2010.
[7] 賈松浩,楊彩,劉軍. 基于S2SH框架的個性化實驗室管理系統(tǒng)[J].實驗室研究與探索,2014,33(8):232235.
?。?] 葛揚瑛. 基于JavaEE和工作流的項目申報系統(tǒng)的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2013.
?。?] 曹偉. 面向辦公自動化的工作流引擎研究和設(shè)計[D].南京:南京理工大學(xué),2013.