999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于MVC架構(gòu)的輕量級工作流引擎研究與設(shè)計

2011-03-14 05:12:46丁蒼峰
電子設(shè)計工程 2011年10期
關(guān)鍵詞:引擎定義系統(tǒng)

丁蒼峰

(延安大學(xué)計算中心陜西延安716000)

工作流從提出至今,經(jīng)過幾十年的發(fā)展,取得一定的成果,但在實際應(yīng)用中,應(yīng)用的企業(yè)還是較少,應(yīng)用的范圍窄,效果不理想[1]。這主要是目前與工作流管理系統(tǒng)的全面性、集成性有關(guān),也與企業(yè)應(yīng)用的狀況有關(guān),最重要的原因是目前工作流產(chǎn)品功能齊全,結(jié)構(gòu)龐大,系統(tǒng)復(fù)雜,標(biāo)準(zhǔn)化程度差,靈活性差,實現(xiàn)復(fù)雜,難于在不同系統(tǒng)之間進(jìn)行交互,集成的效果不理想,不能很好地將SCM、CRM、ERP、和OA等具體業(yè)務(wù)流程處理系統(tǒng)緊密地聯(lián)系在一起[2],多數(shù)產(chǎn)品的開發(fā)由于沒有清楚地理解用戶的需求,而不能滿足用戶的迫切需要,也不能靈活地集成到企業(yè)具體系統(tǒng)中。

為了克服當(dāng)前工作流在應(yīng)用中的不足,提出了一個基于整合MVC架構(gòu)的輕量級工作流引擎,來進(jìn)行系統(tǒng)的設(shè)計和應(yīng)用。本文在設(shè)計引擎時主要考慮一個輕量級的核心,提供工作流管理系統(tǒng)所需要的基本功能,在此基礎(chǔ)上,利用組件靈活的可拔可插特性,根據(jù)需要來添加各種工作流組件進(jìn)行擴(kuò)展工作流管理系統(tǒng)的功能。

新西蘭Massey大學(xué)的Tagg等學(xué)者對工作流引擎的相信曾經(jīng)使用過”輕量級”[3]這一術(shù)語,但是側(cè)重點在于如何構(gòu)造一個“瘦客戶端”。而本文的設(shè)計重點則是設(shè)計一個基于MVC架構(gòu)的充分支持工作流技術(shù)的小型內(nèi)核,可以耦合到具體不同應(yīng)用的MIS系統(tǒng)中,達(dá)到靈活應(yīng)用的目的。

1 整合MVC的輕量級的引擎設(shè)計

miniFlow是基于整合MVC架構(gòu)的Web環(huán)境系統(tǒng),整個系統(tǒng)參照了J2EE架構(gòu),采用了Brower/ActionServlet控制器/BO業(yè)務(wù)邏輯層/Hibernate DAO層/DBMS數(shù)據(jù)庫服務(wù)層多層的框架結(jié)構(gòu)。輕量級是設(shè)計miniFlow系統(tǒng)所一直圍繞的核心任務(wù),為此,利用目前很流行的Struts2[4]、Hibernate[5]開源框架和Ajax[6]異步請求/響應(yīng)技術(shù)來設(shè)計,主要采用了組件能拔能插的特性來容易地擴(kuò)展工作流管理系統(tǒng)的其他功能。本文利用這些技術(shù)設(shè)計的miniFlow系統(tǒng)整體架構(gòu)如圖1所示。

圖1清楚地描述了MVC架構(gòu)基礎(chǔ)上的工作流管理系統(tǒng)和應(yīng)用進(jìn)行集成的多層模型,分為客戶端應(yīng)用層、表示邏輯層、業(yè)務(wù)邏輯層,持久層和數(shù)據(jù)庫服務(wù)層。

1)數(shù)據(jù)庫服務(wù)層為工作流管理系統(tǒng)和業(yè)務(wù)系統(tǒng)通過持久層提供數(shù)據(jù)。

