国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

輕量級動態(tài)工作流引擎的設(shè)計與實現(xiàn)

2014-12-23 01:24郭玉彬蔡澤野林澤偉徐銀鵬
計算機工程與設(shè)計 2014年3期
關(guān)鍵詞:結(jié)點引擎實例

郭玉彬,蔡澤野,林澤偉,徐銀鵬

(華南農(nóng)業(yè)大學(xué) 信息學(xué)院,廣東 廣州510642)

0 引 言

動態(tài)工作流技術(shù)是專門為企業(yè)適應(yīng)復(fù)雜多變的市場而提出來,近年來已成工作流領(lǐng)域的研究熱點。很多工作流廠商和學(xué)者對這一技術(shù)進行了很多研究和實現(xiàn),例如,F(xiàn)ang Ru等[1]研究過程模型的動態(tài)性問題,定義了5種過程模型的變更模式,當(dāng)流程發(fā)生變更時,綜合利用這5種模式進行流程變更。北京航空航天大學(xué)的孫海龍教授團隊[2,3]設(shè)計并實現(xiàn)了一個支持動態(tài)演化的組合服務(wù)執(zhí)行引擎,用于可信軟件的動態(tài)演化,其組合服務(wù)運行實例遷移算法,其核心算法LiveMig是組合服務(wù)運行實例算法。南京大學(xué)呂建教授團隊[4-6]研究了過程以及服務(wù)組合的動態(tài)演化問題,提出了一種基于柔性遷移技術(shù)的過程動態(tài)演化方法,并給出支持自適應(yīng)性的可變過程模型及其實現(xiàn)。另外,文獻[7-10]分別給出不同環(huán)境中動態(tài)工作流引擎的設(shè)計與實現(xiàn)方案。

本文研究動態(tài)工作流引擎的設(shè)計與實現(xiàn),提出一種輕量級動態(tài)工作流引擎的框架結(jié)構(gòu),稱為LWDWE(lightweight dynamic workflow engine)。該引擎借用Petri網(wǎng)的思想,將模型看作靜態(tài)結(jié)構(gòu),將過程實例看作托肯(token)所代表的系統(tǒng)狀態(tài)下一系列變遷(transition)的發(fā)生。由此可將工作流模型與實例完全分開,方便對過程修改的支持和實例的動態(tài)遷移。LWDWE 支持基于過程和基于活動的兩種動態(tài)修改策略,本文首先給出LWDWE 支持的工作流模型、架構(gòu)和接口設(shè)計和調(diào)度機制,然后給出流程的動態(tài)修改策略及過程動態(tài)修改算法。最后,給出利用Spring 和Hibernate開源框架實現(xiàn)的原型系統(tǒng),并通過一個應(yīng)用實例證明了引擎設(shè)計的可用性。

1 輕量級動態(tài)工作流引擎的分析與設(shè)計

1.1 LWDWE中的工作流模型

jBPM 是當(dāng)前流行的工作流執(zhí)行引擎,它使用用JPDL(jBPM process definition language)語言描述基本的工作流程。借鑒JPDL 思想,LWDWE 將工作流中各元素抽象為控制節(jié)點和業(yè)務(wù)節(jié)點兩類,控制節(jié)點是工作流中用來控制流程流轉(zhuǎn)的節(jié)點,業(yè)務(wù)節(jié)點是流程中需要參與者或者第三方應(yīng)用程序參與的節(jié)點。而流程是由兩種節(jié)點組合起來,完成某種應(yīng)用功能的執(zhí)行步驟序列。

表1給出本文流程節(jié)點的說明。LWDWE 共使用三類業(yè)務(wù)節(jié)點FormTask、ToolTask 和SubFlowTask,其中FormTask是表單任務(wù),即需要參與者以表單提交方式完成的任務(wù),ToolTask 用于實現(xiàn)第三方工具的調(diào)用,Sub-FlowTask 是嵌套子流程,方便流程的層次化設(shè)計??刂乒?jié)點分Start、End、Split、Join、Decision和State這6種。借助這些控制節(jié)點可實現(xiàn)順序、并發(fā)、聚合、判斷等流程結(jié)構(gòu)。

