胡杰+胡欣宇
摘 要:針對(duì)企業(yè)應(yīng)用系統(tǒng)URAP平臺(tái)與工作流系統(tǒng)集成中的數(shù)據(jù)通信問題,文中采用基于數(shù)據(jù)交換中間件技術(shù)的系統(tǒng)通信方法,降低系統(tǒng)之間通信的復(fù)雜度,提高整合系統(tǒng)的數(shù)據(jù)交換能力,有效解決了URAP系統(tǒng)與工作流整合后引起的無法通信問題,避免了集成對(duì)原URAP系統(tǒng)結(jié)構(gòu)的破壞和代碼的入侵。
關(guān)鍵詞:數(shù)據(jù)中間件;工作流;組件;URAP
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2017)03-00-03
0 引 言
工作流技術(shù)指“業(yè)務(wù)過程的部分或整體在計(jì)算機(jī)應(yīng)用環(huán)境下的自動(dòng)化”。是對(duì)工作流程及其各操作步驟之間業(yè)務(wù)規(guī)則的抽象、概括描述,主要用于分析、模擬、定義以及操作實(shí)現(xiàn)企業(yè)的業(yè)務(wù)過程,是實(shí)現(xiàn)企業(yè)業(yè)務(wù)過程管理和控制、過程集成、過程重組的核心技術(shù),為實(shí)現(xiàn)某個(gè)業(yè)務(wù)目標(biāo),在多個(gè)參與者之間利用計(jì)算機(jī)按某種預(yù)定規(guī)則自動(dòng)傳遞。其主要特點(diǎn)是使工作處理過程自動(dòng)化、整合化、智能化,使人以及各種應(yīng)用工具之間相互協(xié)調(diào)工作,實(shí)現(xiàn)數(shù)據(jù)整合和數(shù)據(jù)統(tǒng)計(jì),消除信息孤島,在恰當(dāng)?shù)臅r(shí)間執(zhí)行正確的操作[1-4]。但目前的工作流產(chǎn)品還不能獨(dú)立應(yīng)用于企業(yè),只有與相應(yīng)的應(yīng)用系統(tǒng)相結(jié)合,才能發(fā)揮更好的作用。當(dāng)下應(yīng)用系統(tǒng)的差異性和多樣性使得工作流系統(tǒng)和應(yīng)用系統(tǒng)難以實(shí)現(xiàn)平滑整合,往往因?yàn)榉椒ú划?dāng)導(dǎo)致系統(tǒng)高耦合,容易造成對(duì)原系統(tǒng)結(jié)構(gòu)的破壞,降低了系統(tǒng)的靈活性和可擴(kuò)展性,增加了維護(hù)難度[5]。
文獻(xiàn)[6]提出了基于AOP工作流系統(tǒng)和企業(yè)信息系統(tǒng)的集成方法,通過采用AOP技術(shù),避免了在集成過程中對(duì)企業(yè)原有應(yīng)用系統(tǒng)的侵入,提高了應(yīng)用系統(tǒng)的重用性。文獻(xiàn)[7]提出了基于IoC模式的工作流與應(yīng)用系統(tǒng)的集成方法,通過IoC容器轉(zhuǎn)移組件間的依賴,在運(yùn)行時(shí)動(dòng)態(tài)注入,需要改變依賴時(shí)只需修改依賴關(guān)系描述文件,減少了硬編碼數(shù)量,極大地提高了組件的重用,使整個(gè)系統(tǒng)的靈活性和可擴(kuò)展性大大提高。
通用資源應(yīng)用平臺(tái)(Universal Resources Application Platform,URAP)基礎(chǔ)業(yè)務(wù)平臺(tái)是一個(gè)符合MVC模型的面向知識(shí)工程的多層服務(wù)構(gòu)架的應(yīng)用框架,是為解決應(yīng)用軟件開發(fā)過程中軟件過程管理問題,軟件質(zhì)量問題,資源積累問題和軟件集成問題,并為提高軟件開發(fā)質(zhì)量、軟件開發(fā)效率,以便快速形成應(yīng)用系統(tǒng),使軟件開發(fā)過程中的各關(guān)鍵部分標(biāo)準(zhǔn)化、規(guī)范化、可視化而建立的一套軟件基礎(chǔ)設(shè)施。隨著企業(yè)的快速發(fā)展,迫切需要對(duì)業(yè)務(wù)流程進(jìn)行有效控制和管理,目前,工作流技術(shù)是實(shí)現(xiàn)企業(yè)業(yè)務(wù)過程管理和控制、過程集成、過程重組且應(yīng)用最廣泛、最高效的核心技術(shù)。
參考文獻(xiàn)[5-7]中提出的集成方法主要針對(duì)具體的企業(yè)信息應(yīng)用平臺(tái),但對(duì)于特定通信方式的應(yīng)用系統(tǒng),直接嵌入工作流系統(tǒng)將導(dǎo)致系統(tǒng)間數(shù)據(jù)無法交互的問題出現(xiàn),很難實(shí)現(xiàn)平滑通信。本文采用嵌入式集成模式實(shí)現(xiàn)工作流系統(tǒng)與URAP平臺(tái)的集成,針對(duì)集成后系統(tǒng)間無法通信的問題,提出了一種基于數(shù)據(jù)交互中間件實(shí)現(xiàn)系統(tǒng)之間通信的方法,該方法對(duì)系統(tǒng)間交換數(shù)據(jù)的結(jié)構(gòu)進(jìn)行了封裝,并采用統(tǒng)一的數(shù)據(jù)傳輸格式,提供了一種系統(tǒng)間數(shù)據(jù)交換的機(jī)制。
1 系統(tǒng)集成模式問題分析
根據(jù)應(yīng)用系統(tǒng)和工作流管理系統(tǒng)的關(guān)系,目前可以將工作流管理系統(tǒng)分為嵌入式系統(tǒng)和自治式系統(tǒng)兩大類。嵌入式工作流系統(tǒng)將工作流系統(tǒng)嵌入在應(yīng)用程序中,通過應(yīng)用程序調(diào)用WAPI(Workflow API)來實(shí)現(xiàn)流程控制,是流程控制和管理模塊的基礎(chǔ)構(gòu)件[8];自治式工作流系統(tǒng)具有獨(dú)立的數(shù)據(jù)庫(DB)和消息中間件機(jī)制,將應(yīng)用系統(tǒng)中所有的業(yè)務(wù)處理功能作為外部應(yīng)用來調(diào)用。
在自治式工作流系統(tǒng)集成模式中,在工作流系統(tǒng)與業(yè)務(wù)應(yīng)用系統(tǒng)的交互方式上,工作流引擎直接調(diào)用外部業(yè)務(wù)應(yīng)用提供遠(yuǎn)程接口(如基于RMI,Web Service的業(yè)務(wù)接口),以遠(yuǎn)程調(diào)用方式提供WAPI[9,10]。自治式工作流系統(tǒng)的集成模式如圖1所示。工作流引擎通過流程中的設(shè)定代理觸發(fā)調(diào)用應(yīng)用系統(tǒng),應(yīng)用系統(tǒng)通過WAPI訪問和驅(qū)動(dòng)工作流引擎。
自治式工作流系統(tǒng)自身就是一個(gè)單獨(dú)的應(yīng)用系統(tǒng),如果不基于某個(gè)中間件技術(shù),自治式工作流引擎必須自己實(shí)現(xiàn)網(wǎng)路通信處理、多線程同步等服務(wù)端技術(shù),實(shí)現(xiàn)的技術(shù)復(fù)雜、成本高,集成能力受到代理方式的限制。結(jié)合自治式工作流系統(tǒng)集成模式自身的缺點(diǎn)和URAP平臺(tái)自身的特點(diǎn),本文采用嵌入式工作流系統(tǒng)集成模式。
嵌入式工作流引擎部署在應(yīng)用系統(tǒng)中,不能單獨(dú)運(yùn)行,它作為應(yīng)用系統(tǒng)的組件,用于控制企業(yè)流程的執(zhí)行順序和流程狀態(tài)等,因此通過調(diào)用本地方法實(shí)現(xiàn)工作流集成,如圖2所示。
(1) 組件擴(kuò)展:通過調(diào)用工作流接口實(shí)現(xiàn)流程驅(qū)動(dòng)并由流程組件擴(kuò)展原有業(yè)務(wù)組件。顯示組件訪問特定流程組件,實(shí)現(xiàn)對(duì)已有系統(tǒng)增加工作流管理的功能。
(2) 工作流擴(kuò)展:業(yè)務(wù)組件為工作流擴(kuò)展中的最小功能點(diǎn),由工作流引擎直接驅(qū)動(dòng)工作流代理的流程組件。顯示層組件直接訪問工作流接口,適合面向流程的應(yīng)用系統(tǒng)開發(fā)。
這兩種擴(kuò)展方式各有其優(yōu)缺點(diǎn),組件擴(kuò)展適合業(yè)務(wù)組件不能確保都滿足工作流原子的事務(wù)約定,而工作流擴(kuò)展適合于設(shè)計(jì)按照工作流標(biāo)準(zhǔn)組織(WfMC)制定的標(biāo)準(zhǔn)系統(tǒng)。
針對(duì)URAP系統(tǒng)的特點(diǎn)采用嵌入式工作流系統(tǒng)集成模式組件擴(kuò)展的方式,將工作流集成到URAP系統(tǒng)中,集成過程通過數(shù)據(jù)交換中間件實(shí)現(xiàn)系統(tǒng)之間的平滑通信,實(shí)現(xiàn)流程控制的自動(dòng)化,支持企業(yè)定制和快速實(shí)施。
2 數(shù)據(jù)交換中間件技術(shù)研究與實(shí)現(xiàn)
2.1 數(shù)據(jù)交換中間件技術(shù)分析與研究
數(shù)據(jù)中間件是信息系統(tǒng)平臺(tái)中用于封裝及組織數(shù)據(jù)的組件,用于應(yīng)用系統(tǒng)內(nèi)各層之間以及各應(yīng)用系統(tǒng)之間的數(shù)據(jù)傳輸及交換[11]。Udata是URAP平臺(tái)和工作流系統(tǒng)采用的統(tǒng)一數(shù)據(jù)傳輸結(jié)構(gòu)。該數(shù)據(jù)結(jié)構(gòu)對(duì)系統(tǒng)間交換數(shù)據(jù)的格式進(jìn)行了封裝,為程序間數(shù)據(jù)交換提供了一種機(jī)制和標(biāo)準(zhǔn),是應(yīng)用平臺(tái)與工作流系統(tǒng)運(yùn)作的通信基礎(chǔ);系統(tǒng)自動(dòng)實(shí)現(xiàn)封包解包工作,完全屏蔽了底層數(shù)據(jù)的交換細(xì)節(jié),開發(fā)人員不用關(guān)心具體的數(shù)據(jù)交換機(jī)制,只需把精力集中于業(yè)務(wù)數(shù)據(jù)的組織,這樣便實(shí)現(xiàn)了數(shù)據(jù)交換的模塊化和靈活性。JSP前端頁面與Service后臺(tái)應(yīng)用間交互、后臺(tái)應(yīng)用之間數(shù)據(jù)交互均采用數(shù)據(jù)結(jié)構(gòu)為Udata的標(biāo)準(zhǔn)數(shù)據(jù)交換,如圖3所示。
一個(gè)Udata由屬性區(qū)和若干數(shù)據(jù)塊區(qū)(UdBlock)組成,在屬性區(qū)可以設(shè)置Udata的相關(guān)屬性。每個(gè)數(shù)據(jù)塊區(qū)(UdBlock)相當(dāng)于一個(gè)按行列組織的二維數(shù)組,以行號(hào)和列名為關(guān)鍵字檢索數(shù)據(jù)。每個(gè)數(shù)據(jù)塊的列信息由獨(dú)立的UdColumn對(duì)象描述。每個(gè)數(shù)據(jù)塊有自己的屬性區(qū),可以設(shè)置該塊的屬性信息。數(shù)據(jù)交換中間件由標(biāo)準(zhǔn)屬性區(qū)、擴(kuò)展屬性區(qū)及數(shù)據(jù)塊集合區(qū)構(gòu)成。標(biāo)準(zhǔn)屬性區(qū)以鍵/值對(duì)形式存放數(shù)據(jù)集的標(biāo)準(zhǔn)屬性,只有統(tǒng)一信息系統(tǒng)平臺(tái)定義的數(shù)據(jù)集標(biāo)準(zhǔn)屬性才能存放在標(biāo)準(zhǔn)屬性區(qū),用戶自定義屬性(即擴(kuò)展屬性)無法存放在該區(qū)中;擴(kuò)展屬性區(qū)以鍵/值對(duì)形式存放用戶自定義的擴(kuò)展屬性;數(shù)據(jù)塊集合區(qū),存放數(shù)據(jù)塊集合。
數(shù)據(jù)交互中間件結(jié)構(gòu)圖如圖4所示。
數(shù)據(jù)塊是數(shù)據(jù)交換中間件中用于組織類似表結(jié)構(gòu)數(shù)據(jù)的單元,數(shù)據(jù)塊由標(biāo)準(zhǔn)屬性區(qū)、擴(kuò)展屬性區(qū)、列定義區(qū)及數(shù)據(jù)區(qū)構(gòu)成。標(biāo)準(zhǔn)屬性區(qū)以鍵/值對(duì)形式存放數(shù)據(jù)集的標(biāo)準(zhǔn)屬性,只有統(tǒng)一信息系統(tǒng)平臺(tái)定義的數(shù)據(jù)塊標(biāo)準(zhǔn)屬性才能存放在標(biāo)準(zhǔn)屬性區(qū),用戶自定義屬性(即擴(kuò)展屬性)無法存放在該區(qū)中; 擴(kuò)展屬性區(qū),以鍵/值對(duì)形式存放用戶自定義的擴(kuò)展屬性; 列定義區(qū),存放數(shù)據(jù)列定義集合; 數(shù)據(jù)區(qū),存放數(shù)據(jù)行(即具體的數(shù)據(jù))集合。
2.2 數(shù)據(jù)交換中間件的實(shí)現(xiàn)
Udata主要包含Udata、UdBlock、UdBlockMeta和UdColumn四個(gè)對(duì)象,對(duì)象間的相互關(guān)系為:一個(gè)Udata對(duì)象包含若干個(gè)UdBlock對(duì)象;一個(gè)UdBlock對(duì)象代表一個(gè)數(shù)據(jù)塊。其中包含一個(gè)UdBlockMeta對(duì)象用以描述該數(shù)據(jù)塊中相關(guān)數(shù)據(jù)的列信息;包含一個(gè)list對(duì)象描述該數(shù)據(jù)塊中的所有數(shù)據(jù)。list中的每一行數(shù)據(jù)以Map結(jié)構(gòu)表示;一個(gè)UdBlockMeta對(duì)象代表列的集合。用以描述UdBlock對(duì)象對(duì)應(yīng)的數(shù)據(jù)塊的所有列信息。其中包含若干個(gè)UdColumn對(duì)象;一個(gè)UdColumn對(duì)象代表一個(gè)列。用以描述數(shù)據(jù)塊的具體列信息。
根據(jù)Udata數(shù)據(jù)結(jié)構(gòu)的特點(diǎn),平臺(tái)采用三段式規(guī)則對(duì)一個(gè)數(shù)據(jù)進(jìn)行存取、傳輸和解析:blockId-rowNum-columnName(指定塊名-指定行號(hào)-指定列名) 。數(shù)據(jù)交互中間件Udata部分接口如圖5所示。
按照標(biāo)準(zhǔn)的MVC模式以及目前主流的J2EE開發(fā)框架,一般分為JSP,Service,Dao三個(gè)層次。JSP前端將數(shù)據(jù)提交后臺(tái)會(huì)根據(jù)相關(guān)約定規(guī)則自動(dòng)封裝成Udata數(shù)據(jù)結(jié)構(gòu)并交給相應(yīng)的應(yīng)用程序進(jìn)行處理,應(yīng)用程序?qū)⑻幚硗瓿珊蟮臄?shù)據(jù)再次封裝為Udata格式的信息返回前臺(tái)響應(yīng),前臺(tái)根據(jù)Udata格式的信息自動(dòng)渲染成相應(yīng)的響應(yīng)頁面。Service屬于后臺(tái),主要功能是對(duì)外界提供所有函數(shù)的input與output參數(shù)封裝為Udata數(shù)據(jù)格式。通過Udata數(shù)據(jù)結(jié)構(gòu)來規(guī)范Service的input與output操作,有利于應(yīng)用系統(tǒng)對(duì)Service的集中靈活調(diào)度,避免用戶花費(fèi)更多的精力在Service的內(nèi)部邏輯中。嵌入式集成系統(tǒng)層次結(jié)構(gòu)如圖6所示。
開發(fā)者可以利用平臺(tái)提供的豐富頁面套件及標(biāo)簽庫完成JSP的編寫。
JSP頁面交互的數(shù)據(jù)統(tǒng)一約定為Udata格式,方法的輸入?yún)?shù)和返回參數(shù)均以Udata對(duì)象作為標(biāo)準(zhǔn),例如:
Udata info = (Udata) request.getAttribute(“id”);
public Udata jobCreate(Udata Udata); //根據(jù)傳入的信息,創(chuàng)建任務(wù)
public Udata jobExecute(Udata Udata); //根據(jù)指定的任務(wù)信息,立即啟動(dòng)任務(wù)的執(zhí)行
public Udata startACParamJob(Udata inInfo);//根據(jù)傳入的作業(yè)信息啟動(dòng)其執(zhí)行
在JSP頁面中引入urap.core.ei.*和/tlds/EF.tld標(biāo)簽就可調(diào)用數(shù)據(jù)交換中間件中的方法; Service是使用URAP時(shí)應(yīng)用關(guān)注的主要部分。開發(fā)人員通過編寫Service來實(shí)現(xiàn)業(yè)務(wù)邏輯。
public class ServiceEE11 extends ServiceEPBase {
public Udata query(Udata inInfo) {
//…… 業(yè)務(wù)邏輯……
}
}
其設(shè)計(jì)與具體業(yè)務(wù)關(guān)系極大,具體的劃分方法由設(shè)計(jì)人員自行決定,但劃分的基礎(chǔ)不可超過本模塊的邊界。在項(xiàng)目中,若無例外情況,則Service的劃分和服務(wù)范圍可以模塊或頁面為單位,提供一個(gè)與“界面功能代號(hào)”對(duì)應(yīng)的Service,進(jìn)行頁面的初始化載入處理。對(duì)Service類中處理頁面功能的方法和進(jìn)行業(yè)務(wù)交互的方法的編寫要求是:方法的輸入?yún)?shù)為Udata對(duì)象,輸出參數(shù)為一個(gè)新的Udata對(duì)象。平臺(tái)提供了一個(gè)通用的Action(DispatchAction),頁面端的所有請(qǐng)求都可以通過DispathAction進(jìn)行服務(wù)調(diào)用轉(zhuǎn)發(fā),它將頁面提交的數(shù)據(jù)自動(dòng)組織成一個(gè)Udata對(duì)象,同時(shí)根據(jù)指定的ServiceName和MethodName動(dòng)態(tài)調(diào)用相應(yīng)的業(yè)務(wù)服務(wù)方法。在一般情況下應(yīng)用模塊無需專門設(shè)計(jì)Action,只需調(diào)用DispatchAction即可。public Udata initLoad(Udata inInfo) {…}接口調(diào)用適用于項(xiàng)目間調(diào)用和項(xiàng)目內(nèi)部一級(jí)模塊間的相互調(diào)用,接口交互的數(shù)據(jù)統(tǒng)一約定為Udata數(shù)據(jù)格式,接口方法的輸入?yún)?shù)和返回值類型均以Udata數(shù)據(jù)對(duì)象作為標(biāo)準(zhǔn),調(diào)用方法通過指定的svcName(服務(wù)名稱)和mthdName(方法名稱)進(jìn)行,采用SOAMng.call函數(shù)調(diào)用,被調(diào)用的函數(shù)采用設(shè)置Udata數(shù)據(jù)格式返回值的函數(shù)通知主調(diào)函數(shù),由主調(diào)函數(shù)根據(jù)返回Udata數(shù)據(jù)格式的狀態(tài)碼和自身的業(yè)務(wù)邏輯進(jìn)行事務(wù)處理。
3 結(jié) 語
本文針對(duì)工作流系統(tǒng)與URAP系統(tǒng)集成后無法正常通信的問題,提出一種基于數(shù)據(jù)中間件URAP平臺(tái)整合工作流的通信技術(shù)。該技術(shù)采用統(tǒng)一的數(shù)據(jù)傳輸結(jié)構(gòu)Udata,對(duì)系統(tǒng)間數(shù)據(jù)交換的結(jié)構(gòu)進(jìn)行了封裝,實(shí)現(xiàn)了與URAP平臺(tái)的良好通信,克服了系統(tǒng)間不能平滑通信的弊端,優(yōu)化了系統(tǒng)結(jié)構(gòu),提高了通信效率,促進(jìn)了URAP平臺(tái)中各模塊之間的交互和信息共享。
參考文獻(xiàn)
[1] WfMC.The workflow reference model[Z].1999.
[2] ZHOU Jian-tao, SHI Mei-lin , YE Xin-ming.State of arts & trends on flexible workflow technology[J].Computer Integrated Manufacturing Systems,2005,11(11):1501-1510.
[3] Construction Research Congress, West Lafayette, Indiana, United States: 2012[Z].
[4]侯志松,余周,馮啟高.工作流管理系統(tǒng)開發(fā)實(shí)錄-基于JBoss JPBM實(shí)現(xiàn)[M].北京:中國鐵道出版社,2010:196-246,284-297.
[5] C Kahraman.Research on the realization method of workflow engine in enterprise information management[J].Journal of Enterprise Information Management, 2013,24(4): 380-400
[6] LI Qing,WENJing qian,ZHAOMeng . Research on AOP—based integration of workflow system with enterprise information systems[J].Computer Integrated Manufacturing Systems,2006,12(3):401-406.
[7] ZHAO Hong-yi, MENG De-en. Research and design of workflow system integration based on SOA[J]. Modern Electronics Technique,2012,35(12):29-32.
[8] MUEHLEN M.Workflow classification:embedded&autonomous workflow management systems[Z].
[9]何建校.基于J2EE的嵌入式工作流引擎[J].微計(jì)算機(jī)信息,2006,22(20):28-30.
[10] Christoph Moenninghoff, Lale Umutlu, Christian Kloeters, et al. Workflow Efficiency of Two 1.5 T MR Scanners with and without an Automated User Interface for Head Examinations[J].Academic Radiology,2013,20(6):721-730.
[11]陳錦平.通信層數(shù)據(jù)交換中間件設(shè)計(jì)實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2013,34(3):955-959.
[12] Ao Limin, XD ZHU, W ZHOU.Integration of Workflow with Application System Based on Inversion of Control Pattern[J].Computer Engineering,2009,35(18):69-71.