雷平 禹熹 孟凱
關(guān)鍵詞:容器;調(diào)度;狀態(tài)轉(zhuǎn)換;任務(wù)驅(qū)動
1引言
本文提出一種可配置參數(shù)維護(hù)模型及其實(shí)現(xiàn)方法,應(yīng)用于多參數(shù)維護(hù)(如金融信息處理)領(lǐng)域。目前,參數(shù)維護(hù)形態(tài)主要包括單參數(shù)表維護(hù)、多參數(shù)表維護(hù)和級聯(lián)參數(shù)表維護(hù),以及所有形態(tài)之上的參數(shù)狀態(tài)機(jī)維護(hù)。
通過固定參數(shù)維護(hù)模型的解決方法,可以使維護(hù)流程獨(dú)立于表級維護(hù)之外,提高代碼復(fù)用率,保證流程的統(tǒng)一[1]。該方案使用了參數(shù)表結(jié)構(gòu),通過數(shù)據(jù)表字段簡單配置并根據(jù)配置數(shù)據(jù)實(shí)現(xiàn)語句的動態(tài)生成,再通過服務(wù)端回傳的配置信息動態(tài)繪制統(tǒng)一界面。該處理方法非常適用于新業(yè)務(wù)、新參數(shù)需求快速響應(yīng)的場景。
2設(shè)計(jì)思路及具體實(shí)現(xiàn)
參數(shù)維護(hù)是Web管理平臺的重要功能之一,其核心功能是為系統(tǒng)中的生產(chǎn)參數(shù)的查詢、新增、修改和刪除功能提供可視化,且利于操作界面維護(hù)。另外,需要為此操作任務(wù)實(shí)現(xiàn)統(tǒng)一的控制流程,使不同角色的業(yè)務(wù)運(yùn)維人員基于參數(shù)維護(hù)框架權(quán)限進(jìn)行控制。為實(shí)現(xiàn)參數(shù)操作任務(wù)的流程管理,且不影響生產(chǎn)中使用的參數(shù)數(shù)據(jù),整個參數(shù)維護(hù)流程是基于臨時表完成的。流程一般可以分為如下步驟:首先,通過直接錄入或者查詢后更改參數(shù)創(chuàng)建任務(wù);其次,參數(shù)在臨時表中實(shí)現(xiàn)復(fù)核、修改、生效等流程。而在生效流程中又分為三步:臨時表同步到正式表、發(fā)送生效的消息給其他子系統(tǒng)、其他子系統(tǒng)應(yīng)答。
詳細(xì)的參數(shù)維護(hù)流程如下:首先,由經(jīng)辦員創(chuàng)建新增任務(wù),對于錄入中的任務(wù)可反復(fù)發(fā)起修改,經(jīng)辦員此時可以查看任務(wù)詳細(xì)信息、正式表參數(shù)信息、修改任務(wù)權(quán)限等。經(jīng)辦員完成后提交該任務(wù),任務(wù)狀態(tài)為待復(fù)核。復(fù)核員在流程中發(fā)現(xiàn)有待復(fù)核的任務(wù)時,可查看任務(wù)中參數(shù)表詳細(xì)信息及任務(wù)信息,隨后可進(jìn)行任務(wù)復(fù)核操作,若復(fù)核不通過,任務(wù)重新流轉(zhuǎn)給經(jīng)辦員,狀態(tài)重新置為錄人中,供經(jīng)辦員重新修改該任務(wù)。若復(fù)核通過,生效員可提交生效任務(wù),任務(wù)進(jìn)入生效流程。生效員查詢到與正式表同步失敗的任務(wù),可發(fā)起重新同步操作,成功后系統(tǒng)會繼續(xù)自動同步其他子系統(tǒng)。同時,生效員也可以發(fā)起回退操作,此時任務(wù)會回退到復(fù)核失敗狀態(tài)。若查詢到與其他子系統(tǒng)同步失敗的任務(wù),可重新發(fā)起同步操作,成功后任務(wù)進(jìn)入同步成功狀態(tài)。另外,生效員還可以發(fā)起強(qiáng)制生效操作,此時狀態(tài)變更為生效成功。最后,所有任務(wù)都應(yīng)該是同步成功的狀態(tài),此時發(fā)起關(guān)閉任務(wù)操作,后臺會刪除該任務(wù)記錄、參數(shù)表的臨時記錄。若發(fā)起的是刪除任務(wù),也會物理刪除正式表中的參數(shù)信息[2]。
可配置參數(shù)維護(hù)模型主要包括兩大部分,如圖1所示。第一部分即前臺部分,采用Caimgorm輕量級框架,利用富客戶端技術(shù)實(shí)現(xiàn)。根據(jù)后臺Java應(yīng)用生成的XML數(shù)據(jù)接口,動態(tài)生成參數(shù)維護(hù)界面,完成參數(shù)主題域維護(hù)任務(wù)。對于不同的參數(shù)主題域或單表,只要后臺Java應(yīng)用根據(jù)Flex客戶端的不同請求生成不同的XML數(shù)據(jù),采用XML數(shù)據(jù)接口方式完全實(shí)現(xiàn)了前后臺解耦,為前后端實(shí)現(xiàn)提供多種選擇[3]。
任務(wù)列表頁面會顯示獲取的主題域信息,主要是當(dāng)前主題域及其不同狀態(tài)的任務(wù)統(tǒng)計(jì)信息,并提供相應(yīng)的操作人口。界面功能分類如下:任務(wù)處理狀態(tài)主要統(tǒng)計(jì)人工處理流程不同狀態(tài)下的任務(wù)數(shù)目:任務(wù)處理分類則查詢?nèi)蝿?wù)統(tǒng)計(jì)的分類標(biāo)簽,用于查詢對應(yīng)任務(wù)處理狀態(tài)的任務(wù):任務(wù)處理操作人口根據(jù)不同處理狀態(tài)任務(wù),在查詢出來后操作界面區(qū)提供不同的按鈕,便于后續(xù)任務(wù)處理操作。
基于框架的前端設(shè)計(jì)流程如圖2所示。在View層中定義了整個前臺框架的頁面繪制部分,包括框架視圖、查詢正式表視圖、任務(wù)信息視圖、任務(wù)列表視圖、任務(wù)操作欄視圖、詳細(xì)信息視圖、特殊展現(xiàn)視圖、自定義視圖等。視圖通過派發(fā)事件(Dispatch Event)與控制層交互。
在控制層,即通過前臺控制器FrontController來監(jiān)聽用戶的操作行為。在Caimgorm框架中,前臺控制器是事件的唯一監(jiān)聽者,并不進(jìn)行實(shí)際任務(wù)的操作,通過addCommand來確定管理事件(Event)與命令(Command)的映射關(guān)系。參數(shù)維護(hù)模型框架定義了任務(wù)控制器TaskController、參數(shù)控制器ParamController、配置類控制器ConfigController和界面跳轉(zhuǎn)類控制器SessionController。
命令層(Command)通過調(diào)用execute來負(fù)責(zé)處理事件。在參數(shù)框架中包括三大類命令:任務(wù)類(TaskCommand),如創(chuàng)建新增任務(wù)、修改任務(wù)、刪除任務(wù)、任務(wù)提交等;參數(shù)類(ParaCommand),如查詢臨時表、查詢正式表、新增臨時表記錄、修改臨時表記錄等;配置類(ConfigCommand),如獲取主題域信息、表配置信息、下拉框信息等。Command執(zhí)行時負(fù)責(zé)獲取數(shù)據(jù),通過委托給業(yè)務(wù)層Business Delegate類處理具體的業(yè)務(wù)邏輯數(shù)據(jù)獲取。
業(yè)務(wù)代理層(Business
Delegate)主要負(fù)責(zé)提供Command和Service所謂的無縫接口。BusinessDelegate匹配Service的名稱后會調(diào)用后臺Java接口,并返回結(jié)果給Command層,這時Command通過IResponder接口獲取返回的數(shù)據(jù),并更新定義好的Model,Model綁定于View,如此即完成了后臺結(jié)果返回至前臺的展示。
任務(wù)驅(qū)動的流程模型如圖3所示。在該模型中,整個參數(shù)維護(hù)模型均基于任務(wù)操作。首先,經(jīng)辦員可分別發(fā)起創(chuàng)建任務(wù)、修改任務(wù)、刪除任務(wù);復(fù)核員發(fā)起復(fù)核任務(wù):生效員則可分別發(fā)起生效任務(wù)、重新生效任務(wù)、強(qiáng)制生效任務(wù)以及強(qiáng)制成功任務(wù)。其調(diào)用邏輯方法類似,均由前臺Flex傳人flashVar:由主題域ID(subjectld)、表ID(tableld)、事件列表(eventlds)構(gòu)成,調(diào)用任務(wù)操作服務(wù)類TaskService.最后由XML處理類返回給前端Flex繪制。
參數(shù)表操作時的記錄狀態(tài)及轉(zhuǎn)換如圖4所示。在對參數(shù)表進(jìn)行新增、修改、刪除操作時,可以調(diào)用參數(shù)服務(wù)類ParameterService,通過其涵蓋的對應(yīng)操作方法類,再調(diào)用后端服務(wù)提供的操作方法,返回給前端結(jié)果[4]。對表級操作時,比較重要的是記錄狀態(tài)的變化。新增參數(shù)時,對于臨時表操作標(biāo)識為I(新增)時,無論用戶如何修改記錄,狀態(tài)都不會發(fā)生改變,始終為I。若用戶執(zhí)行刪除操作,將會導(dǎo)致記錄物理上的刪除,此情形不存在狀態(tài)的轉(zhuǎn)換。在修改參數(shù)(用戶創(chuàng)建修改任務(wù))時,會初始化所有存在的參數(shù),并將其記錄到臨時表中,同時標(biāo)記狀態(tài)為A(中間狀態(tài))。執(zhí)行修改操作時,在編輯參數(shù)界面點(diǎn)擊保存會觸發(fā)狀態(tài)變更,此時狀態(tài)會改為U,即使沒有修改值,只要點(diǎn)擊保存均會更改狀態(tài)為U。若此時對記錄參數(shù)進(jìn)行刪除操作,則會重新將記錄狀態(tài)標(biāo)記為D。創(chuàng)建刪除任務(wù)時,會直接標(biāo)記參數(shù)狀態(tài)為D,此狀態(tài)也為最終同步到正式表的狀態(tài)。
圖5描述了同步、生效的操作流程。在復(fù)核通過之后,生效人員進(jìn)入生效流程,并調(diào)用StartActiveTask接口觸發(fā)命令。由于存在批量的情況,此時將批量事件信息發(fā)送到容器的MDB消息中,狀態(tài)為暫時同步狀態(tài)。MDB收到消息后調(diào)用接口SyncTableService進(jìn)行同步正式表操作。此時,將任務(wù)狀態(tài)修改為生效中,調(diào)用SendParamMessageService接口發(fā)送生效消息報(bào)文給子系統(tǒng)。通過參數(shù)子系統(tǒng)應(yīng)答消息處理ParamForSubsysCaIIBack接口來進(jìn)行生效成功判斷,最終完成整個生效流程。
對整個參數(shù)維護(hù)流程進(jìn)行適當(dāng)?shù)臄U(kuò)展也很有必要。在實(shí)際的參數(shù)維護(hù)過程中由于復(fù)雜程序不一,往往需要在任何一個操作階段進(jìn)行附件操作。此時,據(jù)此采用通用接口的方式,在進(jìn)行創(chuàng)建新增任務(wù)、修改任務(wù)、刪除任務(wù)、新增表、修改表、刪除表、任務(wù)提交、任務(wù)復(fù)核、任務(wù)生效、任務(wù)同步、任務(wù)回退、任務(wù)關(guān)閉、任務(wù)強(qiáng)制成功、查詢表、同步表、特殊條件過濾、發(fā)送消息擴(kuò)展等行為時,提供執(zhí)行前、執(zhí)行后的方法供調(diào)用,使其具有高擴(kuò)展性,適用于特殊情形的表級維護(hù),如圖6所示。
3結(jié)論
本文提出了一種可配置參數(shù)維護(hù)模型,并給出了具體的實(shí)現(xiàn)方法。所述的方案具有如下顯著優(yōu)點(diǎn):模型采用富客戶端與后端通用接口應(yīng)用方案,具有良好的操作性和擴(kuò)展性。前后臺數(shù)據(jù)交互基于標(biāo)準(zhǔn)XML格式,流程管理模塊采用參數(shù)化方式組裝,代碼的復(fù)用率高。該模型也采用了流程化引擎思想設(shè)計(jì),在維護(hù)的各環(huán)節(jié)均提供了大量擴(kuò)展接口,便于模塊化移植及個性化擴(kuò)展。另外,參數(shù)維護(hù)前后臺無縫銜接,便于流程的統(tǒng)一應(yīng)用及變更,參數(shù)化的配置方式也使得用戶可自定義顯示界面,使流程模塊不變,從而提高模型的靈活性。