LWDWE使用與JPDL類似的標(biāo)簽,如<process>、<start>、<end>、<split>和<transition>等來表示流程。圖1給出一個簡單的流程實例及其XML表示。該流程只Start、End、A 和B 這4 個結(jié)點。結(jié)點A 是表單結(jié)點,其ID 為3,其后續(xù)結(jié)點只有一個,即結(jié)點B。結(jié)點A、B之間的順序關(guān)系通過結(jié)點A 的transition屬性表示。一般業(yè)務(wù)結(jié)點的transition屬性只有一個取值,即它與前、后序結(jié)點處于順序關(guān)系。而控制結(jié)點的transition屬性可取多值,表示可能與前、后序結(jié)點處于選擇或并發(fā)關(guān)系。

表1 流程節(jié)點的詳細(xì)說明

圖1 一個工作流實例及其XML文件

1.2 LWDWE架構(gòu)設(shè)計

LWDWE采用總線型結(jié)構(gòu),如圖2 所示,整個引擎由一個運行總線(ExecutionContext)和以接口形式掛載其上的服務(wù)構(gòu)成??偩€型的設(shè)計可將所有服務(wù)集中起來,便于工作流引擎的統(tǒng)一調(diào)用,管理和配置簡單,且具較好的可擴展性。當(dāng)需要擴展新功能時,可增加新的服務(wù)接口并掛載在運行總線上。而系統(tǒng)已有服務(wù)的功能修改則可通過重寫接口實現(xiàn)類來實現(xiàn)。

圖2 LWDWE架構(gòu)設(shè)計

如圖2所示,工作流引擎對外提供各種服務(wù)接口,包括:流程執(zhí)行服務(wù)接口(ExecutionService)、流程部署服務(wù)接口(RepositoryService)、人工服務(wù)接口(TaskService)、流程管理控制服務(wù)接口(ManagementService)、流程查詢服務(wù)接口(HistoryService)、身份認(rèn)證服務(wù)接口(IdentityService)、內(nèi)核管理器(KernelManager)和Dao工廠(DaoFactory)。LWDWE通過調(diào)用這些服務(wù)接口來實現(xiàn)創(chuàng)建、執(zhí)行和管理流程。

ExecutionContext是運行總線的實現(xiàn)類,所有的服務(wù)都掛載在上面。ExecutionService是流程執(zhí)行服務(wù)接口,是引擎中最常用的接口之一,提供創(chuàng)建流程實例、啟動流程實例、推進流程實例的運轉(zhuǎn)和設(shè)置流程變量等功能接口。引擎通過該接口來控制流程的執(zhí)行。RepositoryService是流程的部署服務(wù)接口,提供對流程模板的部署、查詢和刪除操作。通過該接口,LWDWE可以輕易實現(xiàn)對流程的部署等

TaskService是引擎的人工服務(wù)接口,提供對流程實例(Task)的創(chuàng)建、提交、查詢、保存和刪除等操作。當(dāng)流程流轉(zhuǎn)到表單任務(wù)節(jié)點時,引擎會根據(jù)定義將任務(wù)實例分配給指定的參與者。ManagementService提供異步工作相關(guān)的執(zhí)行和查詢服務(wù)。HistoryService提供對已經(jīng)執(zhí)行的流程實例、任務(wù)實例和流程變量等的查詢。IdentityService,服務(wù)接口。提供對流程用戶及角色成員的身份認(rèn)證相關(guān)服務(wù)。KernelManager是維護流程正確運轉(zhuǎn)的管理器。DaoFactory提供程序所需要的各種Dao操作。限于篇幅,本文僅在表2給出ExecutionService接口的詳細(xì)設(shè)計,介紹主要接口函數(shù)信息。

表2 ExecutionService接口的設(shè)計

1.3 LWDWE調(diào)度方案

LWDWE中,過程模型被看作一個Petri網(wǎng)的網(wǎng)結(jié)構(gòu),執(zhí)行實例則被看作一次執(zhí)行。啟動一個流程實例的時候,LWDWE依據(jù)流程模板(ProcessDefinition)生成一個Execution來表示這個流程實例。當(dāng)流程實例流轉(zhuǎn)到某個節(jié)點時,Execution根據(jù)節(jié)點類型獲取相應(yīng)的動作并執(zhí)行。當(dāng)某結(jié)點執(zhí)行完成時,則由Execution獲取節(jié)點的所有轉(zhuǎn)出連接?。╰ransition),依據(jù)相關(guān)流程變量的值選擇轉(zhuǎn)出連接弧、流轉(zhuǎn)到下一節(jié)點。