2)持久層用Hibernate進(jìn)行數(shù)據(jù)庫的完全封裝,使軟件開發(fā)者真正對數(shù)據(jù)庫的操作是面向?qū)ο蟮牟僮鳎耆珜崿F(xiàn)了面向?qū)ο蟮脑O(shè)計思想,并且在該層進(jìn)行了對通用公共方法的封裝,使整個系統(tǒng)都可以調(diào)用該公共方法,在進(jìn)行對方法封裝時,也設(shè)置了開關(guān)控制等操作,不僅提高了整個開發(fā)系統(tǒng)的效率,大大節(jié)約了項目的成本,也使系統(tǒng)開發(fā)的代碼易于維護(hù)和便于以后的升級。

圖1 miniFlow系統(tǒng)整體架構(gòu)Fig.1Overall framework of miniFlow

3)業(yè)務(wù)邏輯層是由工作流管理和系統(tǒng)業(yè)務(wù)兩部分構(gòu)成。工作流管理系統(tǒng)是由工作流引擎組成,其中引擎是通過引擎調(diào)度中心進(jìn)行控制,該中心可以根據(jù)業(yè)務(wù)邏輯對工作流引擎進(jìn)行調(diào)用所對應(yīng)的組件,組件分別由轉(zhuǎn)發(fā)控制組建,任務(wù)指派組件,引擎調(diào)度規(guī)則組件等一些可以調(diào)度中心進(jìn)行調(diào)度的組件,工作流引擎主要用來解釋工作流建模工具所定義的業(yè)務(wù)流程。

業(yè)務(wù)邏輯層主要是處理業(yè)務(wù)信息的組件,它與工作流管理系統(tǒng)的組件進(jìn)行松散耦合而形成表現(xiàn)層的控制邏輯ActionServlet調(diào)用的中間層組件。

4)客戶應(yīng)用層和表現(xiàn)邏輯層提供用戶客戶端界面,根據(jù)用戶的權(quán)限不同而顯示不同的信息,通過一系列的動態(tài)頁面表現(xiàn),這些Web頁面由服務(wù)器JSP腳本創(chuàng)建,JSP腳本在Struts的ActionServlet控制器下通過WEB容器的ActionForm表單和業(yè)務(wù)邏輯層的工作流管理系統(tǒng)組件和系統(tǒng)業(yè)務(wù)組件進(jìn)行交互,根據(jù)用戶調(diào)用相應(yīng)的工作流執(zhí)行服務(wù)來執(zhí)行組件的調(diào)用。

1.1 引擎控制器

引擎控制器是工作流引擎在運(yùn)行時的控制中心,圖2給出了引擎控制器的結(jié)構(gòu)圖。

引擎控制器接受從Action控制器發(fā)送過來有關(guān)流程控制的請求(如業(yè)務(wù)初始化、獲取任務(wù)以及結(jié)束任務(wù)),然后根據(jù)不同的請求類型調(diào)用相應(yīng)的組件或處理模塊與本次請求相關(guān)的操作并將結(jié)果返回,由于是在DBMS內(nèi)部實現(xiàn)工作流引擎的控制模型,因此有關(guān)請求的并發(fā)處理等問題完全可以交給數(shù)據(jù)庫管理系統(tǒng)來完成,也不需要諸如請求隊列等形式的數(shù)據(jù)結(jié)構(gòu)。因此,可以將引擎控制器看成一個多線程的并發(fā)服務(wù)器,它可以對多個Action控制的外部請求提供并發(fā)服務(wù)。對外部請求的處理過程肯定會涉及到對內(nèi)部數(shù)據(jù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)的讀寫和更改操作,這些數(shù)據(jù)的完整性和互斥操作可以通過持久層Hibernate提供的各種加鎖機(jī)制來實現(xiàn),從而實現(xiàn)了多個外部請求之間的獨立性。

圖2 引擎控制器的結(jié)構(gòu)圖Fig.2Framework of engine controller

1.2 引擎流程定義管理和解析組件

