國網(wǎng)安徽省電力公司淮北供電公司 梁后健 李孝天 胡賀軍
JAVA工作流引擎的開發(fā)和設(shè)計
國網(wǎng)安徽省電力公司淮北供電公司 梁后健 李孝天 胡賀軍
工作流在業(yè)務(wù)開發(fā)中占據(jù)了重要的地位,而工作流系統(tǒng)的核心部件就是工作流引擎,直接影響著系統(tǒng)質(zhì)量。信息技術(shù)在不斷的發(fā)展,在企業(yè)工作中,辦公自動化系統(tǒng)應(yīng)用越來越廣泛,這也是企業(yè)現(xiàn)代化水平的重要衡量標(biāo)準(zhǔn)。工作流技術(shù)在應(yīng)用中較為深入,出現(xiàn)了很多工作流產(chǎn)品的變更,但是缺少靈活性和適應(yīng)性,因此這一問題不可忽視。本文從技術(shù)背景入手,具體闡述JAVA工作流引擎的開發(fā)和設(shè)計,希望本文的研究對相關(guān)工作有所幫助。
JAVA;工作流;工作流引擎;開發(fā);設(shè)計
目前工作流系統(tǒng)較為普遍,應(yīng)用也較為廣泛,市場用戶數(shù)量較多,不過目前相關(guān)的工作流產(chǎn)品還很難在各個領(lǐng)域?qū)崿F(xiàn)流通,也很難滿足市場用戶的各種需求。面對客戶需求越來越特殊,工作流系統(tǒng)也得到了普及,工作流引擎在很多的企業(yè)中都已經(jīng)實現(xiàn)了應(yīng)用,開展了具有企業(yè)特色的工作流系統(tǒng),也能滿足不同用戶的特殊需求。
JAVA是一種程序設(shè)計語言,在互聯(lián)網(wǎng)、數(shù)據(jù)中心、PC端等應(yīng)用極為普遍,通用性和安全性能優(yōu)異。JAVA和一般的程序語言不同,屬于一種開放性語言,各個軟件相互兼容,可以面向?qū)ο筮M(jìn)行多線程動態(tài)分布。
工作流一詞來源于英語單詞Work fl ow,產(chǎn)生于生產(chǎn)辦公自動化領(lǐng)域,提出這一概念,主要是將整體性的工作進(jìn)行分解,分解成為一個個的子任務(wù),按照一定的規(guī)則進(jìn)行各個子任務(wù)完成情況監(jiān)控,有效的提高任務(wù)完成效率,也能明顯降低生產(chǎn)成本,提高企業(yè)的生產(chǎn)水平,簡單來說,工作流就是企業(yè)業(yè)務(wù)流程的自動化。
工作流引擎能為工作流提供必要的運(yùn)行環(huán)境和服務(wù),這也就是“引擎”,具體來說,工作流引擎可以控制整個工作的運(yùn)行過程,并且進(jìn)行相應(yīng)的過程定義,同時,可以對各個活動進(jìn)行操作和解釋的轉(zhuǎn)換,在用戶和應(yīng)用之間傳遞工作流控制相關(guān)數(shù)據(jù),提供工作流操作界面,實現(xiàn)對工作流操作的管理和監(jiān)督。
JAVA工作流引擎是一種能為工作流提供必要環(huán)境和服務(wù)的引擎,功能較為突出,如圖1所示。
圖1 JAVA工作流引擎總體架構(gòu)示意圖
如圖所示,這是本文提出的JAVA工作流引擎的整體架構(gòu),在其中準(zhǔn)確描述了工作流引擎在整個系統(tǒng)中的功能以及具體的工作方式。引擎核心是流程中央控制器,能控制系統(tǒng)的各個組件,實現(xiàn)核心路由的功能,也能通過對子系統(tǒng)的功能限定,進(jìn)行數(shù)據(jù)的存儲和處理。引擎接口可以對流程進(jìn)行重新定義,實現(xiàn)對流程的整體維護(hù)和管理。在引擎核心的設(shè)計上,可以從產(chǎn)品的具體需求和模型建設(shè)角度進(jìn)行處理,確定不同的管理器,展現(xiàn)不同的功能,而利用一個JAVA工作流引擎管理器就可以實現(xiàn)對所有管理器的控制,這樣能展現(xiàn)出JAVA工作流引擎的功能,也方便了企業(yè)管理工作。
工作流模型是工作流實現(xiàn)的重要前提,這也是對業(yè)務(wù)處理的重要基礎(chǔ),能將企業(yè)工作業(yè)務(wù)進(jìn)行抽象處理,并且借助計算機(jī)用一種全新的方式表達(dá)出來。
(1)設(shè)計對象模型
在編輯程序的過程中,最為重要的就是找到對象,根據(jù)具體的需求,將具體的概念轉(zhuǎn)化成為對象模型。設(shè)計對象模型,更加方便工作流操作執(zhí)行,而工作流的操作執(zhí)行的開始和結(jié)束就是這些對象之間相互處理的結(jié)果。
(2)設(shè)計數(shù)據(jù)模型
根據(jù)不同類型的JAVA工作流引擎可以選擇不同的數(shù)據(jù)模型。在機(jī)構(gòu)模型選擇條件下,可以確定法企業(yè)或者各個部門之間的組織結(jié)構(gòu)關(guān)系,展現(xiàn)了企業(yè)內(nèi)部的人員結(jié)構(gòu)規(guī)劃,也能分析JAVA工作流引擎中的各種控制數(shù)據(jù)。根據(jù)數(shù)據(jù)模型的要求,可以對企業(yè)的關(guān)鍵業(yè)務(wù)進(jìn)行更為準(zhǔn)確細(xì)致的描述,也能根據(jù)數(shù)據(jù)模型的要求,選擇不同的業(yè)務(wù)規(guī)則,這樣重新定義雙方關(guān)系結(jié)構(gòu)。
從工作流引擎的定義來看,能為工作流提供必要的運(yùn)行環(huán)境和服務(wù),在其中提供了必要的工作流定義和相關(guān)活動,針對JAVA工作流引擎的各種功能,具體闡述JAVA工作流引擎關(guān)鍵技術(shù)的實現(xiàn)。
JAVA工作流引擎在關(guān)鍵算法和技術(shù)要點(diǎn)都集中在算法設(shè)計上,工作流系統(tǒng)本身很可能出現(xiàn)業(yè)務(wù)流程規(guī)則上的問題,而業(yè)務(wù)流轉(zhuǎn)就可以借助路由算法來實現(xiàn)。工作流系統(tǒng)可以按照預(yù)先設(shè)定好的業(yè)務(wù)流程規(guī)則進(jìn)行自動流轉(zhuǎn),而根據(jù)路由算法的不同進(jìn)行不同的判斷,路由算法的功能和路由其這一硬件設(shè)備基本相同,其質(zhì)量直接決定這工作流系統(tǒng)的運(yùn)轉(zhuǎn)情況。工作流模式較多,而對于不同的建模語言進(jìn)行處理,很難具體確定哪一種模式。根據(jù)事務(wù)執(zhí)行模式的不同,可以選擇不同的工作流模式,常見的工作流模式如表1所示。
表1 常見工作流模式表
本次JAVA工作流引擎設(shè)計選擇的為并發(fā)聚合路由。
數(shù)據(jù)模型數(shù)據(jù)提供源為過程定義工具,流程定義完成之后,相關(guān)的信息都會存儲在工作流數(shù)據(jù)庫中,這也就是過程定義的職能,然后JAVA工作流引擎就可以進(jìn)行后續(xù)操作。JAVA工作流引擎可以算是一個抽象接口,直接與數(shù)據(jù)模型相連。
JAVA工作流引擎流程控制器是流程控制管理的核心輔助對象,對于流程進(jìn)行全新的解釋,而各個節(jié)點(diǎn)和路由算法可以進(jìn)行全新的調(diào)度實現(xiàn),這也是其核心內(nèi)容,通過核心節(jié)點(diǎn)可以實現(xiàn)對其他節(jié)點(diǎn)的調(diào)度。JAVA工作流引擎權(quán)限控制管理器可以實現(xiàn)工作流角色和系統(tǒng)角色關(guān)系的處理,借助工作流引擎核心的功能進(jìn)行權(quán)限的解釋,這樣就可以改變其運(yùn)行結(jié)果,進(jìn)行引擎優(yōu)化。
(1)事務(wù)機(jī)制方法
在應(yīng)用系統(tǒng)開發(fā)過程中,事務(wù)是單個工作單元,需要重點(diǎn)考慮,每個步驟之間需要密切聯(lián)系,并且作為一個整體看待,這樣事務(wù)之間的每一個步驟都需要在上一個步驟成功之后方可繼續(xù)處理。根據(jù)事務(wù)處理的要求,兩個操作需要保持一致,都成功或者失敗,這樣才能滿足要求。
①事務(wù)屬性
從事務(wù)屬性來看,企業(yè)在應(yīng)用程序開發(fā)上,需要進(jìn)行全方位的數(shù)據(jù)訪問,而事務(wù)可以控制多個程序訪問相同的數(shù)據(jù),協(xié)調(diào)管理數(shù)據(jù)訪問過程,根據(jù)客戶的需求,可以選擇對數(shù)據(jù)的不同處理方式,無論是讀取還是寫入,都可以根據(jù)用戶需求進(jìn)行。
②事務(wù)協(xié)議
在階段初始,和事務(wù)相關(guān)的所有信息資源都需要提前提交,而事務(wù)涉及到的資源還可以選擇一次就叫異常結(jié)束事務(wù)的機(jī)會。在事務(wù)執(zhí)行上,可以進(jìn)行兩個階段的處理,兩個階段本身就具有統(tǒng)一性,如果發(fā)送過來的資源出現(xiàn)的異常,那么整個事務(wù)都會取消,而資源不進(jìn)行更新的狀況下,事務(wù)會正常執(zhí)行。只有第一個階段沒有發(fā)生任何異常,第二個階段才能正常的開展。在這一狀況下,資源管理都可以進(jìn)行數(shù)據(jù)更新,而事務(wù)提交可以選擇不同的階段進(jìn)行,這時兩個階段之間的事務(wù)協(xié)議也就顯得極為重要。事務(wù)協(xié)議可以讓多個事務(wù)管理和資源管理都整合到一個事務(wù)中,這樣如果一個部分出現(xiàn)事務(wù)異常,那么所有事務(wù)都會回滾。
③事務(wù)控制
和之前的事務(wù)形式不同,新的事務(wù)控制可以選擇聲明式的事務(wù),可以讓組件自動參與其中,事務(wù)框架組件不會聲明事務(wù)的進(jìn)行狀況,可以借鑒這一內(nèi)容,程序員在編程控制上,直接控制邏輯,就可以減少編碼時間,這樣在事務(wù)優(yōu)化的時候,不需要直接改動源代碼,節(jié)省了很多編碼時間,也能避免客戶端程序出現(xiàn)誤差。這一事務(wù)控制類型,在應(yīng)用上效果較好,而且組件程序和應(yīng)用程序并不需要真正了解事務(wù)就可以進(jìn)行編程處理。目前在JAVA事務(wù)控制框架選擇上,聲明式事務(wù)經(jīng)過實踐之后能很好的支持企業(yè)應(yīng)用。
(2)異常處理方法
在JAVA工作流引擎工作過程中,會出現(xiàn)以下兩種異常情況:
①系統(tǒng)級日常
在出現(xiàn)網(wǎng)絡(luò)故障的時候,客戶端可以向服務(wù)器發(fā)送請求,而出現(xiàn)網(wǎng)絡(luò)崩潰的時候,很容易造成客戶端并不能準(zhǔn)確確定網(wǎng)絡(luò)崩潰的時間段,這樣客戶的判斷準(zhǔn)確度也就很難保障,并不知道客戶請求到底是在服務(wù)器處理之前還是處理之后的信息傳遞過程出現(xiàn)網(wǎng)絡(luò)故障,也不能判斷數(shù)據(jù)庫中數(shù)據(jù)是否經(jīng)過修改。網(wǎng)絡(luò)故障是較為常見的故障形式,但是并不是唯一的故障形式,數(shù)據(jù)庫自身也能發(fā)生崩潰故障,而數(shù)據(jù)庫出現(xiàn)問題的時候,在數(shù)據(jù)的寫入上就會出現(xiàn)偏差,影響到數(shù)據(jù)庫的正常處理。
②應(yīng)用級異常
在用戶訪問上,不同的分布可以有不同的結(jié)構(gòu)表現(xiàn),而如果多個用戶同時訪問同一個數(shù)據(jù)庫的時候,很容易出現(xiàn)記錄上的沖撞,而如果兩個用戶都更改產(chǎn)品記錄,不適用事務(wù)的時候就會造成數(shù)據(jù)的存儲出現(xiàn)問題。只要應(yīng)用事務(wù),那么兩個數(shù)據(jù)就會發(fā)生排斥,這樣就會讓數(shù)據(jù)庫在操作上保持唯一,保證數(shù)據(jù)庫數(shù)據(jù)完整統(tǒng)一。在特定的邏輯狀態(tài)下,根據(jù)特定的需求出現(xiàn)系統(tǒng)異常,發(fā)生邏輯錯誤的時候,程序員在運(yùn)行上很容易出現(xiàn)異常。這些異常方式都會造成JAVA工作流引擎系統(tǒng)出現(xiàn)異常。
綜上所述,借助工作流模型可以確定其核心內(nèi)容,也就是工作流引擎的實現(xiàn),在JAVA體系結(jié)構(gòu)平臺下,采取全新的技術(shù)架構(gòu)方式,可以完成JAVA工作流引擎核心技術(shù)。工作流管理系統(tǒng)較為復(fù)雜,其核心內(nèi)容JAVA工作流引擎更加復(fù)雜,在開發(fā)設(shè)計上,架構(gòu)更加清晰,實現(xiàn)也更加方便,應(yīng)用效果良好,關(guān)鍵步驟基本上得以實現(xiàn),在未來還有很大的發(fā)展空間。
[1]王瑾.J2EE開發(fā)環(huán)境下的輕量級工作流引擎構(gòu)件的設(shè)計與實現(xiàn)[J].科技創(chuàng)新導(dǎo)報,2008,36:39.
[2]袁雄偉,鐘寶榮.Spring MVC框架下公文審批中應(yīng)用JBPM工作流引擎[J].信息系統(tǒng)工程,2013,03:88-90.
[3]陳思蒙,譚慧敏.基于工作流引擎構(gòu)建高等學(xué)校本科專業(yè)設(shè)置預(yù)測系統(tǒng)[J].沈陽師范大學(xué)學(xué)報(自然科學(xué)版),2015,04:555-558.
[4]譚善偉,唐軍.基于SSI架構(gòu)的建筑質(zhì)量監(jiān)督系統(tǒng)的設(shè)計與實現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2017,02:100-101+104.