(中國(guó)科學(xué)院 軟件研究所 軟件工程技術(shù)中心, 北京 100080)
摘要:隨著WS-BPEL2.0規(guī)范標(biāo)準(zhǔn)的提出,現(xiàn)有的BPMN到BPEL的組件轉(zhuǎn)換方法已不再適用。為了適應(yīng)BPEL的變化,對(duì)組件的轉(zhuǎn)換進(jìn)行改動(dòng)和擴(kuò)展,對(duì)錯(cuò)誤處理活動(dòng)在語(yǔ)義上提供支持,并且提供了顯式的事務(wù)特性支持。這種設(shè)計(jì)已經(jīng)在中國(guó)科學(xué)院軟件研究所軟件工程中心研制的OnceBPD建模工具中得到實(shí)現(xiàn),并在實(shí)際運(yùn)用中檢驗(yàn)了其可用性。
關(guān)鍵詞:業(yè)務(wù)流程管理; 模型轉(zhuǎn)換; 業(yè)務(wù)流程建模符號(hào); 業(yè)務(wù)流程執(zhí)行語(yǔ)言
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)志碼:A
文章編號(hào):1001-3695(2008)11-3363-04
Model transformation from BPMN to BPEL2.0
WEI Ming, XIA Yong-lin, WEI Jun
(Technology Center of Software Engineering, Institute of Software, Chinese Academy of Sciences, Beijing 100080, China)
Abstract:The approaches of the BPMN to BPEL1.1 transformation existed were not applicable when the BPEL2.0 standard was proposed. In order to adapt to the changes of BPEL, the existed approaches need change. This article developed the transformation of the component, proposed the semantic of the fault handlers activity, and provided the apparently support of the transaction. This design has been implemented in the OnceBPD modeling system developed by us, and its usability has also been proved in the actual usage.
Key words:BPM(business process management); model transformation; BPMN(business process modeling notation); BPEL
0引言
隨著業(yè)務(wù)流程管理(BPM)、面向服務(wù)的架構(gòu)(service-oriented architecture,SOA)和Web服務(wù)等技術(shù)日益成熟,業(yè)務(wù)流程再一次成為人們關(guān)注的重點(diǎn)。現(xiàn)代BPM的一個(gè)重要特點(diǎn)就是能夠?qū)⒏鞣NWeb服務(wù)編排成可執(zhí)行的業(yè)務(wù)流程。基于業(yè)務(wù)流程的服務(wù)組合建模是目前常見(jiàn)的建模方法。業(yè)務(wù)流程規(guī)范是整個(gè)流程層的基礎(chǔ)和核心內(nèi)容,目前有很多種規(guī)范標(biāo)準(zhǔn)。主要分為兩種:a)基于有向圖,適合業(yè)務(wù)流程設(shè)計(jì)人員理解,如BPMN、BPML、XPDL等;b)基于塊結(jié)構(gòu)語(yǔ)言,適合流程引擎解釋執(zhí)行,如WS-BPEL。其中WS-BPEL已經(jīng)事實(shí)上成為業(yè)務(wù)流程運(yùn)行時(shí)描述語(yǔ)言的標(biāo)準(zhǔn)。
由于業(yè)務(wù)流程的復(fù)雜性,需要有可視化的建模工具來(lái)支持用戶(hù)的設(shè)計(jì)和實(shí)現(xiàn)Web服務(wù)組合。目前服務(wù)組合建模工具大都是針對(duì)BPEL規(guī)范的,但是這會(huì)帶來(lái)兩個(gè)問(wèn)題:a)難以被業(yè)務(wù)人員理解和使用。這是因?yàn)榻9ぞ邔?shí)現(xiàn)方式各不相同,對(duì)BPEL各元素的圖形表示沒(méi)有統(tǒng)一的定義。b)BPEL是類(lèi)結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言,不夠直觀簡(jiǎn)潔。從設(shè)計(jì)、開(kāi)發(fā)到管理監(jiān)控都增加了復(fù)雜度,降低了工作效率。
為了提高業(yè)務(wù)人員對(duì)業(yè)務(wù)流程的建模效率,而輸出的模型又能適合各種支撐軟件運(yùn)行環(huán)境,BPMI(business process mode-ling integration)組織提出了業(yè)務(wù)流程建模符號(hào)(BPMN),統(tǒng)一定義了各種元素的圖形表示,便于業(yè)務(wù)人員的理解。BPMN已被OMG(Object Modeling Group)接受為正式標(biāo)準(zhǔn),加速了其在業(yè)務(wù)流程可視化建模方向的發(fā)展。BPMN規(guī)范適于定義平臺(tái)無(wú)關(guān)模型,即業(yè)務(wù)流程模型。
業(yè)務(wù)流程執(zhí)行語(yǔ)言WS-BPEL(Web services business process execution language for Web services)是專(zhuān)為Web服務(wù)組合描述而定制的一項(xiàng)規(guī)范標(biāo)準(zhǔn),目前已成為業(yè)界的規(guī)范標(biāo)準(zhǔn)。很多執(zhí)行引擎支持BPEL,并且關(guān)聯(lián)上圖形編輯工具。然而,支持這些工具的符號(hào)直觀地反映基本代碼,迫使用戶(hù)以BPEL結(jié)構(gòu)(如塊結(jié)構(gòu)的活動(dòng)和語(yǔ)法制約環(huán)節(jié))來(lái)解釋。實(shí)踐表明,目前的BPEL抽象級(jí)別不適合業(yè)務(wù)流程分析員和設(shè)計(jì)師。
模型轉(zhuǎn)換是業(yè)務(wù)流程建模的關(guān)鍵,從BPMN到BPEL模型轉(zhuǎn)換就是平臺(tái)無(wú)關(guān)模型向平臺(tái)相關(guān)模型的轉(zhuǎn)換。但是這兩個(gè)模型是兩種不同類(lèi)型的流程模型,即基于有向圖和基于控制結(jié)構(gòu)的語(yǔ)言。這種轉(zhuǎn)換需要滿(mǎn)足三個(gè)目標(biāo):a)自動(dòng)轉(zhuǎn)換,而不是通過(guò)人手工操作;b)完整性,對(duì)良構(gòu)定義的任意BPMN模型都能轉(zhuǎn)換成BPEL模型;c)正確性,轉(zhuǎn)換得到的BPEL文件保證是正確的,可以直接在BPEL引擎中執(zhí)行。
WS-BPEL2.0推出后,一些結(jié)構(gòu)化活動(dòng)進(jìn)行了改動(dòng),本文將針對(duì)這些改動(dòng)對(duì)組件的轉(zhuǎn)換進(jìn)行修改和擴(kuò)展,使這套方法能夠?qū)PMN模型轉(zhuǎn)換到BPEL2.0模型。在對(duì)事務(wù)處理上,BPEL沒(méi)有顯式支持,在對(duì)BPEL擴(kuò)展了的事務(wù)基礎(chǔ)上,通過(guò)轉(zhuǎn)換使BPMN也能夠支持事務(wù),本文也給出了說(shuō)明。
1BPMN以及BPEL2.0擴(kuò)展
11BPD核心元素
由于BPMN模型中有些元素?zé)o法轉(zhuǎn)換成BPEL模型的元素[1],筆者重點(diǎn)考慮流程控制方面的轉(zhuǎn)換。BPMN使用BPD(business process diagram)描述一個(gè)業(yè)務(wù)流程,由BPMN元素組成。筆者只考慮核心BPMN元素,如圖1所示。核心元素分為兩種,即流對(duì)象和連接線。流對(duì)象包括事件、任務(wù)、子流程和路由。連接線是順序流。
Start event(開(kāi)始事件):?jiǎn)?dòng)流程。
Intermediate message event(消息中間事件):在流程運(yùn)行期間,一個(gè)消息到達(dá)事件。
Intermediate timer event(時(shí)間中間事件):在流程運(yùn)行期間,一個(gè)特定的時(shí)間到期事件。
Intermediate error event(異常中間事件):在流程運(yùn)行期間,一個(gè)異常發(fā)生的事件。
End event(結(jié)束事件):流程結(jié)束。
Task(任務(wù)):是一個(gè)自動(dòng)執(zhí)行的活動(dòng)節(jié)點(diǎn),代表流程中需要執(zhí)行的任務(wù)。
SubProcess(子流程):多個(gè)活動(dòng)的組合。
Sequence flow(順序流、連接線或邊):連接兩個(gè)活動(dòng),表示它們的順序運(yùn)行關(guān)系。
Parallel fork gateway(并發(fā)分支路由):創(chuàng)建并發(fā)運(yùn)行的多路分支。
Parallel join gateway(并發(fā)匯聚路由):將并發(fā)運(yùn)行的多路分支匯聚成一路。
Data-based XOR decision gateway(基于條件的互斥分支路由):根據(jù)條件,從后續(xù)多路分支中選擇一路分支執(zhí)行。
XOR merge gateway(互斥匯聚路由):多路的進(jìn)入分支中,只要有一路到達(dá)就繼續(xù)向后運(yùn)行。
Event-based XOR decision gateway(基于事件的互斥分支路由):根據(jù)到達(dá)的事件,從后續(xù)多路分支中選擇一路分支執(zhí)行。只能連接消息中間事件、時(shí)間中間事件和接收消息任務(wù)這三種流對(duì)象。
Exception flow(異常流):當(dāng)一個(gè)活動(dòng)發(fā)生異常,捕捉這個(gè)異常,并通過(guò)異常流執(zhí)行異常處理活動(dòng)。
12WS-BPEL2.0的擴(kuò)展
WS-BPEL描述的業(yè)務(wù)流程指定了一組Web服務(wù)操作的可能執(zhí)行順序及其相互依賴(lài)關(guān)系,提供Web服務(wù)的合作伙伴機(jī)器在業(yè)務(wù)流程中扮演的角色、服務(wù)間共享的數(shù)據(jù)、故障及補(bǔ)償處理等一系列問(wèn)題[1]。WS-BPEL定義了一系列相應(yīng)的活動(dòng),這些活動(dòng)包括基本活動(dòng)和結(jié)構(gòu)活動(dòng)[2]。
本文主要從結(jié)構(gòu)方面來(lái)關(guān)注BPEL2.0規(guī)范的變化[2]。在規(guī)范中改變的基本活動(dòng)如下:
a)增加rethrow活動(dòng),用于在faultHandler中拋出故障;
b)增加extensionActivity活動(dòng),引入符合標(biāo)準(zhǔn)的新節(jié)點(diǎn), 給擴(kuò)展提供了新方法;
c)用exit代替teminate活動(dòng),用于結(jié)束業(yè)務(wù)流程實(shí)例。
規(guī)范中改變了的結(jié)構(gòu)活動(dòng)如下:
a)用if代替switch活動(dòng),通過(guò)判斷條件選擇執(zhí)行活動(dòng);
b)增加repeatUntil活動(dòng),先執(zhí)行循環(huán)體,再判斷循環(huán)條件,與while活動(dòng)共同處理循環(huán);
c)增加forEach活動(dòng),通過(guò)設(shè)置多實(shí)例變量來(lái)執(zhí)行scope,可以循環(huán)也可以并發(fā)執(zhí)行。
本文將根據(jù)規(guī)范中結(jié)構(gòu)方面的改動(dòng)對(duì)轉(zhuǎn)換方法進(jìn)行擴(kuò)展。
2相關(guān)工作比較
文獻(xiàn)[3]指出BPMN創(chuàng)建了一個(gè)標(biāo)準(zhǔn)的橋梁,跨越了業(yè)務(wù)流程設(shè)計(jì)和業(yè)務(wù)流程實(shí)現(xiàn)之間的鴻溝。文章提供了一個(gè)簡(jiǎn)單但是有效的旅行登記示例,展現(xiàn)BPMN模型如何生成一個(gè)BPEL流程。但是采用的是人工方式,沒(méi)有提供一個(gè)通用的自動(dòng)解決方案。
文獻(xiàn)[4,5]提出了一種將BPMN核心元素轉(zhuǎn)換成BPEL語(yǔ)言的技術(shù)。轉(zhuǎn)換語(yǔ)言生成的代碼具有可讀性,通過(guò)發(fā)現(xiàn)BPMN模型中的模式,轉(zhuǎn)換成BPEL語(yǔ)言的結(jié)構(gòu)模塊。算法同時(shí)也支持非結(jié)構(gòu)化的BPMN模型轉(zhuǎn)換,因此算法能夠支持BPMN核心元素的任意拓?fù)浣Y(jié)構(gòu)。文章定義了七種結(jié)構(gòu)化組件來(lái)對(duì)應(yīng)BPEL中的結(jié)構(gòu)化活動(dòng),其提供的轉(zhuǎn)換方法為:每次查找到最小的一個(gè)組件,若是結(jié)構(gòu)化組件,規(guī)約并在規(guī)約過(guò)程中進(jìn)行轉(zhuǎn)換;若是非循環(huán)非結(jié)構(gòu)化組件,通過(guò)control link機(jī)制來(lái)規(guī)約并轉(zhuǎn)換;如果是循環(huán)非結(jié)構(gòu)化組件,通過(guò)基于消息流的event-rule機(jī)制的表達(dá)控制邏輯,那么就能夠表達(dá)任意拓?fù)浣Y(jié)構(gòu)的流程。
當(dāng)WS-BPEL2.0提出后,結(jié)構(gòu)化活動(dòng)進(jìn)行了改動(dòng),用if代替switch活動(dòng),增加repeatUntil活動(dòng)和forEach活動(dòng)。文獻(xiàn)[4,5]中的switch和repeat這兩種結(jié)構(gòu)化組件的轉(zhuǎn)換需要改動(dòng)才能適應(yīng)BPEL2.0。文章中并沒(méi)有提到能夠轉(zhuǎn)換得到forEach活動(dòng)的結(jié)構(gòu)化組件,也需要進(jìn)行改進(jìn)。另外文章只是對(duì)BPMN很少一部分的元素進(jìn)行轉(zhuǎn)換。這里本文擴(kuò)充了元素的轉(zhuǎn)換,如faultHandler中的rethrow,并提供了語(yǔ)義支持。BPEL2.0已經(jīng)具備手工定義的異常處理和補(bǔ)償功能[2],并且也對(duì)以前的版本作了改進(jìn),但是仍然沒(méi)有顯式的事務(wù)特性支持,文章中沒(méi)有提到對(duì)事務(wù)支持的說(shuō)明,也是個(gè)很好的擴(kuò)展之處。
3結(jié)構(gòu)化組件轉(zhuǎn)換擴(kuò)展
下面就針對(duì)文獻(xiàn)[4,5]提出的轉(zhuǎn)換方法的不足來(lái)進(jìn)行擴(kuò)展。首先是組件轉(zhuǎn)換的擴(kuò)展,針對(duì)BPEL2.0對(duì)結(jié)構(gòu)化活動(dòng)的改動(dòng)來(lái)重新定義一部分結(jié)構(gòu)化組件及其轉(zhuǎn)換。然后,擴(kuò)展了faultHandler,增加了rethrow元素的轉(zhuǎn)換,解決了在〈catch〉中進(jìn)行錯(cuò)誤處理時(shí)發(fā)生異常的情況。最后本文引入了事務(wù)擴(kuò)展機(jī)制,以顯式支持事務(wù)特性。
31組件轉(zhuǎn)換的擴(kuò)展
BPEL2.0提出后,主要影響了文獻(xiàn)[4,5]中提出的結(jié)構(gòu)化組件的轉(zhuǎn)換方法,而非結(jié)構(gòu)化組件的轉(zhuǎn)換仍然適用。下面本文將從結(jié)構(gòu)化組件的轉(zhuǎn)換來(lái)說(shuō)明。
BPEL語(yǔ)言中定義了結(jié)構(gòu)活動(dòng),如果BPMN組件能夠合理地轉(zhuǎn)換成這些活動(dòng),那么該組件就是結(jié)構(gòu)組件。在BPEL1.1中定義了五種結(jié)構(gòu)活動(dòng),分別為sequence、switch、while、pick和flow。在文獻(xiàn)[4,5]中提出了相應(yīng)的七種結(jié)構(gòu)化組件:sequence組件(sequence-component)、flow組件(flow-component)、switch組件(switch-component)、pick組件(pick-component)、while組件(while-component)、repeat組件(repeat-component)和repeatWhile組件(repeat+while-component)。
BPEL2.0中提出的結(jié)構(gòu)活動(dòng)為sequence、if、while、repeatUntil、pick、flow和forEach。相比于BPEL1.1規(guī)范,其中的sequence、while、pick和flow沒(méi)有變化,用if活動(dòng)代替了switch,增加了repeatUntil和forEach活動(dòng)。RepeatUntil用于repeat組件,先執(zhí)行循環(huán)中的活動(dòng),再判斷是否滿(mǎn)足循環(huán)條件,repeatUntil活動(dòng)和while活動(dòng)共同處理循環(huán)組件。ForEach用來(lái)處理scope的執(zhí)行,尤其解決了scope并發(fā)執(zhí)行的問(wèn)題[6],之前由于只有flow活動(dòng)支持并發(fā)執(zhí)行,但是如果在運(yùn)行態(tài)才能確定并發(fā)個(gè)數(shù)的話(huà),那么將無(wú)法靜態(tài)將BPMN轉(zhuǎn)換到BPEL。引入了forEach之后,無(wú)論scope是并發(fā)執(zhí)行還是循環(huán)執(zhí)行,能夠通過(guò)設(shè)置循環(huán)變量來(lái)動(dòng)態(tài)控制執(zhí)行次數(shù)。
組件能夠自然并且直觀地轉(zhuǎn)換成這些結(jié)構(gòu)活動(dòng)的話(huà),那么這個(gè)組件就是結(jié)構(gòu)化組件。對(duì)于以前的七種結(jié)構(gòu)化組件,保留其中的五種:sequence、flow、pick、while和repeatWhile組件。作出的改動(dòng)是將switch組件替換為if組件;改變r(jià)epeat組件的轉(zhuǎn)換;增加forEach組件。改動(dòng)后的結(jié)構(gòu)化組件如圖2所示。
1)If組件在BPEL2.0中用if活動(dòng)替代了結(jié)構(gòu)化活動(dòng)switch,邏輯結(jié)構(gòu)更加清晰,更利于理解。下面也將根據(jù)BPEL2.0規(guī)范來(lái)進(jìn)行組件轉(zhuǎn)換的改動(dòng),使轉(zhuǎn)換后的代碼能夠在BPEL2.0引擎中執(zhí)行。
2)Repeat組件在BPEL2.0中增加了結(jié)構(gòu)化活動(dòng)repeatUntil。在BPEL1.1中,循環(huán)結(jié)構(gòu)只能用while活動(dòng)來(lái)表示。在文獻(xiàn)[4,5]中提出BPMN的repeat組件是通過(guò)轉(zhuǎn)換成while活動(dòng)來(lái)實(shí)現(xiàn)的,在BPEL代碼中不能直觀表示出repeat活動(dòng)。直接將repeat組件轉(zhuǎn)換為repeatUntil活動(dòng),可以很清晰地看到BPEL代碼,可讀性也大大增強(qiáng)。
3)ForEach組件BPEL2.0中引入了結(jié)構(gòu)化活動(dòng)forEach,解決了scope并發(fā)執(zhí)行的問(wèn)題[6],并且能夠通過(guò)設(shè)置循環(huán)變量來(lái)動(dòng)態(tài)控制執(zhí)行次數(shù)。另外,無(wú)論scope是并發(fā)執(zhí)行還是循環(huán)執(zhí)行,forEach活動(dòng)均能方便地設(shè)置并發(fā)條件或循環(huán)條件,給予了很好的支持。
圖4的兩行分別是task和subProcess的情形。
圖4(a)(b)左圖代表loop循環(huán);(a)(b)右圖代表multi-instance,需要并發(fā)執(zhí)行。轉(zhuǎn)換到BPEL代碼如下:
需要說(shuō)明的是,如果是task類(lèi)型,那么〈scope〉內(nèi)部只需要一個(gè)〈invoke〉,如果是子流程,〈scope〉內(nèi)部是其內(nèi)容。特別地,對(duì)于multi-instance需要并發(fā)執(zhí)行,應(yīng)該設(shè)置〈forEach〉的屬性parall為“yes”。
比較以上八個(gè)組件的轉(zhuǎn)換,相比于BPEL1.1規(guī)范,改動(dòng)了if、repeat、forEach的轉(zhuǎn)換以適應(yīng)新的標(biāo)準(zhǔn),其中引入forEach還解決了以前難以解決的問(wèn)題。
32Fault handler的擴(kuò)展
在核心BPD元素中,筆者定義了exception flow。這個(gè)元素用來(lái)表示BPEL中的fault handler。當(dāng)一個(gè)invoke或scope中出錯(cuò)時(shí),需要fault handler進(jìn)行錯(cuò)誤處理。當(dāng)〈catch〉捕捉到相應(yīng)的錯(cuò)誤時(shí),進(jìn)而對(duì)錯(cuò)誤數(shù)據(jù)進(jìn)行操作,當(dāng)還沒(méi)有完成所有錯(cuò)誤處理操作時(shí),這些操作中發(fā)生異常,而這時(shí)需要恢復(fù)原來(lái)的錯(cuò)誤數(shù)據(jù),并將其重新拋出。這個(gè)在BPEL1.1中沒(méi)有相對(duì)應(yīng)的活動(dòng),難以實(shí)現(xiàn)。而在BPEL2.0規(guī)范中增加了〈rethrow〉活動(dòng),解決了這個(gè)問(wèn)題,只要在〈catch〉下〈rethrow〉原來(lái)的錯(cuò)誤數(shù)據(jù)即可。相應(yīng)的BPMN表示為如圖5所示。
用于錯(cuò)誤處理的活動(dòng)又拋出了異常,但是沒(méi)有處理這個(gè)異常的活動(dòng),就將其轉(zhuǎn)換為〈rethrow〉活動(dòng)。相應(yīng)的BPEL代碼如下:
33事務(wù)擴(kuò)展
BPEL2.0已經(jīng)具備手工定義的異常處理和補(bǔ)償功能[2],并且也對(duì)以前的版本作了改進(jìn),但是沒(méi)有顯式的事務(wù)特性支持,如用戶(hù)無(wú)法明確聲明開(kāi)始一個(gè)事務(wù)或提交一個(gè)事務(wù)。在BPMN中,可以聲明子流程為事務(wù)域。如果要轉(zhuǎn)換到BPEL,必須要求BPEL引擎能夠提供事務(wù)特性支持,并且按照BPEL引擎的機(jī)制來(lái)轉(zhuǎn)換。
可以在BPEL引擎中引入事務(wù)特性支持,具備目前其他BPEL引擎如ActiveBPEL、BPWS4J等不具備的事務(wù)處理能力,支持用戶(hù)顯式聲明事務(wù)域、支持事務(wù)的自動(dòng)提交和回滾、支持用戶(hù)可選擇的多種事務(wù)協(xié)議。
BPEL引擎為每個(gè)WS-BPEL process增加了一個(gè)稱(chēng)為transaction.xml的部署描述符文件。在該文件中,為WS-BPEL中的process、scope、parnterLink等對(duì)象分別定義了不同的事務(wù)屬性。通過(guò)這種方式,使得用戶(hù)可以直接通過(guò)配置方式指定服務(wù)復(fù)合的事務(wù)屬性,也使得流程設(shè)計(jì)工具的事務(wù)屬性自動(dòng)生成,更加方便。BPEL引擎還擴(kuò)充WS-BPEL的語(yǔ)法元素,使得用戶(hù)可以管理事務(wù)上下文。在現(xiàn)有的basic activity類(lèi)型外新增一種事務(wù)處理的basic activity,名稱(chēng)為transaction。該activity可以包含若干屬性。其中action屬性和protocol屬性是必需的。Action屬性用于確定其子功能,protocol屬性用于設(shè)置事務(wù)協(xié)議,其余屬性則視action屬性而定。根據(jù)action 屬性的不同取值,事務(wù)處理功能一共包括事務(wù)創(chuàng)建(new)、事務(wù)提交(confirm)、事務(wù)回滾(cancel)、注冊(cè)為事務(wù)參與者(register)等。
BPMN規(guī)范中為subProcess提供了isTransaction屬性來(lái)設(shè)置其是否為一個(gè)事務(wù)域,并且提供了transaction屬性,包括transactionProtocol和transactionMethod。其中transactionProtocol屬性可以直接轉(zhuǎn)換到BPEL事務(wù)擴(kuò)展中的protocol屬性,而transactionMethod屬性是設(shè)置當(dāng)取消(cancel)一個(gè)事務(wù)時(shí)采取的措施,可以轉(zhuǎn)換到BPEL擴(kuò)展中的事務(wù)動(dòng)作,默認(rèn)為補(bǔ)償(compensate)。如果設(shè)置subProcess為一個(gè)事務(wù)域,對(duì)應(yīng)的BPEL中應(yīng)該在scope開(kāi)始處創(chuàng)建一個(gè)事務(wù)〈transaction action=“new” protocol=“WS-transaction”/〉,并在末尾處加上提交事務(wù)〈transactionaction=“confirm”/〉。如果事務(wù)運(yùn)行過(guò)程中被取消或發(fā)生錯(cuò)誤等,需要回滾事務(wù),則在catch處進(jìn)行事務(wù)回滾:〈transactionaction=“cancel”〉。
相應(yīng)的BPEL代碼如下:
以上關(guān)于BPEL引擎的事務(wù)特性擴(kuò)展,都已經(jīng)在中國(guó)科學(xué)院軟件所軟件工程中心研制的OnceBPEL引擎中得到實(shí)現(xiàn)[7]。加上這些標(biāo)簽后,BPEL引擎能夠?qū)λ暶魇聞?wù)進(jìn)行處理。將轉(zhuǎn)換的BPEL代碼運(yùn)行于BPEL流程引擎中,OnceBPD也能夠支持事務(wù)。圖6為OnceBPD建模工具。
4結(jié)束語(yǔ)
BPMN到BPEL的模型轉(zhuǎn)換是業(yè)務(wù)流程建模的重要研究課題之一。本文在已有的模型轉(zhuǎn)換方法的基礎(chǔ)上,面向BPEL2.0規(guī)范,將結(jié)構(gòu)化組件的轉(zhuǎn)換作了改動(dòng),以適應(yīng)新的規(guī)范標(biāo)準(zhǔn),并解決了多實(shí)例并發(fā)執(zhí)行問(wèn)題。本文還對(duì)fault handler進(jìn)行了擴(kuò)展,增加了到rethrow的轉(zhuǎn)換,并提供了顯式的事務(wù)特性支持。為了方便本文轉(zhuǎn)換,筆者定義了核心BPD的概念,進(jìn)一步的工作就是要擴(kuò)大對(duì)BPMN等多元素的支持,并且在語(yǔ)義方面(如Web服務(wù))也有很多需要擴(kuò)充以支持BPEL2.0。
參考文獻(xiàn):
[1]王莉,劉厚泉,吳雪峰. 基于BPEL的業(yè)務(wù)流程管理系統(tǒng)架構(gòu)的研究與應(yīng)用[J]. 計(jì)算機(jī)工程與設(shè)計(jì), 2006, 27(18):3507-3510.
[2]CURBERA F, GOLAND Y, KLEIN J, et al. Business process execution language for Web services, version2.0[EB/OL]. (2007-04)[2007-11]. http://docs.oasis-open.org/wsbpel/2.0/OS/wsbpel-v2.0-OS.html.
[3]WHITE S. Using BPMN to model a BPEL process[J].BP Trends, 2005, 3(3):1-18.
[4]OUYANG C, MARLON D, WM P A, et al. From business process models to process-oriented software systems: the BPMN to BPEL way[EB/OL]. (2006-10)[2007-11]. http://eprints.qut.edu.au/archive/00005266/.
[5]OUYANG C, WM P A, MARLON D, et al. Translating BPMN to BPEL[EB/OL]. (2006-02)[2007-11]. http://eprints.qut.edu.au/ archive /00003615/ .
[6]DIJKMAN M, MARLON D, OUYANG C. Formal semantics and automated analysis of BPMN process models[EB/OL].(2007-01)[2007-11]. http://eprints.qut.edu.au/archive/ 00005969/ .
[7]孟陽(yáng). BPEL引擎事務(wù)處理框架的設(shè)計(jì)與實(shí)現(xiàn)[D]. 北京:中國(guó)科學(xué)院軟件研究所,2007.
[8]OMG. Business process modeling notation(BPMN) version 1.0, OMG final adopted specification[EB/OL]. (2006-02)[2007-11]. http://www.bpmn.org/ .