1)流程定義管理miniFlow使用流程定制工具,通過Ajax和JSON語言描述,在客戶端進(jìn)行業(yè)務(wù)流程定義的時候?qū)⒃摿鞒檀嬖谟贘SON的對象數(shù)組類JSONArray的一個對象jsonArray中,然后通過Ajax的XMLHttpRequest一個對象類的send(“json=”+jsonArray.toJSPMString())方法,將jsonArray從客戶端發(fā)送到服務(wù)器端。miniFlow的核心部分不涉及如何實現(xiàn)流程的定制,而是專注于將定制好的jsonArray數(shù)組字符串文件在服務(wù)器端讀入,存儲到數(shù)據(jù)庫中。采用這樣的解決方式,主要考慮到了系統(tǒng)的效率性能問題。在流程執(zhí)行階段,將會經(jīng)常需要對流程的定義讀取和解析,如果每次都直接讀取jsonArray文件,將會導(dǎo)致系統(tǒng)性能的瓶頸。而每次讀取jsonArray文件后,將會根據(jù)在客戶端存儲jsonArray文件的結(jié)構(gòu)進(jìn)行解析,獲取流程、活動的相應(yīng)信息,這也會降低系統(tǒng)的效率。

miniFlow在第一實例化流程時,通用在服務(wù)器端獲取已經(jīng)定義好的jsonArray文件,然后通過引擎流程定義管理和解析組件提供的repository接口中提供的save(String source)方法讀取和解析文件,存儲相關(guān)數(shù)據(jù)到數(shù)據(jù)庫中,以后每次對定義的應(yīng)用直接讀取數(shù)據(jù)庫。

2)流程定義解析miniFlow的引擎用Ajax和JSON語言描述的流程定義文件jsonArray讀入,存儲到數(shù)據(jù)庫中,對于流程的定義信息,在設(shè)計工作流信息模型中設(shè)計了5個表來存儲,分別是節(jié)點定義表TB_WF_NODE_DEFINE、前續(xù)節(jié)點集表TB_WF_PRE_NODE_SET、后續(xù)節(jié)點集表TB_WF_NEXT_N ODE_SET、流程角色表TB_WF_ROLE和節(jié)點類型表TB_WF_NODE_TYPE。

1.3 引擎規(guī)則控制組件

上面的介紹我們知道,工作流引擎程序運(yùn)行在業(yè)務(wù)邏輯層,位于表示邏輯層的Action控制器調(diào)用業(yè)務(wù)邏輯層的引擎控制器,引擎控制器調(diào)用引擎規(guī)則組件和轉(zhuǎn)發(fā)控制組件,通過檢索業(yè)務(wù)流程的定義,與各模塊業(yè)務(wù)表現(xiàn)邏輯層(客戶端應(yīng)用層)數(shù)據(jù)交互,引導(dǎo)業(yè)務(wù)流程的走向。在上面的miniFlow的數(shù)據(jù)模型的信息模型中,給出的表結(jié)構(gòu)中有這樣一個表NODE_TYPE,NODE_TYPE就是節(jié)點類型表,引擎規(guī)則控制組件就是根據(jù)節(jié)點的類型進(jìn)行設(shè)計來流轉(zhuǎn)業(yè)務(wù)的。

1)引擎規(guī)則組件類分析在設(shè)計引擎規(guī)則組件時候,首先定義了一個引擎規(guī)則接口Rule。根據(jù)節(jié)點類型定義,為此在開發(fā)引擎規(guī)則組件時,為每一節(jié)點類型都定義了一個類,該類都實現(xiàn)引擎規(guī)則接口Rule,返回的結(jié)果為任務(wù)狀態(tài),代碼如下。

public interface Rule

{

public String isRule(EngineParam engineParam)throws Exception;

}

2)引擎規(guī)則控制器由上述可知,根據(jù)節(jié)點類型設(shè)計引擎規(guī)則組件時,針對每個節(jié)點類型都設(shè)計了相應(yīng)的類,引擎規(guī)則控制器就是根據(jù)實際傳入的節(jié)點類型,實例化相應(yīng)的規(guī)則。由上述知識可清楚的得到引擎規(guī)則控制器Rule Ctr調(diào)用各個引擎規(guī)則類的圖,如圖3所示。