工作流的流轉(zhuǎn)分順序與分發(fā)兩種情況。順序流轉(zhuǎn)指Execution完成一個節(jié)點的執(zhí)行后獲取其所有的轉(zhuǎn)出連接弧,從中選擇一個并流轉(zhuǎn)到下一節(jié)點。分發(fā)流轉(zhuǎn)則是指流程實例運行遇到一個分發(fā)(Split)節(jié)點時,流程實例會依據(jù)其轉(zhuǎn)出連接弧個數(shù),產(chǎn)生多個子流程,并使同時進入這些子流程執(zhí)行。對分發(fā)結(jié)點的實現(xiàn),Execution對象保存一個List<Execution>類型的變量,引擎計算分發(fā)(Split)節(jié)點的具體轉(zhuǎn)出連接弧的數(shù)量,同時產(chǎn)生相應(yīng)數(shù)量的子Execution加入到該變量中,原Execution則在聚合(Join)節(jié)點等待。當(dāng)該變量中所有子Execution都到達聚合節(jié)點時,原Execution將該變量清空并指定Join節(jié)點相應(yīng)的行為,然后流轉(zhuǎn)到下一節(jié)點。為區(qū)別Split節(jié)點和處于List變量中的Execution,系統(tǒng)用RootExecution 表示流程實例開始時綁定的Execution,而用SubExecution來表示List變量中的Execution。圖3給出具有兩個分支結(jié)點的分發(fā)流轉(zhuǎn)的執(zhí)行情況。

工作流的順序流轉(zhuǎn)表達過程結(jié)點之間的順序、選擇關(guān)系,而分發(fā)操作表達過程結(jié)點之間的并發(fā)操作。由此,LWDWE可對所有包含順序、選擇、并發(fā)結(jié)構(gòu)工作流進行執(zhí)行。

圖3 分發(fā)流轉(zhuǎn)

2 流程動態(tài)修改策略及算法

2.1 動態(tài)修改策略

流程動態(tài)修改一般將其分為過程級修改和活動級修改兩類[2]。其中過程級修改指流程實例運行時對流程模板的修改。而活動級修改指對流程實例中未運行活動的臨時修改,比如修改活動屬性,這種修改只針對具體的流程實例,不改變流程模板。LWDWE對這兩種動態(tài)修改都提供支持。

對于過程級修改,目前動態(tài)工作流系統(tǒng)一般采取重新啟動、繼續(xù)執(zhí)行和轉(zhuǎn)換3種策略[4]。其中,轉(zhuǎn)換策略是指將正運行的過程實例遷移到新的工作流程模板上運行,這種策略不需要重啟流程,放棄實例已完成部的執(zhí)行結(jié)果,使得流程實例能夠跟上模板變化,具備靈活性,但其實現(xiàn)相對困難。

本文利用流程模板的版本區(qū)別實現(xiàn)過程實例的轉(zhuǎn)換策略。即將對流程模板的修改用不同版本記錄。過程實例需要流轉(zhuǎn)到下一結(jié)點時,依據(jù)條件選擇使用原版本的過程模板還是轉(zhuǎn)換到最新版本的過程模板繼續(xù)后續(xù)部分的執(zhí)行。由于動態(tài)轉(zhuǎn)換時流程實例中的已經(jīng)產(chǎn)生了部分流程數(shù)據(jù),為避免與新定義模板的活動產(chǎn)生數(shù)據(jù)沖突,本引擎給出如下的規(guī)定:

假設(shè)M 為舊的過程模型,l為過程實例X 在舊的過程模型中已經(jīng)執(zhí)行的活動序列。MN為修訂后的過程模型,ln為活動序列l(wèi)在MN中的投影,若滿足:(M≠MN)Λ(l=ln),則允許動態(tài)轉(zhuǎn)換。其中條件(M≠MN)表示新過程模板對舊過程模板進行了修改,并不等價于舊過程模型。而(l=ln)保證已經(jīng)執(zhí)行過的活動序列在新的過程模型未發(fā)生變化。

2.2 動態(tài)修改算法

為防止錯誤的修改,本文將過程修改看作對過程模板進行增加或刪除結(jié)點的操作。插入或刪除的結(jié)點t簡化為一個業(yè)務(wù)結(jié)點或一個split-join結(jié)構(gòu)包含的所有結(jié)點。簡化的目的是簡化模型檢查和正確性判定。對任意位置、任意結(jié)構(gòu)結(jié)點的插入,需要復(fù)雜的模型檢查與正確性判定算法支持,而這不是本文研究內(nèi)容。

算法1:流程模板插入結(jié)點的算法

輸入:過程模板PD,結(jié)點屬性Map<String,String>property

