基于JBPM的電子政務(wù)系統(tǒng)的設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:隨著信息技術(shù)的深入發(fā)展,電子政務(wù)已成為信息化建設(shè)的重要領(lǐng)域。由于電子政務(wù)建設(shè)中軟件費(fèi)用支出巨大,本文提出了一個(gè)基于開(kāi)源工作流引擎JBPM的電子政務(wù)系統(tǒng)的設(shè)計(jì)方案,該設(shè)計(jì)方案既能提高了電子政務(wù)系統(tǒng)性能,又能有效的節(jié)省軟件開(kāi)發(fā)的費(fèi)用。
1 引言
所謂電子政務(wù),是指各級(jí)政務(wù)部門利用現(xiàn)代信息技術(shù),開(kāi)展辦公決策、業(yè)務(wù)處理和公 共服務(wù)等政務(wù)活動(dòng),提高工作效率、管理能力和服務(wù)水平的過(guò)程。近幾年,隨著國(guó)內(nèi)信息化 建設(shè)速度的不斷加快以及國(guó)家對(duì)電子政務(wù)工作重視程度的日漸加深,電子政務(wù)呈現(xiàn)出強(qiáng)勁的 發(fā)展勢(shì)頭[1]。
同時(shí),工作流技術(shù)也發(fā)展迅速,商業(yè)和開(kāi)源工作流產(chǎn)品相繼推出。由于電子政務(wù)工程中 軟件費(fèi)用支出巨大,在不影響系統(tǒng)功能和性能的前提下,采用開(kāi)源軟件成為電子政務(wù)工程降 低成本的一個(gè)重要途徑。而且,開(kāi)源軟件具有開(kāi)放的特性,開(kāi)源社區(qū)都在不斷的努力提高開(kāi) 源代碼的可靠性,逐漸完善開(kāi)源系統(tǒng)的質(zhì)量。
本文在對(duì)比分析當(dāng)今三大開(kāi)源的工作流引擎的基礎(chǔ)上,重點(diǎn)分析并研究了基于JBPM 構(gòu) 建電子政務(wù)系統(tǒng)?;贘BPM 所設(shè)計(jì)的電子政務(wù)系統(tǒng),既提高了政府的辦公效率又降低了系 統(tǒng)開(kāi)發(fā)的費(fèi)用。
2 開(kāi)源工作流引擎之間的比較
目前,在工作流領(lǐng)域,具有代表性的開(kāi)源工作流產(chǎn)品有Shark、OSWorkflow 和JBPM。 在此對(duì)這三大工作流引擎進(jìn)行分析比較,如表1。
由于JBPM 的圖形化流程設(shè)計(jì)工具jbpm-designer 目前只是一個(gè)eclipse 插件,只能在 eclipse IDE 環(huán)境下使用,故在JBPM 開(kāi)發(fā)中通常使用的是eclipse 開(kāi)發(fā)環(huán)境。安裝JBPM 很 簡(jiǎn)單,只需將文件jbpm-STarters-kit-3.1.1jbpm-designerjbpm-gpd-featureeclipse 拷貝到eclipse 安裝目錄的pulgins 目錄下即可。如果安裝成功,重啟eclipse,就可在 Eclipse 的首選項(xiàng)里發(fā)現(xiàn)多了一個(gè)JBoss jBPM 。
JBPM 具體的開(kāi)發(fā)流程如下: 1) 初始化數(shù)據(jù)庫(kù)。 任何系統(tǒng)都需要數(shù)據(jù)庫(kù)支持,jBPM 會(huì)把自己的一個(gè)初始化數(shù)據(jù)存 儲(chǔ)到數(shù)據(jù)庫(kù),同時(shí)工作流的數(shù)據(jù)也是存儲(chǔ)到數(shù)據(jù)庫(kù)中的。jBPM 使用了Hibernate 做為自己 的存儲(chǔ)層,因此只要是 Hibernate 支持的數(shù)據(jù)庫(kù),JBPM 也就支持。
本文所設(shè)計(jì)系統(tǒng)使用的 數(shù)據(jù)庫(kù)是MySQL,故以MySQL 為例,簡(jiǎn)單介紹JBPM 數(shù)據(jù)庫(kù)的初始化操作: 首先安裝MySQL 和MySQL 客戶端,安裝MySQL 客戶端是為了方便查看數(shù)據(jù)庫(kù)中的數(shù)據(jù); 接著在MySQL 中創(chuàng)建一個(gè)庫(kù)并將下載的文件 jbpm-starters-kit-3.1.1 下的子目錄 jbpm 改名為 jbpm.3;最后在DOS 窗口下進(jìn)入jbpm-starters-kit-3.1.1jbpm-db 子目錄,執(zhí)行 命令“ant mysql. scripts ”。若執(zhí)行成功,會(huì)在bpm-starters-kit-3.1.1jbpm-dbbuild mysql scripts 子目錄中生成四個(gè)sql 文件。再在MySQL 客戶端中的腳本界面執(zhí)行 “mysql.create.sql”腳本,這樣就在JBPM 庫(kù)中創(chuàng)建了一個(gè)數(shù)據(jù)表。
2) 在Eclipse 中配置JBPM。進(jìn)入Eclipse 的首選項(xiàng)中找到JBoss JBPM,指定 JBPM 的安裝路徑,目的是為了在Eclipse 找到JBPM 下的各種 jar 包,設(shè)置項(xiàng)目的JBPM 庫(kù)引用。
3)新建JBPM 項(xiàng)目。進(jìn)入Eclipse 的主菜單,依次點(diǎn)擊文件、新建、項(xiàng)目、JBoss JBPM、 Process Project,取個(gè)項(xiàng)目名,點(diǎn)擊完成即可。
4)設(shè)置Hibernate 的配置文件,主要是設(shè)定相關(guān)的數(shù)據(jù)庫(kù)連接信息。以MySQL 為例,在 JBPM 項(xiàng)目中點(diǎn)擊進(jìn)入hibernate.cfg.xml 文件,其中做如下修改:
<!-- jdbc connection properties -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property nAME="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">******</property>
5) 添加庫(kù)引用。為了連接JBPM 工作流引擎與Hibernate 持久層的通信,要將Hibernate 的Hibernate3.jar 包添加進(jìn)JBPM 項(xiàng)目的庫(kù)引用。而本系統(tǒng)使用了MySQL 數(shù)據(jù)庫(kù),故也要將 其JDBC 庫(kù)添加進(jìn)庫(kù)引用,使用其他數(shù)據(jù)庫(kù)與此類似。
6) 具體工作流的開(kāi)發(fā)。使用JPDL 定義工作流,保存在processdefinition.xml 文件中。 流程定義法則參考JBPM 工作流開(kāi)發(fā)指南[2]。
4 電子政務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
本文采用工作流引擎JBPM作為政務(wù)系統(tǒng)的核心,利用Struts +Spring +Hibernate架構(gòu)[3] 作為政務(wù)系統(tǒng)的框架,構(gòu)建一個(gè)結(jié)構(gòu)清晰、實(shí)用價(jià)廉的電子政務(wù)系統(tǒng)。系統(tǒng)架構(gòu)如圖3所示。
通過(guò)對(duì)上表的分析可以得出:如果開(kāi)發(fā)電子政務(wù)系統(tǒng),JBPM 是最適用的開(kāi)源工作流引 擎。因?yàn)橄鄬?duì)于Shark,JBPM 更加靈活,而且以當(dāng)前流行的Hibernate 作為它的持久層,這使它能在不同的數(shù)據(jù)庫(kù)服務(wù)器上輕松部署并方便地進(jìn)行管理,另外還有全面的文檔;相對(duì)于 OSWorkflow,JBPM 更加簡(jiǎn)單,可以作為嵌入工作流,給了開(kāi)發(fā)者更大的靈活性。同時(shí),JBPM 系統(tǒng)最大的特色是使用自己的流程定義語(yǔ)言JPDL 來(lái)精確描述業(yè)務(wù)流程,過(guò)程建模結(jié)合了UML 活動(dòng)圖和狀態(tài)圖的知識(shí),為用戶提供了可視化的面向圖形的編輯流程定義的方法,業(yè)務(wù)人員 能很直觀的與軟件進(jìn)行交互,更好的發(fā)揮了電子政務(wù)系統(tǒng)的作用。
3 JBPM 剖析
JBPM,全稱是Java BusinESS Process Management,是基于J2EE 的輕量級(jí)工作流管理系 統(tǒng)[2]。JBPM 是公開(kāi)源代碼項(xiàng)目,它使用要遵循Apache License,可以免費(fèi)應(yīng)用于商業(yè)開(kāi)發(fā)。 JBPM 在2004 年10 月18 日,發(fā)布了2.0 版本,并在同一天加入了JBoss,成為JBoss 企業(yè) 中間件平臺(tái)的一個(gè)組成部分,它的名稱也改成JBoss JBPM。JBPM 的系統(tǒng)結(jié)構(gòu)如圖2 所示。
由于JBPM 的圖形化流程設(shè)計(jì)工具jbpm-designer 目前只是一個(gè)eclipse 插件,只能在 eclipse IDE 環(huán)境下使用,故在JBPM 開(kāi)發(fā)中通常使用的是eclipse 開(kāi)發(fā)環(huán)境。安裝JBPM 很 簡(jiǎn)單,只需將文件jbpm-STarters-kit-3.1.1jbpm-designerjbpm-gpd-featureeclipse 拷貝到eclipse 安裝目錄的pulgins 目錄下即可。如果安裝成功,重啟eclipse,就可在 Eclipse 的首選項(xiàng)里發(fā)現(xiàn)多了一個(gè)JBoss jBPM 。
JBPM 具體的開(kāi)發(fā)流程如下: 1) 初始化數(shù)據(jù)庫(kù)。 任何系統(tǒng)都需要數(shù)據(jù)庫(kù)支持,jBPM 會(huì)把自己的一個(gè)初始化數(shù)據(jù)存 儲(chǔ)到數(shù)據(jù)庫(kù),同時(shí)工作流的數(shù)據(jù)也是存儲(chǔ)到數(shù)據(jù)庫(kù)中的。jBPM 使用了Hibernate 做為自己 的存儲(chǔ)層,因此只要是 Hibernate 支持的數(shù)據(jù)庫(kù),JBPM 也就支持。
本文所設(shè)計(jì)系統(tǒng)使用的 數(shù)據(jù)庫(kù)是MySQL,故以MySQL 為例,簡(jiǎn)單介紹JBPM 數(shù)據(jù)庫(kù)的初始化操作: 首先安裝MySQL 和MySQL 客戶端,安裝MySQL 客戶端是為了方便查看數(shù)據(jù)庫(kù)中的數(shù)據(jù); 接著在MySQL 中創(chuàng)建一個(gè)庫(kù)并將下載的文件 jbpm-starters-kit-3.1.1 下的子目錄 jbpm 改名為 jbpm.3;最后在DOS 窗口下進(jìn)入jbpm-starters-kit-3.1.1jbpm-db 子目錄,執(zhí)行 命令“ant mysql. scripts ”。若執(zhí)行成功,會(huì)在bpm-starters-kit-3.1.1jbpm-dbbuild mysql scripts 子目錄中生成四個(gè)sql 文件。再在MySQL 客戶端中的腳本界面執(zhí)行 “mysql.create.sql”腳本,這樣就在JBPM 庫(kù)中創(chuàng)建了一個(gè)數(shù)據(jù)表。
2) 在Eclipse 中配置JBPM。進(jìn)入Eclipse 的首選項(xiàng)中找到JBoss JBPM,指定 JBPM 的安裝路徑,目的是為了在Eclipse 找到JBPM 下的各種 jar 包,設(shè)置項(xiàng)目的JBPM 庫(kù)引用。
3)新建JBPM 項(xiàng)目。進(jìn)入Eclipse 的主菜單,依次點(diǎn)擊文件、新建、項(xiàng)目、JBoss JBPM、 Process Project,取個(gè)項(xiàng)目名,點(diǎn)擊完成即可。
4)設(shè)置Hibernate 的配置文件,主要是設(shè)定相關(guān)的數(shù)據(jù)庫(kù)連接信息。以MySQL 為例,在 JBPM 項(xiàng)目中點(diǎn)擊進(jìn)入hibernate.cfg.xml 文件,其中做如下修改:
<!-- jdbc connection properties -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property nAME="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">******</property>
5) 添加庫(kù)引用。為了連接JBPM 工作流引擎與Hibernate 持久層的通信,要將Hibernate 的Hibernate3.jar 包添加進(jìn)JBPM 項(xiàng)目的庫(kù)引用。而本系統(tǒng)使用了MySQL 數(shù)據(jù)庫(kù),故也要將 其JDBC 庫(kù)添加進(jìn)庫(kù)引用,使用其他數(shù)據(jù)庫(kù)與此類似。
6) 具體工作流的開(kāi)發(fā)。使用JPDL 定義工作流,保存在processdefinition.xml 文件中。 流程定義法則參考JBPM 工作流開(kāi)發(fā)指南[2]。
4 電子政務(wù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
本文采用工作流引擎JBPM作為政務(wù)系統(tǒng)的核心,利用Struts +Spring +Hibernate架構(gòu)[3] 作為政務(wù)系統(tǒng)的框架,構(gòu)建一個(gè)結(jié)構(gòu)清晰、實(shí)用價(jià)廉的電子政務(wù)系統(tǒng)。系統(tǒng)架構(gòu)如圖3所示。
圖中用戶(User)負(fù)責(zé)以下工作:
(1)登錄電子政務(wù)系統(tǒng)界面,使用流程定義工具(Modeling Tool)將要進(jìn)行流程運(yùn)行的 業(yè)務(wù)流程定義完整后發(fā)送業(yè)務(wù)請(qǐng)求到中央控制器(ActionServlet);
(2)在系統(tǒng)界面(System Interface)上查看本人所發(fā)起的業(yè)務(wù)流程的詳細(xì)信息,包括到 達(dá)流程路線中各節(jié)點(diǎn)的時(shí)間以及各節(jié)點(diǎn)負(fù)責(zé)人的意見(jiàn);
(3)通過(guò)系統(tǒng)界面(System Interface)讀取由視圖模塊(JSP)傳遞出來(lái)的業(yè)務(wù)流程的 最終結(jié)果。
接著再分析電子政務(wù)系統(tǒng)架構(gòu)圖中其他組件的具體實(shí)現(xiàn):
(1)表示層。在該系統(tǒng)架構(gòu)中,表示層實(shí)際包含了Struts框架中的兩個(gè)層次結(jié)構(gòu):控制層 和視圖層。控制層是使用中央控制器(ActionServlet)和處理器(Action)實(shí)現(xiàn),視圖層 則是使用JSP實(shí)現(xiàn)。表示層中的處理器表單(ActionForm)本質(zhì)上是一種JavaBean,是專門用 來(lái)傳遞表單數(shù)據(jù)的DTO(Data Transfer Object),它包括用于表單數(shù)據(jù)驗(yàn)證的validate() 方法和用于數(shù)據(jù)復(fù)位的reset()方法。在表示層的設(shè)計(jì)中,嚴(yán)格遵照MVC模式設(shè)計(jì)系統(tǒng),頁(yè)面中需要的數(shù)據(jù)均由控制層傳遞,用戶提交的業(yè)務(wù)請(qǐng)求和數(shù)據(jù)都是通過(guò)控制層處理,訪問(wèn)合法 性判斷、頁(yè)面跳轉(zhuǎn)、響應(yīng)用戶請(qǐng)求等工作也是由控制層完成;視圖層負(fù)責(zé)顯示模型的數(shù)據(jù)、 接受模型的數(shù)據(jù)更新通知更新視圖、接受用戶輸入的數(shù)據(jù)傳送給中央控制器和接受處理器處 理后的結(jié)果傳送給系統(tǒng)界面,將控制層和視圖層代碼分離。表示層具體實(shí)現(xiàn)的流程如圖4。
(2)業(yè)務(wù)層。業(yè)務(wù)層是電子政務(wù)系統(tǒng)的核心,負(fù)責(zé)處理繁瑣復(fù)雜的日常事務(wù)和工作流 事務(wù),并根據(jù)業(yè)務(wù)需求進(jìn)行動(dòng)態(tài)擴(kuò)展,同時(shí)業(yè)務(wù)層還為表示層組件提供必要的接口服務(wù),本 系統(tǒng)使用Spring管理bean的機(jī)制。具體的實(shí)現(xiàn)流程是:當(dāng)業(yè)務(wù)請(qǐng)求流轉(zhuǎn)到業(yè)務(wù)層時(shí),模型層 (JavaBean、EJB)負(fù)責(zé)與工作流引擎(JBPM)連接,把業(yè)務(wù)請(qǐng)求傳送到JBPM進(jìn)行業(yè)務(wù)流轉(zhuǎn), 流程定義文件通過(guò)JBPM流程解析器解析進(jìn)入工作流引擎的核心完成業(yè)務(wù)流轉(zhuǎn)的具體實(shí)現(xiàn)。業(yè) 務(wù)流程實(shí)現(xiàn)后將結(jié)果返回模型層,模型層再返回給表示層中的Action。在JBPM流程運(yùn)轉(zhuǎn)中, 模型層還負(fù)責(zé)與持久層通信,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的調(diào)用。
(3)持久層。本文所描述的系統(tǒng)采用了輕量級(jí)O/R Mapping工具-Hibernate,進(jìn)行數(shù)據(jù) 持久化的工作。實(shí)例中只要把對(duì)象的屬性抽象出來(lái),Hibernate就會(huì)根據(jù)映射文件自動(dòng)將對(duì) 象映射到基于SQL的關(guān)系模型數(shù)據(jù)結(jié)構(gòu)中去,則在使用JBPM的時(shí)候可以不用考慮數(shù)據(jù)持久化 操作的具體實(shí)現(xiàn)細(xì)節(jié),而只專注于流程的設(shè)計(jì),并且業(yè)務(wù)中需要保存和修改的信息都將會(huì)實(shí) 時(shí)的在數(shù)據(jù)庫(kù)中更新,保證了整個(gè)數(shù)據(jù)系統(tǒng)數(shù)據(jù)一致。這些特性使Hibernate 為電子政務(wù)系 統(tǒng)提供良好的持久層支持環(huán)境。
5 結(jié)束語(yǔ)
本文創(chuàng)新點(diǎn):JBPM系統(tǒng)的過(guò)程建模技術(shù)結(jié)合了UML活動(dòng)圖和狀態(tài)圖的技術(shù),能實(shí)現(xiàn)并提 高電子政務(wù)系統(tǒng)的可視化設(shè)計(jì),并且,作為當(dāng)今市場(chǎng)上擴(kuò)展性能最好的開(kāi)源工作流引擎,為 電子政務(wù)系統(tǒng)的升級(jí)奠定了堅(jiān)實(shí)的基礎(chǔ)。故基于開(kāi)源工作流引擎JBPM構(gòu)建電子政務(wù)系統(tǒng),既 節(jié)省了軟件開(kāi)發(fā)費(fèi)用又提高了政務(wù)系統(tǒng)的性能。