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