0 引言
業(yè)務(wù)流程管理(Business Process Management,BPM)目前成為軟件分析師在分析企業(yè)目標(biāo)和信息溝通的重要工具,近年來更是廣泛地用于企業(yè)應(yīng)用集成(EntERPrise Application Integration,EAI)以及面向服務(wù)的體系結(jié)構(gòu)(Service Oriented Architecture,SOA)中,從而衍生出相關(guān)過程語言的標(biāo)準(zhǔn),作為模型在溝通及分析時(shí)的交換依據(jù)。業(yè)務(wù)流程建模符號(Business Process Modeling Notation,BPMN)是當(dāng)前諸多基于模型驅(qū)動的流程開發(fā)軟件所使用的用標(biāo)準(zhǔn)圖形來描述業(yè)務(wù)流程的重要標(biāo)準(zhǔn)。BPMN定義了一組建模符號,將這一組建模符號依照一定的邏輯連接起來,就可以完成業(yè)務(wù)流程的建模。BPMN建模直觀,易于理解且與平臺無關(guān)。業(yè)務(wù)處理執(zhí)行語言(Business Process Execution Language,BPEL)是一種用XML描述業(yè)務(wù)流程的語言,當(dāng)前許多流程引擎都支持BPEL流程的自動執(zhí)行,但是BPEL流程冗長、抽象,不適合業(yè)務(wù)流程分析師對業(yè)務(wù)流程的分析和設(shè)計(jì)。從而,更具體直觀的流程建模工具得到越來越多的人的青睞,比如:UML圖和BPMN圖。因此,需要一套映射規(guī)則,使得BPMN可以轉(zhuǎn)化為BPEL。
隨著新的BPMN標(biāo)準(zhǔn)的提出,以及業(yè)務(wù)流程模型復(fù)雜性的增加,按照一定的映射規(guī)則轉(zhuǎn)化成的BPEL更是千差萬別。當(dāng)前提出的BPMN到BPEL的映射主要有:基于塊結(jié)構(gòu)的轉(zhuǎn)化方法和以圖形結(jié)構(gòu)為基礎(chǔ)的轉(zhuǎn)化方法。Jane Koehler和Rainer所著的《Untangling Unstructured Cyclic Flows-A Solution Based on Continuations》在以上兩種主要映射規(guī)則的基礎(chǔ)上,介紹了事件--條件--動作(Event--Condition--Action,ECA)映射準(zhǔn)則。通過使用<onEvent>捕獲流程中的每一個(gè)活動,得到的BPEL過于繁瑣。鑒于BPEL中對結(jié)構(gòu)活動的支持,OUYANG.C等所著的《Translating BPMN to BPEL》在ECA映射方法的基礎(chǔ)上,提出基于“結(jié)構(gòu)元”的映射方法。將BPMN流程圖看成是由序列結(jié)構(gòu)元、排他結(jié)構(gòu)元、重復(fù)結(jié)構(gòu)元、并行結(jié)構(gòu)元、循環(huán)結(jié)構(gòu)元、異常結(jié)構(gòu)元、復(fù)雜結(jié)構(gòu)元和互循環(huán)結(jié)構(gòu)元這八種結(jié)構(gòu)元的嵌套和組合。每一種“結(jié)構(gòu)元”都對應(yīng)一定的BPMN塊結(jié)構(gòu)。但文獻(xiàn)并沒有對含有多網(wǎng)關(guān)的任意循環(huán)的復(fù)雜結(jié)構(gòu)元的映射提供有效的方法。
綜合以上映射方法,發(fā)現(xiàn)都存在以下缺點(diǎn):1)完善性。即在BPMN及BPEL循環(huán)中,對于任意的良構(gòu)的BPMN模型,是否都能準(zhǔn)確地映射。2)自動性。所有的代碼是否都能自動生成而不需要人為地添加和修改。本文主要針對含有復(fù)雜結(jié)構(gòu)循環(huán)的BPMN流程圖,對基于連續(xù)語義的映射算法進(jìn)行優(yōu)化和完善。
1 BPMN流程模型向BPEL的轉(zhuǎn)換
BPMN業(yè)務(wù)流程模型在現(xiàn)實(shí)的應(yīng)用中干變?nèi)f化,不可能一一對其進(jìn)行分析,解決映射問題的根本是研究組成這些業(yè)務(wù)流程模型的基本元素。Van der Aalst、Bartosz Kiepuszewaki等依據(jù)Petri網(wǎng)原理總結(jié)了21種工作流元素,這些元素能夠全面地對業(yè)務(wù)流程模型進(jìn)行描述。這21種工作流模式中,包含5種基本控制元素:順序(Sequence)、平行拆分(Parallel Split)、單合并(Single Merge)、排他選擇(Exclusive Choice)、平行合并(Synchronize Merge)。圖1羅列了這五種基本控制元素。
圖1 5種基本控制元素
幾乎所有的BPMN業(yè)務(wù)流程模型都可以簡化成由以上5種基本工作流元素嵌套而成。為了接下來描述的方便,選擇BPMN 2.0元模型的一個(gè)子集來作為接下來工作的基礎(chǔ)。
1.1 基于連續(xù)語義的流程建模
為了將含有非結(jié)構(gòu)循環(huán)的業(yè)務(wù)流程轉(zhuǎn)化為只支持含有單進(jìn)單出結(jié)構(gòu)循環(huán)的BPEL,可以為流程賦以連續(xù)語義。將流程模型表達(dá)的邏輯看成事件/狀態(tài)的組合,將流程當(dāng)前的狀態(tài)稱為“現(xiàn)態(tài)”。“連續(xù)”是指流程當(dāng)前狀態(tài)下的“次態(tài)”。John C.Reynolds所著的《Theories of programming languages》指出,實(shí)現(xiàn)連續(xù)語義的關(guān)鍵在于依照程序中指令的“動作”,為每條指令賦予一個(gè)函數(shù),且這一組函數(shù)的最終執(zhí)行結(jié)果應(yīng)當(dāng)和整個(gè)程序的執(zhí)行結(jié)果一致。然后,為程序的每一個(gè)中間狀態(tài)賦予一個(gè)額外的參數(shù),所有函數(shù)都是以這些參數(shù)為變量的。本文將這些參數(shù)稱為“連續(xù)參數(shù)”。“連續(xù)參數(shù)”的作用在于記錄程序從“現(xiàn)態(tài)”出發(fā),在執(zhí)行完一條指令的“動作”后,程序進(jìn)入“次態(tài)”的過程。
連續(xù)語義將流程邏輯歸納為四要素:“現(xiàn)態(tài)”、“條件”、“動作”和“次態(tài)”,目的是方便我們在規(guī)避流程中單個(gè)活動節(jié)點(diǎn)的具體執(zhí)行過程的前提下,描述當(dāng)前流程的邏輯。具體描述方法如下:1)為含有多于一個(gè)出度或者入度的節(jié)點(diǎn)賦以“連續(xù)參數(shù)”,記為Yi;2)為每一個(gè)活動節(jié)點(diǎn)賦以一個(gè)函數(shù),用于描述當(dāng)前節(jié)點(diǎn)的“現(xiàn)態(tài)”、“動作”、“條件”和“次態(tài)”,如圖2。
圖2 兩種流程模型
1.2 轉(zhuǎn)化方法
1)替代原則:用于減少變量和等式的個(gè)數(shù)。
Y0=invoke A;Y1
Y1=if(expLl) then Y2;
if(expL2) then Y3;
等價(jià)于:
Y0=invoke A;
if(expLl) then Y2;
if(expL2) then Y3;
2)因數(shù)分解原則:適用于等式右邊包含有多個(gè)if分支,且每分支的最后都包含有相同的連續(xù)變量Yi。將這些相同的連續(xù)變量合并成一個(gè),并添加一個(gè)新的BOOL值來消除重復(fù)的變量。
情況1:
Y1=invoke A;
if(expL1) then invoke B;Y2
{if(expL2) then Y2;}
endif
等價(jià)于:
Y1=invoke A;
if(expL1) then invoke B;
Pred:=(expLl)∨(¬(expL1)∧(expL2));
if Pred then Y2;
情況2:
Y1=if(expL1) then invoke A;
{if(expL2) then Y2;}
endif
if(expL3) then Y2;
等價(jià)于:
Y1=if(expLl) then invoke A;
Pred:=(expL3∨((expLl)∧(expL2));
if Pred then Y2;
3)參數(shù)消除原則:用于循環(huán)的消除。當(dāng)有相同的連續(xù)變量同時(shí)出現(xiàn)在等式的左右兩側(cè)時(shí),出現(xiàn)在等式右邊的Yi用repeat-while來取代,而取代的范圍則是從等號右邊開始一直到Y(jié)i的出現(xiàn)。
Y1=invoke A;
if(expL) then invoke C;
if(expL1) then Y2;
if(expL2) then invoke B;Y1
等價(jià)于:
Y1=repeat
{invoke A;
if(expL)then invoke C;
if(expL2)then invoke B;}
while(expL2);
if(expL1)then Y2;
4)if消除原則:將網(wǎng)狀分支進(jìn)行重寫,使之成為順序執(zhí)行的分支。
Y1=if(expL1) then Y2;
if(expL2) then Y3;
if(expL3) then Y4;
等價(jià)于:
Y1=if(expLl) then Y2;
if(expL2∧expL1) then Y3;
if(expL3∧expL1) then Y4;
1.3 轉(zhuǎn)化方法的使用與控制
1.2節(jié)中描述的四個(gè)轉(zhuǎn)化方法的優(yōu)先級依次下降。流程引擎將按照如下步驟判斷如何選擇合適的轉(zhuǎn)化方法:
1)記連續(xù)參數(shù)的個(gè)數(shù)為k。建立一張數(shù)據(jù)表,記錄函數(shù)集合中每一個(gè)“連續(xù)參數(shù)”在等式右邊出現(xiàn)的次數(shù),分別記為N1,N2,…,Nk(忽略Ni=0的參數(shù))。
2)對所有Ni=1的參數(shù)使用“替代原則”。并重復(fù)1)。
3)執(zhí)行完2)之后,若不再存在Ni=1的參數(shù),依照轉(zhuǎn)化規(guī)則的優(yōu)先級,依次判斷“因數(shù)分解原則”、“消除參數(shù)原則”、“if消除原則”中的某一個(gè)是否可以適用于等式。轉(zhuǎn)化完成后,依照1)、2)、3)的順序重復(fù)計(jì)算,直至N1=N2=…=Nk=0。
4)在所有“連續(xù)參數(shù)”出現(xiàn)次數(shù)均為零后,對得到的程序進(jìn)行簡化:先找出流程中的“同義”節(jié)點(diǎn)。“同義”節(jié)點(diǎn)是指無論流程如何流轉(zhuǎn),都必將執(zhí)行的節(jié)點(diǎn)。同義節(jié)點(diǎn)包含以下兩種節(jié)點(diǎn):1)“開始”和“結(jié)束”節(jié)點(diǎn)是每個(gè)流程必然要執(zhí)行的節(jié)點(diǎn),所以可以從流程中去除;2)存在中間節(jié)點(diǎn)Yi,若Yi屬于“同義”節(jié)點(diǎn),那么對于任意的中間節(jié)點(diǎn)Yk,有YkYi恒為真,從而可以消去YkYi。
2 案例分析
本章通過一個(gè)案例分析說明一個(gè)流程的執(zhí)行過程,并通過本文第l章闡述的映射方法,詳述BPMN模型到BPEL的映射過程。
圖3給出的是一個(gè)電子商務(wù)的購物過程。當(dāng)流程開始執(zhí)行時(shí),首先執(zhí)行活動(A)“選擇商品”。當(dāng)活動(A)執(zhí)行完畢,顧客可以選擇確認(rèn)購買當(dāng)前選中的商品,也可以選擇跳過商品的確認(rèn)直接進(jìn)入購物車,繼續(xù)選擇商品。流程引擎根據(jù)顧客的選擇,選擇執(zhí)行活動(B)“確認(rèn)商品”或執(zhí)行活動(C)“入購物車”。接著,當(dāng)之前的任意一條分支執(zhí)行完成,流程將繼續(xù)執(zhí)行活動(D)“提交訂單”,直到最后購物結(jié)束。當(dāng)然,一個(gè)完善的流程必須允許客戶在購買的任意一個(gè)環(huán)節(jié)中都可以自由地跳出此環(huán)節(jié),回退或者前進(jìn)到流程中的其他環(huán)節(jié)。比如:當(dāng)顧客準(zhǔn)備提交訂單時(shí),可能想要會退到購買環(huán)節(jié)重新選擇商品;又如:一個(gè)顧客可能想在提交訂單之前選擇多個(gè)商品,那么流程也應(yīng)該允許回退到“選擇商品”的環(huán)節(jié)。
圖3 網(wǎng)絡(luò)購物流程
因?yàn)榱鞒痰膹?fù)雜性、任意性,非結(jié)構(gòu)化的循環(huán)在一個(gè)流程中出現(xiàn)的幾率是非常大的。非結(jié)構(gòu)循環(huán)的特點(diǎn)即為含有超過一個(gè)入口或者出口的節(jié)點(diǎn)。比如,包含ABCD的循環(huán),該循環(huán)中節(jié)點(diǎn)A可以由Start、節(jié)點(diǎn)E或節(jié)點(diǎn)F觸發(fā)。相對于非結(jié)構(gòu)循環(huán),結(jié)構(gòu)循環(huán)的最大特點(diǎn)即為僅僅含有一個(gè)入口且僅有一個(gè)出口。我們將以上流程簡化,并為節(jié)點(diǎn)賦予連續(xù)參數(shù):Y1,Y2,…,Y8,如圖4。
圖4 含有連續(xù)參數(shù)的網(wǎng)絡(luò)購物流程
為每一個(gè)活動添加函數(shù)。具體見如下8個(gè)等式:
(1)Y1=Start;Y2;
(2)Y2=invoke A;Y3;
(3)Y3=if AB then Y4;
if AC then Y5;
(4)Y4=invoke B;Y5;
(5)Y5=invoke C;Y6;
(6)Y6=if CD then invoke D;Y7
endif;
if CEnd then Y8;
if CA then Y2;
if CB then Y4:
(7)Y7=if DB then Y4;
if DA then Y2:
if DEnd then Y8;
(8)Y8=End;
接下來,依照1.2節(jié)給出的轉(zhuǎn)化方法,對圖進(jìn)行轉(zhuǎn)化,具體步驟如下:
a)在流程引擎選擇某一個(gè)轉(zhuǎn)化規(guī)則之前,為流程中的“連續(xù)參數(shù)”建立一張數(shù)據(jù)表,記錄每一個(gè)“連續(xù)參數(shù)”在等式右邊出現(xiàn)的次數(shù),如表1。
表1 步驟a)后連續(xù)參數(shù)次數(shù)
b)記錄所有“連續(xù)參數(shù)”出現(xiàn)次數(shù)(0次除外)。對僅僅出現(xiàn)一次的“連續(xù)參數(shù)”使用“替代原則”,用于減少等式集中等式的數(shù)量。在本例中,使用“替代原則”,等式(2)中的Y3用等式(3)替代,等式(5)中的Y6用等式(6)替代,等式(6)中的Y7用等式(7)替代,得到新的等式(2)和(5):
(2)Y2=invoke A;
if AB then Y4:
if AC then Y5;
(5)Y5=invoke C;;
if CD then invoke D;
{ if DB then Y4;
if DA then Y2;
if DEnd then Y8;}
endif;
if CEnd then Y8;
if CA then Y2:
if CB then Y4;
c)步驟b)完成之后,對“連續(xù)參數(shù)”的出現(xiàn)次數(shù)重新統(tǒng)計(jì),如表2。
表2 步驟b)后連續(xù)參數(shù)次數(shù)
發(fā)現(xiàn)表2中沒有出現(xiàn)次數(shù)為1的“將來參數(shù)”。從而由優(yōu)先級關(guān)系,看是否能利用“因數(shù)分解”原則。發(fā)現(xiàn)Y2、Y4、Y8三個(gè)參數(shù)同時(shí)在等式(5)的右邊出現(xiàn)兩次,則對等式(5)采用“因數(shù)分解”原則,得到新的等式(5):
(5)Y5=invoke C;
if CD then invoke D;
if(CD∧DB)∨CB then Y4;
if(CD∧DA)∨CA then Y2;
if(CD∧DEnd)∨CEnd then End;
d)完成步驟c)后,對“連續(xù)參數(shù)”的出現(xiàn)次數(shù)重新統(tǒng)計(jì),如表3。
表3 步驟c)后連續(xù)參數(shù)次數(shù)
發(fā)現(xiàn)Y8出現(xiàn)的次數(shù)為1次,從而對Y8使用替代原則。發(fā)現(xiàn)此時(shí)Y2、Y4、Y5三個(gè)參數(shù)出現(xiàn)的次數(shù)同為2次,且均沒有出現(xiàn)在同一個(gè)等式的右邊。由最小化原則,最小化“invoke”活動出現(xiàn)的次數(shù):也可以選擇對“if”網(wǎng)關(guān)進(jìn)行最小化處理。但是考慮到若能減少“invoke”活動出現(xiàn)的次數(shù),就能相對減少流程對Web Service的調(diào)用操作,從而可以減少工作流代碼量。對Y2、Y4、Y5三個(gè)變量進(jìn)行觀察可以發(fā)現(xiàn),有Y4=invoke B;Y5。從而對Y4使用“替換原則”,將其代入等式(2)和(5):
(2)Y2=invoke A;
if AB then invoke B;Y5
if AC then Y5;
(5)Y5=invoke C;
if CD then invoke D:
if(CD∧DB)∨CB then invoke B;Y5
if(CD∧DA)∨CA then Y2;
if(CD∧DEnd)∨CEnd then End;
e)完成步驟d)后,對“連續(xù)參數(shù)”的出現(xiàn)次數(shù)重新統(tǒng)計(jì),如表4。
表4 步驟d)后連續(xù)參數(shù)次數(shù)
此時(shí)無法使用“替換原則”,從而考察“因數(shù)分解原則”,發(fā)現(xiàn)此原則可以在等式(2)中使用。進(jìn)而考察“參數(shù)消除原則”?梢园l(fā)現(xiàn),等式(5)的兩邊同時(shí)出現(xiàn)了變量Y5。從而對等式(5)使用“參數(shù)消除原則”,并對Y5使用“替代原則”。
(2)Y2=invoke A;
if AB then invoke B:
if AC∨AB then
{ repeat
{ invoke C;
if CD then invoke D:
if(CD∧DB)∨CB then invoke B;}
while(CD∧DB)∨CB;
if(CD∧DA)∨CA then Y2;
if(CD∧DEnd)∨CEnd then End;}
endif
f)步驟e)完成后,對“連續(xù)參數(shù)”的出現(xiàn)次數(shù)重新統(tǒng)計(jì),如表5。
表5 步驟e)后連續(xù)參數(shù)次數(shù)
此時(shí)發(fā)現(xiàn)變量Y2同時(shí)出現(xiàn)在等式(2)的兩邊,對等式(2)采用“消除參數(shù)原則”,并對變量Y2使用“替換原則”,并簡化流程:可以看到節(jié)點(diǎn)C是“同義”節(jié)點(diǎn),從而AC可以被刪去。同理,Start與End均可以忽略。得到化簡后的結(jié)果為:
(1)Y1=repeat
{ invoke A;
if AB then invoke B;
{ repeat
invoke C;
if CD then invoke D:
if(CD∧DB)∨CB then invoke B;
while(CD∧DB)∨CB;}
endif}
while(CA∨(CD∧DA));
映射到BPEL:
<process name=" ">
<sequence>
<repeatUntil>
<sequence>
<invoke name="A"/>
<if>
<condition>AB</condition>
<invoke name="B">
</if>
<repeatUntil>
<sequence>
<invoke name=?C1/>
<if>
<condition>CD</condition>
<invoke name="D"/>
<elseif>
<condition>(CD&DB) or CB</condition>
<invoke name="B">
</elself>
<condition>(not((CD&DB) or CB)))
</condition>
</sequnce>
</repeatUntil>
<condition>(not((CA or (CD&DA)))</condition>
</sequnee>
</repeatUntil>
</sequence>
</process>
3 結(jié)語
由于業(yè)務(wù)流程模型和執(zhí)行代碼在語義上的失配,以及業(yè)務(wù)流程模型的復(fù)雜性,業(yè)務(wù)流程模型到可執(zhí)行的工作流代碼的轉(zhuǎn)換成為了業(yè)務(wù)流程建模的重要研究課題之一。本文在已有的模型轉(zhuǎn)化方法的基礎(chǔ)之上,面向BPEL 2.0規(guī)范,將基于連續(xù)語義的轉(zhuǎn)化方法進(jìn)行了擴(kuò)充和改進(jìn),并用形式化的方法對基于連續(xù)語義的轉(zhuǎn)化方法進(jìn)行了描述。轉(zhuǎn)化的過程大體可以概括為流程表達(dá)的邏輯建模,照轉(zhuǎn)化規(guī)則化簡流程邏輯模型,將化簡后流程邏輯模型轉(zhuǎn)化為BPEL。依照這三個(gè)步驟,解決了含有非結(jié)構(gòu)循環(huán)的復(fù)雜流程模型的映射問題。本文僅從理論角度討論了的業(yè)務(wù)流程模型一個(gè)子集的執(zhí)行及轉(zhuǎn)化過程,如何實(shí)現(xiàn)轉(zhuǎn)化規(guī)則在流程引擎中的應(yīng)用是接下來研究的重點(diǎn)。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.oesoe.com/
本文標(biāo)題:基于連續(xù)語義的業(yè)務(wù)流程模型的轉(zhuǎn)換
本文網(wǎng)址:http://www.oesoe.com/html/consultation/10820510581.html