張 瑞,羅金濤
(1.商丘師范學院 計算機與信息技術學院,河南 商丘 476000;2.東莞威遠職業高級中學 廣東 東莞 523909)
工作流(WorkFlow)就是工作流程的計算模型,即將工作流程中的工作如何前后組織在一起的邏輯和規則在計算機中以恰當的模型進行表示并對其實施計算,其表現為參與者對文件、信息或者任務按照預定的規定來采用行動,并令其在參與者之間進行傳遞。工作流要解決的主要問題是:為實現某個業務目標,在多個參與者之間,利用計算機,按某種預定規則自動傳遞文檔、信息或者任務。簡單地說,工作流就是一系列相互銜接、自動進行的業務活動或任務,它需要人的參與[1]。工作流管理的最大優點是將應用邏輯和過程邏輯分離,可以不修改具體功能實現而只修改過程模型來改變系統功能,實現對生產經營部分或全部過程的集成管理,有效地把人、信息和應用工具合理地組織在一起,提高軟件的重用率,發揮系統的最大效能。
管理),它是一個基于Java的工作流管理系統[2]。JBPM最大的特色就是它的邏輯定義沒有采用目前的一些規范,如XPDL、BPEL等,而是采用了它自己定義的JBoss JBPM Process Definition Language(JPDL)。JPDL認為一個商務流程可以被看作是一個UML狀態圖[3]。JPDL就是詳細定義了這個狀態圖的每個部分,如起始、結束狀態,狀態之間的轉換等。
JBPM底層所采用的持久層技術是Hibernate[4],Hibernate是開源社區非常優秀的持久層技術,使用非常廣泛,它能夠方便的將數據對象和底層數據庫進行映射,它能夠支持包括oracle,mysql,MSSqlServer在內的各種主流數據庫系統,并且提供緩存管理等多項其它優化技術,使用它可以更加方便的操作數據庫。而JBPM采用Hibernate作為持久層訪問技術,無疑是更加增強了JBPM的易用性和可擴展性[5]。
JBPM (Java Business Process Management,Java 業務流程
根據需求,本實例采用powerdesigner工具設計出users、application和checkup 3張用戶表,其物理數據模型如圖1所示。

圖1 用戶表數據模型Fig.1 User table datamodel
JBPM的所有操作對象以及操作狀態都會存儲到系統數據庫當中,因此系統數據庫是JBPM工作流引擎的核心,并且JBPM是采用Hibernate來進行持久層操作。有以下幾種方法可以生成系統數據表:
1)手工方式
手動地把所需表的sql腳本通過MySQL的命令行方式來生成數據表,而且由于在JBPM套件包中的db目錄中,已經自帶了各種版本數據庫系統的代碼,mysql的對應代碼腳本為:jbpm.jpdl.mysql.sql,通過簡單修改,就可以通過命令行方式生成JBPM系統數據表,最后可以生成32張系統數據表。 但是對于用戶數據表,也需要去單獨生成。
2)調用JBPM內部方法
在配置好JBPM運行環境以及Hibernate映射關系的情況下,通過語句:
JbpmConfiguration.getInstance().createSchema(); 就 可 以在指定的數據庫中生成32張系統表以及users、application和checkup 3張用戶表。
通過系統業務流程的分析描述,可以通過JBPM在Eclipse下的圖形化插件設計出如圖2所示的流程定義[6]。

圖2 JBPM流程定義Fig.2 JBPM process definition
JBPM流程的發布,有兩種方式,第1種是簡單的方式,只發布流程定義文件,第2種是完整的發布方式,就是將流程定義文件,gpd.xml已經 processimage.jpg 3 個文件進行打包成zip格式,然后再進行發布,以發布zip格式為例,其核心代碼如下:


1)報銷單的提交
在以Hibernate作為數據庫持久層技術的JBPM工作流開發中,表單的提交處理和采用純JDBC方式操作數據庫時有了很大的變化。Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架,通過它可以簡化對數據庫操作。 Hibernate可以用在任何JDBC可以使用的場合,從某種意義上來說,Hibernate可以在任何場合下取代JDBC.以下是本例中對于報銷申請單的提交處理代碼片段:

//對報銷單內容進行持久化操作,在實際當中,這些數據是從前臺表單取得,然后通過JavaBean中的setter方式,就可以將數據放入app中

2)流程實例的生成
流程實例就是業務的一次實際流轉過程,流程和流程實例的關系相當于對象和類的關系,創建流程實例以后,還需要和公務進行綁定。該方法實現如下:


流程實例擁有自己的ContextInstance環境變量對象。它實際上是一個HashMap,以key-value方式記錄了流程的上下文變量值,它以鍵值對的方式出現的,代碼中的 processIns tance.getContext
Instance().createVariable("application",app.getAppid ());就是向環境變量中添加一個key為application的對象。每個流程實例都擁有自己令牌(token)對象,主流程有自己的根令牌 (RootToken),子流程也擁有自己的子Token。父流程的Token和子流程的 Token相互關聯,形成Token樹。 Token對象表示流程運行的當前位置,即流程運行到哪個節點了。最后通過對Token對象的signal()方法調用,可以使流程向下運行。
最近幾年企業對于過程建模的需求為工作流提供了一個廣闊的市場,使得工作流產品得以迅速發展。文中選擇了開源領域當前最流行的JBPM工作流作為研究對象,并將其應用于OA領域,主要完成了以下研究工作:
1)研究了工作流管理系統的作用,意義,重點研究了標準工作流參考模型以及JBPM的系統架構以及軟件體系結構。
2)分析設計了OA系統中的一個典型工作流模塊,并給出了核心實現代碼,業務流程的實現嚴格按照JBPM標準。
[1]王春華,吳業福,吳亞芳.工作流原理及應用[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面向對象技術與實踐[M].北京:北京科學出版社,2006.
[4]夏昕,曹曉鋼,唐勇.深入淺出Hibernate[M].北京:電子工業出版社,2005.
[5]孫衛琴.精通Hibernate:Java對象持久化技術詳解[M].北京:電子工業出版社,2005.
[6]顧文軒,王瓊,徐汀榮.基于JBPM的工作流管理系統的研究與設計[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.