張 瑞,羅金濤
(1.商丘師范學院 計算機與信息技術學院,河南 商丘 476000;2.東莞威遠職業(yè)高級中學 廣東 東莞 523909)
工作流(WorkFlow)就是工作流程的計算模型,即將工作流程中的工作如何前后組織在一起的邏輯和規(guī)則在計算機中以恰當?shù)哪P瓦M行表示并對其實施計算,其表現(xiàn)為參與者對文件、信息或者任務按照預定的規(guī)定來采用行動,并令其在參與者之間進行傳遞。工作流要解決的主要問題是:為實現(xiàn)某個業(yè)務目標,在多個參與者之間,利用計算機,按某種預定規(guī)則自動傳遞文檔、信息或者任務。簡單地說,工作流就是一系列相互銜接、自動進行的業(yè)務活動或任務,它需要人的參與[1]。工作流管理的最大優(yōu)點是將應用邏輯和過程邏輯分離,可以不修改具體功能實現(xiàn)而只修改過程模型來改變系統(tǒng)功能,實現(xiàn)對生產(chǎn)經(jīng)營部分或全部過程的集成管理,有效地把人、信息和應用工具合理地組織在一起,提高軟件的重用率,發(fā)揮系統(tǒng)的最大效能。
管理),它是一個基于Java的工作流管理系統(tǒng)[2]。JBPM最大的特色就是它的邏輯定義沒有采用目前的一些規(guī)范,如XPDL、BPEL等,而是采用了它自己定義的JBoss JBPM Process Definition Language(JPDL)。JPDL認為一個商務流程可以被看作是一個UML狀態(tài)圖[3]。JPDL就是詳細定義了這個狀態(tài)圖的每個部分,如起始、結(jié)束狀態(tài),狀態(tài)之間的轉(zhuǎn)換等。
JBPM底層所采用的持久層技術是Hibernate[4],Hibernate是開源社區(qū)非常優(yōu)秀的持久層技術,使用非常廣泛,它能夠方便的將數(shù)據(jù)對象和底層數(shù)據(jù)庫進行映射,它能夠支持包括oracle,mysql,MSSqlServer在內(nèi)的各種主流數(shù)據(jù)庫系統(tǒng),并且提供緩存管理等多項其它優(yōu)化技術,使用它可以更加方便的操作數(shù)據(jù)庫。而JBPM采用Hibernate作為持久層訪問技術,無疑是更加增強了JBPM的易用性和可擴展性[5]。
JBPM (Java Business Process Management,Java 業(yè)務流程
根據(jù)需求,本實例采用powerdesigner工具設計出users、application和checkup 3張用戶表,其物理數(shù)據(jù)模型如圖1所示。
圖1 用戶表數(shù)據(jù)模型Fig.1 User table datamodel
JBPM的所有操作對象以及操作狀態(tài)都會存儲到系統(tǒng)數(shù)據(jù)庫當中,因此系統(tǒng)數(shù)據(jù)庫是JBPM工作流引擎的核心,并且JBPM是采用Hibernate來進行持久層操作。有以下幾種方法可以生成系統(tǒng)數(shù)據(jù)表:
1)手工方式
手動地把所需表的sql腳本通過MySQL的命令行方式來生成數(shù)據(jù)表,而且由于在JBPM套件包中的db目錄中,已經(jīng)自帶了各種版本數(shù)據(jù)庫系統(tǒng)的代碼,mysql的對應代碼腳本為:jbpm.jpdl.mysql.sql,通過簡單修改,就可以通過命令行方式生成JBPM系統(tǒng)數(shù)據(jù)表,最后可以生成32張系統(tǒng)數(shù)據(jù)表。 但是對于用戶數(shù)據(jù)表,也需要去單獨生成。
2)調(diào)用JBPM內(nèi)部方法
在配置好JBPM運行環(huán)境以及Hibernate映射關系的情況下,通過語句:
JbpmConfiguration.getInstance().createSchema(); 就 可 以在指定的數(shù)據(jù)庫中生成32張系統(tǒng)表以及users、application和checkup 3張用戶表。
通過系統(tǒng)業(yè)務流程的分析描述,可以通過JBPM在Eclipse下的圖形化插件設計出如圖2所示的流程定義[6]。
圖2 JBPM流程定義Fig.2 JBPM process definition
JBPM流程的發(fā)布,有兩種方式,第1種是簡單的方式,只發(fā)布流程定義文件,第2種是完整的發(fā)布方式,就是將流程定義文件,gpd.xml已經(jīng) processimage.jpg 3 個文件進行打包成zip格式,然后再進行發(fā)布,以發(fā)布zip格式為例,其核心代碼如下:
1)報銷單的提交
在以Hibernate作為數(shù)據(jù)庫持久層技術的JBPM工作流開發(fā)中,表單的提交處理和采用純JDBC方式操作數(shù)據(jù)庫時有了很大的變化。Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架,通過它可以簡化對數(shù)據(jù)庫操作。 Hibernate可以用在任何JDBC可以使用的場合,從某種意義上來說,Hibernate可以在任何場合下取代JDBC.以下是本例中對于報銷申請單的提交處理代碼片段:
//對報銷單內(nèi)容進行持久化操作,在實際當中,這些數(shù)據(jù)是從前臺表單取得,然后通過JavaBean中的setter方式,就可以將數(shù)據(jù)放入app中
2)流程實例的生成
流程實例就是業(yè)務的一次實際流轉(zhuǎn)過程,流程和流程實例的關系相當于對象和類的關系,創(chuàng)建流程實例以后,還需要和公務進行綁定。該方法實現(xiàn)如下:
流程實例擁有自己的ContextInstance環(huán)境變量對象。它實際上是一個HashMap,以key-value方式記錄了流程的上下文變量值,它以鍵值對的方式出現(xiàn)的,代碼中的 processIns tance.getContext
Instance().createVariable("application",app.getAppid ());就是向環(huán)境變量中添加一個key為application的對象。每個流程實例都擁有自己令牌(token)對象,主流程有自己的根令牌 (RootToken),子流程也擁有自己的子Token。父流程的Token和子流程的 Token相互關聯(lián),形成Token樹。 Token對象表示流程運行的當前位置,即流程運行到哪個節(jié)點了。最后通過對Token對象的signal()方法調(diào)用,可以使流程向下運行。
最近幾年企業(yè)對于過程建模的需求為工作流提供了一個廣闊的市場,使得工作流產(chǎn)品得以迅速發(fā)展。文中選擇了開源領域當前最流行的JBPM工作流作為研究對象,并將其應用于OA領域,主要完成了以下研究工作:
1)研究了工作流管理系統(tǒng)的作用,意義,重點研究了標準工作流參考模型以及JBPM的系統(tǒng)架構(gòu)以及軟件體系結(jié)構(gòu)。
2)分析設計了OA系統(tǒng)中的一個典型工作流模塊,并給出了核心實現(xiàn)代碼,業(yè)務流程的實現(xiàn)嚴格按照JBPM標準。
[1]王春華,吳業(yè)福,吳亞芳.工作流原理及應用[J].電腦知識與技術,2005(10):106.
WANG Chun-hua,WU Ye-fu,WU Ya-fang.The principle and application ofworkflow[J].Computer Knowledge and Technology,2005(10):106.
[2]JBoss Enterprise.JBPM Overview[EB/OL].(2010-04).http://www.jboss.org/jbpm.
[3]宋波.UML面向?qū)ο蠹夹g與實踐[M].北京:北京科學出版社,2006.
[4]夏昕,曹曉鋼,唐勇.深入淺出Hibernate[M].北京:電子工業(yè)出版社,2005.
[5]孫衛(wèi)琴.精通Hibernate:Java對象持久化技術詳解[M].北京:電子工業(yè)出版社,2005.
[6]顧文軒,王瓊,徐汀榮.基于JBPM的工作流管理系統(tǒng)的研究與設計[J].計算機應用與軟件,2009,26(5):104-106.GU Wen-xuan,WANG Qiong,XU Ting-rong.Study and design of JBPM based workflow management system[J].Computer Applications and Software,2009,26(5):104-106.