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