圖3 引擎規(guī)則控制器調(diào)用引擎規(guī)則結(jié)構(gòu)圖Fig.3Engine rule controller calls engine rules structure

1.4 引擎轉(zhuǎn)發(fā)控制組件

在miniFlow架構(gòu)的核心部分,流程轉(zhuǎn)發(fā)控制組件提供執(zhí)行機(jī)制和環(huán)境,流程可以按照定義執(zhí)行操作,也就是實現(xiàn)工作流的目標(biāo)。一系列的節(jié)點操作構(gòu)成一個流程,一個流程實例根據(jù)定義執(zhí)行相應(yīng)的操作,完成相應(yīng)的任務(wù)。多個實例可以共同使用同一個流程定義,也就是說,一個流程定義模板可以使用多個流程實例,可以同時實例化多個實例。

轉(zhuǎn)發(fā)控制組件采用動態(tài)實例化的方式,即流程開始的時候,只是實例化該流程的第一活動。第一個活動完成后,實例化后續(xù)活動。一是節(jié)省資源的開銷,二是允許動態(tài)修改流程。這個組件主要實現(xiàn)流程運(yùn)行期間的轉(zhuǎn)發(fā)控制流向,包括流程啟動(即流程實例化),任務(wù)跳轉(zhuǎn),任務(wù)終止等信息。

由上所知,工作流引擎控制中這些方法中又引用了接口FlowCtrl,該接口有executeFlow()靜態(tài)方法,該FlowCtrl接口被FlowStartUp、FlowStep、FlowStop、GetFlowIdList、FlowCancel和FlowPause類型實現(xiàn)。由上述關(guān)系可以設(shè)計出工作流引擎轉(zhuǎn)發(fā)控制組件和上述方法以及類之間的關(guān)系圖,如圖4所示。

圖4 工作流引擎轉(zhuǎn)發(fā)控制組件結(jié)構(gòu)圖Fig.4Workflow engine forward and control component framework

1.5 引擎權(quán)限控制組件

miniFlow權(quán)限控制組件是采用RBAC(Role-based Access Control Model)訪問控制模型實現(xiàn)的[7],可以提供多層次的授權(quán)。角色為樹狀遞歸結(jié)構(gòu),功能也用樹狀遞歸結(jié)構(gòu)實現(xiàn),這樣可以實現(xiàn)較復(fù)雜的用戶權(quán)限管理。目前系統(tǒng)權(quán)限可以細(xì)分到專責(zé)一級,并且不同專責(zé)的權(quán)限可以由系統(tǒng)管理員靈活地、動態(tài)地分配。一方面保證了系統(tǒng)信息的保密性,系統(tǒng)的安全性,另一方面也增加了系統(tǒng)的靈活性和擴(kuò)展性。

2 引擎可擴(kuò)展組件

2.1 可視化流程定義工具

可視化流程定義工具獨立于架構(gòu)的核心部分,只是提供給用戶可視化的操作界面,方便用戶流程的定義。本課題在設(shè)計工作流可視化定義工具的時候,不是用工作流聯(lián)盟所要求基于XML的流程定義語言XPDL,而是用JavaScript、Ajax和JSON等語言實現(xiàn)的定制流程的開發(fā)工具。它將用戶可視化設(shè)計的流程定義以JSON的對象數(shù)組JSONArray或JSON對象JSONObject形式存儲起來,該存儲的形式是字符形式的,通過Ajax中XMLHttpRequest對象的方法send(),把JSON的字符串發(fā)送到服務(wù)器端進(jìn)行解析,存儲到數(shù)據(jù)庫。