輸出:過程模板PD’

步驟:

(1)AddTask(int nodeId,Map<String,String>property)

//動態(tài)添加業(yè)務(wù)節(jié)點,nodeId為當(dāng)前節(jié)點的Id,property為要添加的節(jié)點的屬性。

(2)讀取當(dāng)前綁定的流程模板信息;根據(jù)NodeId找到當(dāng)前正在運行的節(jié)點;根據(jù)當(dāng)前運行節(jié)點找到其下一個節(jié)點的Id,將其賦給NextId變量。

(3)調(diào)用addElement 函數(shù)生成一個新節(jié)點,并將Property信息賦給該節(jié)點的各個屬性。同時將NextId賦值給該節(jié)點的孩子節(jié)點Transition中的to屬性。

(4)將步驟(2)中獲得的節(jié)點的孩子節(jié)點Transition的屬性賦值為步驟(3)中新生成的節(jié)點的Id。

(5)返回修改后的流程模板信息。

(6)根據(jù)修改后的流程模板信息生成新的流程模板PD’,將新的流程模板的版本加上1,同時將新的流程模板發(fā)布到數(shù)據(jù)庫中。

(7)向正在運行的流程實例發(fā)送版本更新信息。

假設(shè)A 的轉(zhuǎn)出連接弧指向B,即A、B處于順序關(guān)系。在A、B兩結(jié)點之間插入一個新結(jié)點C 的工作包括:記錄A 的轉(zhuǎn)出連接?。ˋ 結(jié)點的Transition屬性);修改C 的轉(zhuǎn)出連接弧等于A 的轉(zhuǎn)出連接弧;修改A 的轉(zhuǎn)出連接弧指向C。刪除結(jié)點的操作與之相類似,假設(shè)結(jié)點A、B、C 處于順序關(guān)系,刪除B結(jié)點的操作即是將A 的轉(zhuǎn)出連接弧指向B的轉(zhuǎn)出連接弧的過程。

算法1是LWDWE中所使用的插入結(jié)點的昝。限于篇幅,本文略去了刪除結(jié)點的算法。

在一個過程實例執(zhí)行時,用戶可動態(tài)修改該本實例的執(zhí)行。這種修改可以是增加或刪除一個業(yè)務(wù)結(jié)點、修改某個結(jié)點的屬性等。LWDWE 中,這些修改的實現(xiàn)通過將過程模板復(fù)制到本實例中,并切斷模板與實例之間的聯(lián)系來實現(xiàn)。即只允許用戶的操作對本過程實例起作用,而屏蔽掉它對過程模板的影響。在一個動態(tài)修改過的過程實例完成后,用戶也可選擇 “升級”操作,從該實例中抽取過程模板并發(fā)布出去,供以后的過程實例調(diào)用。

2.3 一個動態(tài)工作流實例

本節(jié)給出一個簡單的請假系統(tǒng)的應(yīng)用案列來驗證引擎的功能,公司請假的一般流程如下:①職員填寫請假單,提供名字、請假天數(shù)和請假原因等信息。②經(jīng)理對請假信息進行審批,若請假小于等于3 天,直接給出審批結(jié)果,準(zhǔn)假或不準(zhǔn)假。若請假大于3天,則轉(zhuǎn)到下一步驟,由老板進行審批。③老板給出審批結(jié)論,準(zhǔn)假或不準(zhǔn)假。圖4給出使用本系統(tǒng)生成的請假工作流的圖形表示。圖中有一個分支結(jié)點,依據(jù)請假天數(shù)分兩種情況處理。

圖4 公司請假流程

當(dāng)一個實例開始運行時,LWDWE 從過程模型生成請假實例的執(zhí)行模板。但在執(zhí)行過程中,可靈活改變工作流實例的處理過程。假設(shè)職員1提交請假申請,而且請假天數(shù)小于等于3天。則職員提交請假申請后,系統(tǒng)為經(jīng)理生成工作任務(wù)。如圖5所示,經(jīng)理登錄系統(tǒng)后看到1個請假實例和一個待辦任務(wù)。此時經(jīng)理可修改流程實例,添加新的任務(wù)節(jié)點。如果經(jīng)理增加任務(wù)結(jié)點 “總監(jiān)審批”,則總監(jiān)登錄系統(tǒng)后,可看到該流程實例及其待辦任務(wù),且系統(tǒng)中流程定義TestWorkflow 增加一個新版本的定義,如圖6所示。此時流程實例2流轉(zhuǎn)到 “總監(jiān)審批”節(jié)點,實現(xiàn)了流程實例在運行期間的動態(tài)修改流程模板并遷移的功能。

