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