我們提出用JavaScript、Ajax和JSON來實現(xiàn)流程定義的語言,簡化了流程定義中各種繁瑣的設(shè)定。流程定義工具可以提供靈活的流程定義功能,該流程定義工具達(dá)到了設(shè)計miniFlow輕量級的要求,具有重用性、可移植性高的特點,幾乎在所有的瀏覽器都可以實現(xiàn)流程定制的功能。

2.2 任務(wù)列表組件

這個組件包含標(biāo)準(zhǔn)的任務(wù)列表處理器和應(yīng)用開發(fā)的任務(wù)列表處理器。其中標(biāo)準(zhǔn)的任務(wù)列表處理器包含了在標(biāo)準(zhǔn)規(guī)范定義中,用于工作流核心部分和參與流程執(zhí)行。miniFlow的任務(wù)組件與WFMC規(guī)范中Worklist的接口要求有所不同,在miniFlow的任務(wù)列表組件中設(shè)計了3個接口,3個接口分別實現(xiàn)待處理工作,已提交工作和已完成工作,這3個接口提供了與工作流管理系統(tǒng)的交互界面。其含義如下:

1)待處理工作:表示當(dāng)前用戶要等待用戶處理的工作,其任務(wù)狀態(tài)為WAITING,等待用戶來處理。

2)已提交工作:表示當(dāng)前用戶處理了等待用戶處理的工作,在用戶處理完后就表示已提交工作,其任務(wù)狀態(tài)為除WAITING外的其他狀態(tài)(RUNNING、CANCEL和SUSPENDED等)。

3)已完成工作:表示當(dāng)前工作已經(jīng)處理完畢或由于別的原因取消工作的執(zhí)行,其任務(wù)狀態(tài)為COMPLETED或FAI LURE或CANCEL等。

應(yīng)用開發(fā)的任務(wù)列表處理器就是上面的3個接口的工作列表處理器,則是根據(jù)具體的應(yīng)用系統(tǒng)開發(fā)的,用于應(yīng)用系統(tǒng)的具體業(yè)務(wù)和引擎之間的交互。

2.3 日志信息組件

工作流管理系統(tǒng)存儲流程的執(zhí)行日志記錄,在建立miniFlow架構(gòu)的時候,顯示日志信息的組件并不屬于架構(gòu)的核心部分。miniFlow通過增加一個獨立的顯示日志信息的組件來擴(kuò)展架構(gòu)。和傳統(tǒng)的工作流架構(gòu)不一樣,這個組件并不是系統(tǒng)的一個組成部分,只是在應(yīng)用需要的時候,把這部分功能集成。

每個應(yīng)用系統(tǒng),需要顯示的日志信息會各有各的特殊要求,miniFlow架構(gòu)的核心部分不包含顯示日志信息功能,確保了架構(gòu)的核心在輕量級別。這樣,顯示日志信息的功能可以靈活地集成也可以靈活地定制。

3 結(jié)論

本文介紹了基于MVC架構(gòu)的輕量級工作流引擎,引擎的核心部分,提供了工作流最基本的功能,與核心的引擎規(guī)則和任務(wù)指派以及權(quán)限分配組件一起構(gòu)成工作流的引擎。miniFlow基于MVC架構(gòu)實現(xiàn),還包括易于增加和裁減提供各種的工作流特性的擴(kuò)展。采用該引擎系統(tǒng)可以進(jìn)行二次開發(fā)的應(yīng)用系統(tǒng),提高企業(yè)運(yùn)作的靈活性和適應(yīng)性、為企業(yè)在激烈的市場競爭中贏得了更多的時間和機(jī)會,實踐證明該設(shè)計是切實可行的。

[1]伍慶林,王加.基于J2EE框架的工作流管理系統(tǒng)設(shè)計與實現(xiàn)[J].計算機(jī)技術(shù)與發(fā)展,2008,18(4):107-110.WU Qing-lin,WANG Jia.Design and implementation of J2EE framework based on workflow management system[J].ComputerTechnologyandDevelopment,2008,18(4):107-110.