3 結(jié)束語

本文設(shè)計并實現(xiàn)了一種動態(tài)輕量級工作流引擎LWDWE。在架構(gòu)方面,使用總線型的引擎架構(gòu);在工作流模型上,給出了一種工作流實現(xiàn)模型和節(jié)點的調(diào)度機制。對動態(tài)修改策略進行改進并支持流程實例的動態(tài)修改。論文首先給出系統(tǒng)支持的工作流模型和引擎調(diào)度機制,給出引擎的架構(gòu)及關(guān)鍵實現(xiàn)算法,并通過實例證明了該引擎的可用性。

圖5 經(jīng)理審批階段的主界面

圖6 總監(jiān)審批的主界面

本論文僅實現(xiàn)了對動態(tài)工作流的支持,未深入考慮動態(tài)流程的正確性問題,設(shè)計并實現(xiàn)流程模型及實例的正確性驗證算法是本作者下一步的工作。

[1]Fang Ru,Zou Zhile,Stratan C,et al.Dynamic support for BPEL process instance adaptation [C]//Hawaii,USA:Proceeding of service Computing,2008:327-334.

[2]Zeng Jin,Huai Jinpeng,Sun Hailong,et al.LiveMig:An approach to live instance migration in composite service evolution [C]//IEEE International Conference on Web Services,2009:679-686.

[3]ZENG Jin,SUN Hailong,LIU Xudong,et al.Dynamic evo- lution mechanism for trustworthy software based on service composition [J].Journal of Software,2010,21 (2):261-276 (in Chinese).[曾晉,孫海龍,劉旭東,等.基于服務(wù)組合的可信軟件動態(tài)演化機制 [J].軟件學(xué)報,2010,21 (2):261-276.]

[4]SONG Wei,MA Xiaoxing,HU Hao,et al.Dynamic evolution of processes in process-aware information system [J].Journal of Software,2011,22 (3):417-438 (in Chinese).[宋巍,馬曉星,胡昊,等.過程感知信息系統(tǒng)中過程的動態(tài)演化過程感知信息系統(tǒng)中過程的動態(tài)演化 [J].軟件學(xué)報,2011,22 (3):417-438.]

[5]SONG Wei,MA Xiaoxing,LU Jian.Instance migration in dynamic evolution of web service compositions[J].Chinese Journal of Computers,2009,32 (9):1816-1831 (in Chinese).[宋巍,馬曉星,呂建.Web服務(wù)組合動態(tài)演化的實例可遷移性 [J].計算機學(xué)報,2009,32 (9):1816-1831.]

[6]XU Gang,SONG Wei,HU Hao,et al.Design and implementation of process system supporting process dynamic updating [J].Computer Sciences,2012,39 (11A):434-439 (in Chinese).[徐剛,宋巍,胡昊,等.一種支持過程動態(tài)更新的過程系統(tǒng)設(shè)計與實現(xiàn) [J].計算機科學(xué),2012,39 (11A):434-439.]

[7]Baird R,Jorgenson N,Gamble R.Self-adapting workflow reconfiguration [J].Journal of Systems and Software,2011,84 (3):510-524.

[8]ZHAN Zhen.The research and implementation of dynamic workflow technology based on.net[D].Wuhan:Huazhong University of Science and Technology,2012 (in Chinese).[詹振.基于.NET 的動態(tài)工作流技術(shù)的研究與實現(xiàn)[D].武漢:華中科技大學(xué),2012.]

[9]Yu G,Zhao P,Di L,et al.BPELPower—A BPEL execution engine for geospatial web services[J].Computers & Geosciences 2012,47:87-101.

[10]Romain R,Vitae M L,Vitae S R.OpenMOLE,a workflow engine specifically tailored for the distributed exploration of simulation models [J].Future Generation Computer Systems,2013,29 (8):1981-1990.

猜你喜歡
結(jié)點引擎實例
LEACH 算法應(yīng)用于礦井無線通信的路由算法研究
基于八數(shù)碼問題的搜索算法的研究
新海珠,新引擎,新活力!
三生 三大引擎齊發(fā)力
藍(lán)谷: “涉藍(lán)”新引擎
完形填空Ⅱ
完形填空Ⅰ
One?。牛睿纾椋睿濉。蹋澹妫糁皇O乱粋€引擎