文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2015)02-0171-03
0 引言
企業(yè)通常通過(guò)實(shí)施“升級(jí)改造”完善其應(yīng)用系統(tǒng)功能來(lái)適應(yīng)信息技術(shù)的快速變革。傳統(tǒng)的SOA模型采用“需求+服務(wù)”的兩層結(jié)構(gòu),業(yè)務(wù)需求被劃分為一系列業(yè)務(wù)服務(wù),服務(wù)定義一個(gè)與業(yè)務(wù)功能或業(yè)務(wù)數(shù)據(jù)相關(guān)的接口并實(shí)現(xiàn),屬于靜態(tài)模型,沒(méi)有能夠反映應(yīng)用系統(tǒng)動(dòng)態(tài)的運(yùn)行時(shí)特征。這種開(kāi)發(fā)方法從項(xiàng)目立項(xiàng)開(kāi)發(fā)到部署實(shí)施耗時(shí)冗長(zhǎng),而且這種“傷筋動(dòng)骨”的系統(tǒng)變更耗費(fèi)大量資源,帶來(lái)企業(yè)業(yè)務(wù)系統(tǒng)的不穩(wěn)定和不連續(xù)性,增加企業(yè)的運(yùn)營(yíng)、管理和維護(hù)成本,難以解決業(yè)務(wù)升級(jí)與業(yè)務(wù)連續(xù)性之間的沖突。
工作流[1]是實(shí)現(xiàn)業(yè)務(wù)過(guò)程自動(dòng)化的核心技術(shù),主要實(shí)現(xiàn)業(yè)務(wù)過(guò)程的建模、優(yōu)化、仿真、管理和集成并賦予業(yè)務(wù)管理系統(tǒng)高度的靈活性,而工作流技術(shù)與面向服務(wù)的架構(gòu)(Service Oriented Architecture,SOA)[2]的結(jié)合可實(shí)現(xiàn)業(yè)務(wù)邏輯和流程邏輯的分離,通過(guò)對(duì)業(yè)務(wù)流程的分析和規(guī)范化定義實(shí)現(xiàn)對(duì)系統(tǒng)運(yùn)行時(shí)特征的動(dòng)態(tài)描述,基于構(gòu)件[3]的業(yè)務(wù)單元亦可實(shí)現(xiàn)自動(dòng)組裝,在實(shí)際應(yīng)用中具有重大意義。
1 業(yè)務(wù)模型
傳統(tǒng)的SOA模型采用“需求+服務(wù)”的兩層結(jié)構(gòu),業(yè)務(wù)需求被劃分為一系列業(yè)務(wù)服務(wù),一個(gè)服務(wù)定義了一個(gè)與業(yè)務(wù)功能或業(yè)務(wù)數(shù)據(jù)相關(guān)的接口,服務(wù)直接針對(duì)某一個(gè)需求定義并實(shí)現(xiàn),屬于靜態(tài)模型,沒(méi)有反映應(yīng)用系統(tǒng)動(dòng)態(tài)的運(yùn)行時(shí)特征。本文在傳統(tǒng)靜態(tài)模型基礎(chǔ)上進(jìn)一步細(xì)化,提出一種新的包含語(yǔ)義流程的三層動(dòng)態(tài)模型及其建模方法。在需求和服務(wù)中間加入對(duì)具體應(yīng)用實(shí)現(xiàn)的流程描述,并將服務(wù)細(xì)化為針對(duì)具體應(yīng)用的基本構(gòu)件和原子構(gòu)件,分別將其定義為概念模型、邏輯模型和物理模型,其對(duì)應(yīng)關(guān)系如表1所示。其中概念模型用來(lái)定義一個(gè)應(yīng)用的內(nèi)涵,描述該系統(tǒng)可以提供的全部?jī)r(jià)值,與需求對(duì)應(yīng);物理模型定義具有完備性和獨(dú)立性的原子構(gòu)件,封裝為實(shí)施具體操作的提供相應(yīng)價(jià)值的服務(wù);邏輯模型對(duì)應(yīng)語(yǔ)義流程,由不同的構(gòu)件序列或服務(wù)序列組合來(lái)完成具體需求,是概念模型到物理模型之間的關(guān)系映射。該方法通過(guò)建模平臺(tái)對(duì)應(yīng)用領(lǐng)域的概念、邏輯、物理三層建模,規(guī)范化表述流程描述,提取基本構(gòu)件及原子構(gòu)件,并由流程引擎[4]調(diào)用執(zhí)行。
其中原子構(gòu)件是業(yè)務(wù)功能實(shí)現(xiàn)不能再細(xì)分的最小單元,具有獨(dú)立性和完備性。獨(dú)立性強(qiáng)調(diào)原子構(gòu)件自身不可再分,也不能由其他原子構(gòu)件組合產(chǎn)生;完備性指出任何一個(gè)流程都可由不同的原子構(gòu)件組合而成。兩者通過(guò)業(yè)務(wù)流程聯(lián)系起來(lái)完成具體的業(yè)務(wù)功能,構(gòu)件模型的實(shí)現(xiàn)不依賴于具體的實(shí)現(xiàn)環(huán)境,只需提供接口機(jī)制即可使用,而且構(gòu)件是高度可擴(kuò)展的,而引入業(yè)務(wù)流程可以實(shí)現(xiàn)系統(tǒng)更加快速、靈活的開(kāi)發(fā),大大增加了系統(tǒng)的可擴(kuò)展性。
2 系統(tǒng)架構(gòu)
基于動(dòng)態(tài)模型的系統(tǒng)開(kāi)發(fā)方法,本文提出了一種新的系統(tǒng)開(kāi)發(fā)架構(gòu),如圖1所示。
在該系統(tǒng)中,建模平臺(tái)采用“概念模型+邏輯模型+物理模型”的三層架構(gòu)建模方法[5]針對(duì)具體應(yīng)用領(lǐng)域建模,分別得出具體應(yīng)用的概念層次隸屬劃分、業(yè)務(wù)流程的指令化描述及底層功能實(shí)現(xiàn)的基本構(gòu)件和原子構(gòu)件,其中后兩部分分別作為流程引擎的輸入和基本業(yè)務(wù)庫(kù)及原子業(yè)務(wù)庫(kù)的輸入;界面平臺(tái)提供與用戶的交互,支持將用戶提交內(nèi)容轉(zhuǎn)化為業(yè)務(wù)流程的指令化描述并反饋給流程引擎;引擎接收指令流程,從基本構(gòu)件庫(kù)或原子構(gòu)件庫(kù)調(diào)用基本構(gòu)件或原子構(gòu)件執(zhí)行,通過(guò)報(bào)文的方式與核心數(shù)據(jù)庫(kù)或其他業(yè)務(wù)接口完成數(shù)據(jù)交互。
該架構(gòu)具有SOA架構(gòu)的特征,符合工作流管理聯(lián)盟WfMC提出的工作流參考模型。業(yè)務(wù)流程作為流程引擎的輸入數(shù)據(jù),業(yè)務(wù)改變時(shí),通過(guò)引入新的流程數(shù)據(jù)并針對(duì)性地對(duì)基本構(gòu)件庫(kù)和原子構(gòu)件庫(kù)進(jìn)行維護(hù)擴(kuò)展,可實(shí)現(xiàn)新流程的快速部署。在該架構(gòu)中,流程引擎和建模平臺(tái)作為系統(tǒng)的運(yùn)行和建模工具,分別進(jìn)行詳細(xì)描述和設(shè)計(jì)實(shí)現(xiàn)。
3 流程引擎
流程引擎類似于一個(gè)CPU,指令化的業(yè)務(wù)流程相當(dāng)于CPU中執(zhí)行的程序,每一個(gè)業(yè)務(wù)都對(duì)應(yīng)著相應(yīng)的一個(gè)流程。對(duì)于發(fā)起的任何一個(gè)業(yè)務(wù),流程引擎從應(yīng)用服務(wù)器中調(diào)出相對(duì)應(yīng)的業(yè)務(wù)流程驅(qū)動(dòng)執(zhí)行[6]。流程是以構(gòu)件為步驟節(jié)點(diǎn)的業(yè)務(wù)行為序列;執(zhí)行一個(gè)業(yè)務(wù)流程時(shí),流程引擎分析確定該流程執(zhí)行的步驟順序,并分析當(dāng)前的步驟節(jié)點(diǎn),根據(jù)分析結(jié)果從構(gòu)件庫(kù)選出恰當(dāng)?shù)臉?gòu)件執(zhí)行。
流程引擎確定輸入流程的執(zhí)行順序,具有同CPU的程序控制器相似的結(jié)構(gòu),如圖2所示。
流程引擎由流程計(jì)數(shù)器、流程隊(duì)列、構(gòu)件計(jì)數(shù)器(Counter)、構(gòu)件隊(duì)列(Queue)、構(gòu)件譯碼器等基本部件組成。流程隊(duì)列存儲(chǔ)流程的ID,流程ID由流程計(jì)數(shù)器確定,每一個(gè)流程ID對(duì)應(yīng)一個(gè)構(gòu)件計(jì)數(shù)器,構(gòu)件計(jì)數(shù)器則指向執(zhí)行系統(tǒng)操作的構(gòu)件隊(duì)列。當(dāng)流程引擎驅(qū)動(dòng)一個(gè)流程執(zhí)行時(shí),流程計(jì)數(shù)器指定流程ID,流程ID對(duì)應(yīng)到構(gòu)件計(jì)數(shù)器并由構(gòu)件計(jì)數(shù)器指針指定當(dāng)前構(gòu)件。該構(gòu)件完成譯碼后提交到服務(wù)總線,同時(shí)構(gòu)件計(jì)數(shù)器指針指向下一個(gè)將要執(zhí)行的操作(構(gòu)件)。針對(duì)流程引擎邏輯結(jié)構(gòu),設(shè)計(jì)其基本物理結(jié)構(gòu)如圖3所示。
圖中所示的流程引擎實(shí)現(xiàn)主要包括一個(gè)主處理節(jié)點(diǎn)和若干從處理節(jié)點(diǎn),并且由總線將各部分聯(lián)系起來(lái)。總線由一組上行線、一組下行線和一組狀態(tài)檢測(cè)線構(gòu)成;主處理節(jié)點(diǎn)對(duì)應(yīng)構(gòu)件計(jì)數(shù)器,獨(dú)占一組下行線,通過(guò)該總線向所有從處理節(jié)點(diǎn)發(fā)送通信消息;從處理節(jié)點(diǎn)對(duì)應(yīng)原子構(gòu)件或基本構(gòu)件,根據(jù)給定的特定輸入得到相應(yīng)的需求輸出,所有從處理節(jié)點(diǎn)共享一組上行線,通過(guò)狀態(tài)檢測(cè)線解決數(shù)據(jù)競(jìng)爭(zhēng)沖突問(wèn)題;其中所有節(jié)點(diǎn)通過(guò)統(tǒng)一節(jié)點(diǎn)接口(UNI)掛接在總線上。
4 建模平臺(tái)
建模平臺(tái)是一個(gè)依照本研究提出的動(dòng)態(tài)模型來(lái)輔助支持應(yīng)用系統(tǒng)建模的軟件系統(tǒng)。建模平臺(tái)通過(guò)對(duì)系統(tǒng)的建模為整個(gè)系統(tǒng)提供需求分析、語(yǔ)義描述并確立對(duì)應(yīng)構(gòu)件集合,在建模平臺(tái)基礎(chǔ)上,系統(tǒng)只需實(shí)現(xiàn)原子構(gòu)件,而基本構(gòu)件和其他所有業(yè)務(wù)步驟均由邏輯模型映射為原子構(gòu)件的工作流程并由流程引擎調(diào)用執(zhí)行。建模平臺(tái)針對(duì)具體應(yīng)用領(lǐng)域的建模是整個(gè)系統(tǒng)實(shí)現(xiàn)的基礎(chǔ),也是重要的組成部分。
4.1 實(shí)現(xiàn)工具
建模平臺(tái)使用MVC模式[7]設(shè)計(jì),該模式很好地做到了解耦,使代碼和界面分離,數(shù)據(jù)庫(kù)操作與Servlet操作分開(kāi),這樣能夠方便開(kāi)發(fā)和以后的維護(hù)。開(kāi)發(fā)工具選用Myeclipse,客戶端選用IE瀏覽器,服務(wù)器端選用mysql數(shù)據(jù)庫(kù)和輕量級(jí)WEB應(yīng)用中間件Tomcat(Appach的一個(gè)免費(fèi)、開(kāi)放源碼的項(xiàng)目,它是支持JSP和Servlet技術(shù)的容器)。
4.2 概念建模
建模平臺(tái)將概念建模等價(jià)于建立一個(gè)動(dòng)態(tài)樹(shù)形菜單dTree,由JSP頁(yè)面顯示。dTree通過(guò)層次分明的索引確立了概念的外延與內(nèi)涵以及相互之間的隸屬關(guān)系,直到分解為不可再分的業(yè)務(wù)用例場(chǎng)景,從自然語(yǔ)言出發(fā)一步步建立抽象化和形式化的概念模型。dTree的實(shí)現(xiàn)使用了JQuery AJAX,即異步JavaScript和XML技術(shù)。
$.ajax({
…
success: function(xml){
tree.add(nodeId,parentId,nodeName,hrefAddress,
"","","","",false); …
document.write(tree);
JQuery Ajax()方法[8]在不重載整個(gè)頁(yè)面的情況下,從后臺(tái)加載數(shù)據(jù)并在頁(yè)面顯示。Success()函數(shù)定義了由jsp頁(yè)面[9]調(diào)用JQuery請(qǐng)求servlet讀取XML數(shù)據(jù)對(duì)象,通過(guò)遍歷XML文件,獲得樹(shù)形菜單節(jié)點(diǎn)的屬性和文本數(shù)據(jù),再循環(huán)添加到dTree的節(jié)點(diǎn)中,形成樹(shù)形菜單的概念模型。
4.3 邏輯建模
概念建模確立的動(dòng)態(tài)樹(shù)形菜單中,葉子節(jié)點(diǎn)與某一業(yè)務(wù)文檔(邏輯)相對(duì)應(yīng),邏輯建模通過(guò)為每一個(gè)業(yè)務(wù)步驟標(biāo)記屬性,并通過(guò)序號(hào)、前件集合、后件集合等對(duì)業(yè)務(wù)用例場(chǎng)景流程數(shù)據(jù)進(jìn)行確切表述,并以文檔形式保存管理。
邏輯建模參照流程引擎結(jié)構(gòu)完成了業(yè)務(wù)流程數(shù)據(jù)結(jié)構(gòu)和流程指令的設(shè)計(jì)。業(yè)務(wù)流程數(shù)據(jù)設(shè)計(jì)將流程數(shù)據(jù)通過(guò)序號(hào)(Number)、業(yè)務(wù)名(BusinessName)、構(gòu)件ID、屬性(Attribute)、類型(Type)、前件集合(FrontSet)、后件集合(NextSet)及數(shù)據(jù)(Data)完整描述了業(yè)務(wù)步驟的各方面信息。流程指令設(shè)計(jì)部分包括通用控制類指令和數(shù)據(jù)搬移類指令,分別舉例如下:
JMP Number; //無(wú)條件調(diào)轉(zhuǎn)類指令;
意指將PC指針指向Number指定的構(gòu)件
DETZ Attriute Number; //條件跳轉(zhuǎn)類指令;意指判斷
Attribute屬性,如為0,則PC調(diào)轉(zhuǎn)至Number
指定的構(gòu)件;否則順序向下執(zhí)行
MOV Number NextSet; //數(shù)據(jù)搬移類指令;
意指將后件集合中內(nèi)容賦予Number
邏輯建模實(shí)現(xiàn)從用自然語(yǔ)言描述的業(yè)務(wù)流程到流程核心內(nèi)容的提取,并通過(guò)控制指令及數(shù)據(jù)搬移指令集合形成業(yè)務(wù)流程的完備描述,可通過(guò)流程引擎調(diào)用執(zhí)行。
4.4 物理建模
物理建模為每個(gè)具體應(yīng)用確立一個(gè)原子業(yè)務(wù)庫(kù)和一個(gè)基本業(yè)務(wù)庫(kù)。針對(duì)流程文檔中的每一個(gè)步驟節(jié)點(diǎn)確定其屬性分別納入原子業(yè)務(wù)庫(kù)或基本業(yè)務(wù)庫(kù)。構(gòu)件的提取、錄入通過(guò)JSP表單實(shí)現(xiàn),表單通過(guò)編輯javascript函數(shù)控制步驟錄入,利用DAO[10](數(shù)據(jù)訪問(wèn)對(duì)象)模式實(shí)現(xiàn)與mysql數(shù)據(jù)庫(kù)的操作,分別通過(guò)executeUpdate()和executeQuery()執(zhí)行數(shù)據(jù)庫(kù)更新和查詢操作:
public int executeUpdate(String sql){}
public ResultSet executeQuery(String sql){}
所有的步驟節(jié)點(diǎn)全部標(biāo)記錄入完成,以表單的形式存儲(chǔ)在數(shù)據(jù)庫(kù)中。在該結(jié)構(gòu)中,原子業(yè)務(wù)庫(kù)和基本業(yè)務(wù)庫(kù)支持更新和擴(kuò)展,構(gòu)件可由軟件或硬件實(shí)現(xiàn),并且可以為不同的應(yīng)用領(lǐng)域建模,具有很高的靈活性。
本文使用建模平臺(tái)完成以卡銀行核心業(yè)務(wù)為例的建模,建模平臺(tái)概念建模實(shí)現(xiàn)卡銀行業(yè)務(wù)菜單界面如圖4,數(shù)據(jù)庫(kù)表中原子業(yè)務(wù)及基本業(yè)務(wù)表如圖5。
5 小結(jié)
本文充分結(jié)合了工作流及SOA思想的特征,以流程引擎和建模平臺(tái)為基礎(chǔ),提出了基于動(dòng)態(tài)模型的應(yīng)用系統(tǒng)架構(gòu),詳細(xì)描述了流程引擎部分并搭建了建模平臺(tái)。采用了“概念模型+邏輯模型+物理模型”的動(dòng)態(tài)架構(gòu)建模方法,有一定的抽象但又利于理解,建立了分層結(jié)構(gòu)但又獨(dú)立于具體技術(shù)。基于動(dòng)態(tài)模型的業(yè)務(wù)系統(tǒng)架構(gòu)為業(yè)務(wù)流程再造提供了便利松弛的環(huán)境,結(jié)合流程引擎特別容易實(shí)現(xiàn)對(duì)新、舊業(yè)務(wù)的平滑過(guò)渡,成為業(yè)務(wù)持續(xù)性管理的理想架構(gòu),可實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)的快速開(kāi)發(fā)和重構(gòu),是一種具有重要實(shí)際意義的系統(tǒng)開(kāi)發(fā)方法。
參考文獻(xiàn)
[1] 陳儒,肖剛,張?jiān)Q,等.基于事物規(guī)則的面向服務(wù)工作流模型研究[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(6):5-7.
[2] 管紅杰,王珂,江海峰,等.SOA架構(gòu)的工作流管理系統(tǒng)的研究與應(yīng)用[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(5):1654-1657.
[3] 張功萱,陳瀚,王永利,等.一種消息驅(qū)動(dòng)的SOA系統(tǒng)集成方法[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2012,21(6):86-90.
[4] WfMC TC210162X.Workflow management coalition interface 1:Process definition interchange Q&A and examples[S].1999.
[5] 曾誠(chéng),何克清,李兵.一種用戶驅(qū)動(dòng)的服務(wù)資源建模方法[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(8):21-23.
[6] 吳益爾,蔡鴻銘,步豐林,等.基于語(yǔ)義的三維元素的概念關(guān)系建模的研究[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(3):8-12.
[7] 張婷.基于Extjs+Spring MVC的WEB系統(tǒng)開(kāi)發(fā)架構(gòu)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2013,1(23):147-149.
[8] 陳莉莉,張麗,劉正龍.搜索引擎中基于狀態(tài)的Ajax動(dòng)態(tài)網(wǎng)頁(yè)提取研究[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(7):217-220.
[9] 甘勇.JSP程序設(shè)計(jì)技術(shù)教程[M].北京:清華大學(xué)出版社,2010.
[10] 陳丹丹,李銀龍.Java開(kāi)發(fā)寶典[M].北京:機(jī)械工業(yè)出版社,2012.