[2]牟軍,呂立.使用輕量級框架進(jìn)行J2EE應(yīng)用開發(fā)[J].小型微型計算機(jī)系統(tǒng),2006,27(6):1149-1152.MU Jun,LV li.J2EE application development based on lightweight framework[J].Mini-micro Systems,2006,27(6):1149-1152.

[3]Tagg R,et al.Preliminary design of a lightweight workflow server[C].In:8th Australasian Confon Information Systems,Australia,1997.

[4]Roughley I.Starting Struts 2[M].C4Media Inc,2008.

[5]孫衛(wèi)琴.精通Hibernate:Java對象持久化技術(shù)詳解[M].北京:電子工業(yè)出版社,2005.

[6]Asleson R,Nathaniel T.Schutt.Foundation of Ajax[M].金陵,等譯.北京:人民郵電出版社,2006.

[7]Chandramouli R.Application of XML tools for enterprisewide RBAC implementation tasks[C]//Proceedings of the fifth ACM workshop on Role-based access control,Berlin,Germany,2000:11-18.

猜你喜歡
引擎定義系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
藍(lán)谷: “涉藍(lán)”新引擎
商周刊(2017年22期)2017-11-09 05:08:31
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
成功的定義
山東青年(2016年1期)2016-02-28 14:25:25
無形的引擎
河南電力(2015年5期)2015-06-08 06:01:46
基于Cocos2d引擎的PuzzleGame開發(fā)
修辭學(xué)的重大定義
山的定義
主站蜘蛛池模板: 久久美女精品| 狠狠色丁婷婷综合久久| 成人韩免费网站| 国产精品hd在线播放| 特级精品毛片免费观看| 久久网综合| 天天操精品| 成人韩免费网站| 香蕉伊思人视频| 国产视频一区二区在线观看| 又污又黄又无遮挡网站| 手机在线国产精品| 国产一区在线视频观看| 亚洲精品天堂自在久久77| 九九精品在线观看| 五月天婷婷网亚洲综合在线| 1级黄色毛片| 国产精品亚洲一区二区三区在线观看| 尤物精品视频一区二区三区| 国产精品深爱在线| 亚洲成A人V欧美综合天堂| 91色在线观看| 国语少妇高潮| 亚洲AV无码久久天堂| 手机成人午夜在线视频| 婷婷中文在线| 欧美劲爆第一页| 综合网天天| 先锋资源久久| 日韩在线播放中文字幕| 欧洲在线免费视频| 丁香六月综合网| 伊人色天堂| 日韩精品毛片人妻AV不卡| 久久不卡精品| 亚洲天堂视频网| 欧美中文字幕一区二区三区| 正在播放久久| 国产自在线拍| 91午夜福利在线观看精品| 就去吻亚洲精品国产欧美 | 玖玖精品在线| 亚洲swag精品自拍一区| 无码av免费不卡在线观看| 2018日日摸夜夜添狠狠躁| 91福利在线看| 综合天天色| 亚洲精品成人片在线播放| 大学生久久香蕉国产线观看| 一区二区在线视频免费观看| 无码AV动漫| 精品一区二区三区自慰喷水| 亚洲永久视频| 日本道中文字幕久久一区| 免费无码一区二区| 国产精品亚洲一区二区在线观看| 久久国产乱子伦视频无卡顿| 国产精品美女在线| 国产网站免费观看| 日韩欧美网址| 毛片免费试看| 国产日韩欧美在线播放| 欧美亚洲中文精品三区| 天堂在线视频精品| 夜精品a一区二区三区| 日本一区二区三区精品国产| 免费在线看黄网址| 亚洲精品国产精品乱码不卞| 一区二区理伦视频| 久久精品一品道久久精品| 国产成人永久免费视频| 国产精品视频白浆免费视频| 日本欧美视频在线观看| 国产粉嫩粉嫩的18在线播放91| 亚洲色图在线观看| 99热这里只有精品2| 日韩天堂视频| 五月婷婷激情四射| 一区二区自拍| 少妇露出福利视频| 国产亚洲精久久久久久久91| 亚洲一区色|