BPEL為何不是BPM的圣杯?
作者 Pierre Vigneras 譯者 胡鍵 發(fā)布于 2008年12月26日 上午2時(shí)32分
介紹
看看最新的文章和各類 BPM 解決方案,很容易讓人假定 BPEL 是實(shí)現(xiàn)工作流引擎時(shí)所使用的事實(shí)標(biāo)準(zhǔn)。從技術(shù)角度看,這可能相當(dāng)正確,但極少有人會(huì)說(shuō)BPEL能很容易地被終端用戶(即業(yè)務(wù)分析師)理解。在實(shí)踐中,他們無(wú)疑會(huì)首先選擇以符號(hào)(如 BPMN )為基礎(chǔ)的圖形化工具。本文將幫助讀者理解技術(shù)觀點(diǎn)(BPEL贊成派)和分析師觀點(diǎn)(BPMN贊成派)的差異。進(jìn)而,本文將解釋以BPEL為基礎(chǔ)的BPM 解決方案為何不是BPM問(wèn)題解決方案的大勢(shì)所趨,即使它們都能消除這種差異(因?yàn)樗鼈兺ǔ6继峁┝薆PMN到BPEL的映射)。我們將使用一個(gè)現(xiàn)實(shí)世界的例子來(lái)闡述我們的論點(diǎn)。
編程語(yǔ)言中的并行和結(jié)構(gòu)化
是一門結(jié)構(gòu)化語(yǔ)言,原因是它是基于“塊(Block)”的,這一點(diǎn)與諸如Java和C等這些傳統(tǒng)語(yǔ)言非常類似。這一特性部分源于它的前身:Microsoft的XLANG,它也是基于“塊(Block)”的。然而,BPEL的血統(tǒng)還包含了IBM的WSFL,而它對(duì)于我們的后續(xù)討論非常重要,因?yàn)樗趫D形的(因此是非結(jié)構(gòu)化的)。這樣我們就發(fā)現(xiàn):BPEL是一個(gè)結(jié)構(gòu)化(塊[Block])和非結(jié)構(gòu)化(控制鏈和事件)的混合體。而正是后者給結(jié)構(gòu)化的世界引入了一絲非結(jié)構(gòu)化的氣息……因而結(jié)論是,BPEL不是一門結(jié)構(gòu)化語(yǔ)言,就算它看起來(lái)像也無(wú)法改變這一事實(shí)。
相反,BPMN是一種天生就具有非結(jié)構(gòu)化特性的流程圖符號(hào)。不要對(duì)此表示懷疑。在BPMN規(guī)范 [BPMN06] 的11章(137頁(yè))中,它提供了一個(gè)從BPMN到BPEL的直接映射。一些BPMN編寫者(和用戶)認(rèn)為BPMN是一個(gè)以BPEL語(yǔ)言為基礎(chǔ)的簡(jiǎn)單GUI。這并不十分正確,在 BPMN FAQ 中這樣解釋道:
“BPEL能夠描述的流程拓?fù)湓O(shè)計(jì)時(shí)就存在局限,用BPMN可以表達(dá)的流程有可能無(wú)法映射到BPEL。”
本文將對(duì)于這句重要陳述給出一些根本細(xì)節(jié)。但在此之前先讓我們先關(guān)注一下結(jié)構(gòu)化和非結(jié)構(gòu)化語(yǔ)言對(duì)比。為什么這非常重要?主要原因在于,對(duì)非結(jié)構(gòu)化語(yǔ)言進(jìn)行代碼分析要遠(yuǎn)遠(yuǎn)難于結(jié)構(gòu)化語(yǔ)言(如Java、C,以及其他——就算不是全部——廣為使用的編程語(yǔ)言)。代碼分析的應(yīng)用范圍很廣,從錯(cuò)誤檢查(比如編譯器),到Bug檢測(cè)(如findbugs、死鎖檢測(cè)……)以及質(zhì)量檢查(如checkstyle)。
B?hm和Jacopini的一條重要法則 [BOHM66] (并在 Wikipedia上有通俗的解釋 )認(rèn)為:編程語(yǔ)言只消以3種方式組合子程序,它就能實(shí)現(xiàn)任何可計(jì)算功能。這三種控制結(jié)構(gòu)是:
- 先執(zhí)行子程序1,然后執(zhí)行子程序2(順序);
- 根據(jù)布爾變量的值執(zhí)行兩個(gè)子程序中的一個(gè)(選擇);
- 執(zhí)行一個(gè)子程序,直到布爾變量的值為真(循環(huán))。
這基本意味著任何(非結(jié)構(gòu)化的)流程圖都能夠轉(zhuǎn)化成一個(gè)結(jié)構(gòu)化的內(nèi)容。這形成了Dijkstra的論文《Go To語(yǔ)句是有害的》 [DIJKSTRA68] 的基礎(chǔ)。
盡管仍然還有關(guān)于“我們是否應(yīng)該允許非結(jié)構(gòu)化編程語(yǔ)言的存在”的爭(zhēng)論,但事實(shí)是:
-
世界上大多數(shù)的學(xué)生都被灌輸了結(jié)構(gòu)化語(yǔ)言;
-
使用最廣泛的編程語(yǔ)言是(非嚴(yán)格的)結(jié)構(gòu)化編程語(yǔ)言;
-
大多數(shù)非結(jié)構(gòu)化編程語(yǔ)言已經(jīng)引入了一些結(jié)構(gòu)化單元(BASIC,COBOL,F(xiàn)ORTRAN)。
因此一般而言,大多數(shù)程序員確實(shí)會(huì)關(guān)注結(jié)構(gòu)化編程,但是有時(shí)出于各種原因(主要是可讀性、維護(hù),有時(shí)是性能)會(huì)使用非結(jié)構(gòu)化語(yǔ)句(goto、jump、break、exceptions)。
業(yè)務(wù)分析師書寫的并行和非結(jié)構(gòu)化流程
業(yè)務(wù)分析師(BPM的終端用戶)必須處理現(xiàn)實(shí)世界 1 發(fā)生的事情,它不僅是非結(jié)構(gòu)化的,而且是高度并行的。這包含兩層含義:
- BPM的終端用戶通常都不是計(jì)算機(jī)工程師,也不是計(jì)算機(jī)科學(xué)家:他們使用為他們準(zhǔn)備的流程圖符號(hào)(這是最自然的)設(shè)計(jì)業(yè)務(wù)流程,因此是非結(jié)構(gòu)化的(并且是并行的,這才是重點(diǎn));
- 面對(duì)并行,非結(jié)構(gòu)化比結(jié)構(gòu)化更具有表現(xiàn)力。
第2點(diǎn)很重要的,它已被Kiepuszewski等人 [KIEPUSZEWSKI00] 正式證明了。事實(shí)上,存在有并行非結(jié)構(gòu)化的工作流不能夠被表示成并行結(jié)構(gòu)化的工作流的情況。而且,這種例子非常容易找到。看看下面這個(gè)使用BPMN符號(hào)的例子(用Intalio BPMN設(shè)計(jì)器創(chuàng)建):
在一個(gè)使用BPEL作為它底層格式的工具中,為了驗(yàn)證這個(gè)圖,需要?jiǎng)?chuàng)建一個(gè)單獨(dú)的池。我們隨后會(huì)討論這個(gè)問(wèn)題,但現(xiàn)在請(qǐng)重點(diǎn)關(guān)注名叫 “Employer”的池及其包含的6個(gè)活動(dòng)。只要一名新員工加入公司,一條工作流就會(huì)被啟動(dòng)。首先需要在人力資源數(shù)據(jù)庫(kù)中創(chuàng)建一條記錄。同時(shí),必須提供一個(gè)辦公室。一旦人力資源活動(dòng)完成,員工就得接受醫(yī)療檢查。在此期間,會(huì)提供給他一臺(tái)計(jì)算機(jī)。而這只能出現(xiàn)在:辦公室已經(jīng)安排好且賬戶已在來(lái)自人力資源數(shù)據(jù)庫(kù)的信息系統(tǒng)中創(chuàng)建好的情況下。在計(jì)算機(jī)已提供且醫(yī)療檢查已結(jié)束的情況下,員工就可以開(kāi)始工作了。當(dāng)然,你可能希望用不同的方式建模這條簡(jiǎn)單流程,但是有一點(diǎn)我需要在這里指出,你無(wú)法創(chuàng)建一個(gè)等同于 2 本流程的一個(gè)結(jié)構(gòu)化并行工作流,我的意思是,你永遠(yuǎn)也辦不到!我們都將使用這個(gè)簡(jiǎn)單的例子貫穿全文。
從這個(gè)學(xué)習(xí)中,我們得出第一個(gè)結(jié)論:
- 開(kāi)發(fā)者會(huì)很自然地使用順序的結(jié)構(gòu)化單元(塊[Block])編寫他們的程序;
- BPM用戶會(huì)很自然地使用非結(jié)構(gòu)化、并行的單元(圖形)設(shè)計(jì)他們的流程;
- 非結(jié)構(gòu)化、并行的工作流比結(jié)構(gòu)化、并行的工作流更具有表達(dá)力。
BPM用戶會(huì)設(shè)計(jì)出一些你無(wú)法用結(jié)構(gòu)化的并行工作流表達(dá)的工作流。更糟的是,它也出現(xiàn)在了 [KIEPUSZEWSKI00] 中,作者表示:就算并行、非結(jié)構(gòu)化工作流能夠轉(zhuǎn)換成并行、結(jié)構(gòu)化工作流,但這需要額外的變化和(或)節(jié)點(diǎn),以至于最終結(jié)果會(huì)導(dǎo)致對(duì)終端用戶來(lái)說(shuō)幾乎無(wú)法讀懂。我們很快會(huì)討論這個(gè)可讀性的問(wèn)題。
BPMN到BPEL的轉(zhuǎn)換
在文章 [OUYANG06] 中,作者提出了從BPMN到(可讀的)BPEL的自動(dòng)化轉(zhuǎn)換。由于規(guī)范中的一些不清晰語(yǔ)義,他們定義了一個(gè)BPMN的子集。因此,他們?cè)谖闹袥](méi)有考慮OR 網(wǎng)關(guān)(OR Gateway)和錯(cuò)誤中繼事件(Intermediate Events)。在待設(shè)計(jì)流程包含多個(gè)結(jié)束事件(End Event)的情況下,問(wèn)題就來(lái)了。因?yàn)檗D(zhuǎn)換工具沒(méi)有考慮它們,而把多個(gè)結(jié)束事件(End Event)工作流轉(zhuǎn)換成單結(jié)束事件(End Event)工作流的標(biāo)準(zhǔn)方法就是使用OR網(wǎng)關(guān)(OR Gateway)。算法大致如下:
- 盡量找出圖中可以直接映射到BPEL的已知模式(sequence、flow、pick、while……)。對(duì)于找到的每個(gè)模式,使用包含映射后BPEL代碼的簡(jiǎn)單任務(wù)來(lái)代替這些組件。
- 接著,盡量找到一些“準(zhǔn)結(jié)構(gòu)化”組件,采用大多數(shù)組件直接映射成BPEL結(jié)構(gòu)的方法,對(duì)它們進(jìn)行轉(zhuǎn)換。
- 接著,搜索非循環(huán)BPMN子模塊(僅僅包含順序流[sequence flow]和并行網(wǎng)關(guān)[parallel gateway])。對(duì)于它們,使用BPEL控制連接(control link)。
- 最后,剩下的部分使用BPEL事件。
其結(jié)果就是一個(gè)“盡量可讀的”等價(jià)BPEL流程。注意,我們總是可以使用BPEL中的事件來(lái)將BPMN轉(zhuǎn)換成BPEL。問(wèn)題是,其生成代碼根本就不可讀。因而,結(jié)論是將任何BPMN圖轉(zhuǎn)換成一個(gè)等價(jià) 3 BPEL流程的算法確實(shí)存在,只是結(jié)果是“盡量可讀的” 4 。
Intalio的用例
注意,下例中所表現(xiàn)的肯定不是Intalio BPM v2.0解決方案在BPMN到BPEL轉(zhuǎn)換時(shí)使用的算法,如下的簡(jiǎn)單例子說(shuō)明了這一點(diǎn)。以前面的非結(jié)構(gòu)化BPMN圖來(lái)說(shuō),Intalio的解決方案會(huì)將它轉(zhuǎn)換成 BPEL流程 ,部分顯示如下:
<?xml version="1.0" encoding="UTF-8"?>
<bpel:process
xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vprop="http://docs.oasis-open.org/wsbpel/2.0/varprop"
xmlns:pnlk="http://docs.oasis-open.org/wsbpel/2.0/plnktype"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:this="http://example.com/Unstructured/Employer"
xmlns:Employee="http://example.com/Unstructured/Employee"
xmlns:diag="http://example.com/Unstructured"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:bpmn="http://www.intalio.com/bpms"
xmlns:atomic="http://ode.apache.org/atomicScope"
queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
expressionLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath2.0"
bpmn:label="Employer" bpmn:id="_TGthsJkdEd29aqy0ek4Sxw" name="Employer"
targetNamespace="http://example.com/Unstructured/Employer">
<bpel:import namespace="http://example.com/Unstructured"
location="Unstructured.wsdl"
importType="http://schemas.xmlsoap.org/wsdl/" />
<bpel:import namespace="http://example.com/Unstructured/Employer"
location="Unstructured-Employer.wsdl"
importType="http://schemas.xmlsoap.org/wsdl/" />
<bpel:partnerLinks>
<bpel:partnerLink name="employeeAndEmployerPlkVar"
partnerLinkType="diag:EmployeeAndEmployer"
myRole="Employer_for_Employee" />
</bpel:partnerLinks>
<bpel:variables>
<bpel:variable name="thisEmployee_ArrivalRequestMsg"
messageType="this:Employee_ArrivalRequest" />
</bpel:variables>
<bpel:sequence>
<bpel:receive partnerLink="employeeAndEmployerPlkVar"
portType="this:ForEmployee" operation="Employee_Arrival"
variable="thisEmployee_ArrivalRequestMsg" createInstance="yes"
bpmn:label="Employee Arrival" bpmn:id="_THp84JkdEd29aqy0ek4Sxw">
</bpel:receive>
<bpel:flow bpmn:label="GatewayParallel"
bpmn:id="_DHLtcJkeEd29aqy0ek4Sxw">
<bpel:sequence>
<bpel:empty bpmn:label="Fill HR DB"
bpmn:id="_hCvXsJkdEd29aqy0ek4Sxw" />
<bpel:flow bpmn:label="GatewayParallel"
bpmn:id="_H2UWEJkeEd29aqy0ek4Sxw">
<bpel:sequence>
<bpel:empty bpmn:label="Medical Check"
bpmn:id="_ivks8JkdEd29aqy0ek4Sxw" />
</bpel:sequence>
<bpel:sequence>
<bpel:empty bpmn:label="Provide Computer"
bpmn:id="_lXApQJkdEd29aqy0ek4Sxw" />
</bpel:sequence>
</bpel:flow>
</bpel:sequence>
<bpel:sequence>
<bpel:empty bpmn:label="Provide Office"
bpmn:id="_iHEigJkdEd29aqy0ek4Sxw" />
<bpel:empty bpmn:label="Provide Computer"
bpmn:id="_lXApQJkdEd29aqy0ek4Sxw" />
</bpel:sequence>
</bpel:flow>
<bpel:empty bpmn:label="Ready to work"
bpmn:id="_nh6akJkdEd29aqy0ek4Sxw" />
</bpel:sequence>
</bpel:process>
要想將轉(zhuǎn)換結(jié)果顯示成一張漂亮的圖,我們可以在Eclipse BPEL設(shè)計(jì)器中打開(kāi)這個(gè)流程:
由于某些原因,“Fill HR Db”、“Medical Check”等活動(dòng)的標(biāo)簽丟失了,但是無(wú)論怎樣,我們都能夠從BPEL的源代碼中看到BPMN的“Employee Arrival”活動(dòng)已轉(zhuǎn)成了BPEL的“Receive”操作。對(duì)于業(yè)務(wù)分析師而言,會(huì)對(duì)現(xiàn)在看到7個(gè)活動(dòng)(“Receive”和其他6個(gè) “Empty”活動(dòng))感到奇怪,而在我們的原始流程中只包含了6個(gè)。看看BPEL源代碼就能打消這個(gè)疑惑了:我們可以看到“Provide Computer”活動(dòng)被復(fù)制了。在某些方面,這對(duì)于員工來(lái)說(shuō)倒是件好事:他們可以在辦公室擁有兩臺(tái)計(jì)算機(jī)!
Intalio BPMN2BPEL轉(zhuǎn)換算法能否產(chǎn)生可讀的BPEL,并不是這里的問(wèn)題:?jiǎn)栴}在于這個(gè)轉(zhuǎn)換完全錯(cuò)了。你無(wú)法想象出,那些專注于現(xiàn)實(shí)世界業(yè)務(wù)流程的職業(yè)BPM設(shè)計(jì)者能畫出什么樣的圖,因?yàn)檫@些流程本質(zhì)上就是高度并行和非結(jié)構(gòu)化的。
可讀性問(wèn)題
[AALST_UNKNOWNDATE] 中的作者認(rèn)為:BPEL對(duì)終端用戶來(lái)說(shuō)是不可讀的,因此需要一種用于流程設(shè)計(jì)的高級(jí)語(yǔ)言。但一般情況是,在流程真正執(zhí)行之前,就需要運(yùn)行時(shí)信息了。如何把這個(gè)信息融入到最終的BPEL代碼中呢?有人可能會(huì)認(rèn)為,這就是生成可讀的BPEL代碼之所以重要的原因。在所有信息直接輸入到編輯器/設(shè)計(jì)器中的情況下,至少出于調(diào)試的目的,BPEL代碼也應(yīng)該盡量可讀,其中可讀的含義:盡量直接使用BPEL結(jié)構(gòu)(sequence、flow、pick、wait 等)。
就這個(gè)可讀性問(wèn)題,讓我們介紹一下Eclipse的 JWT 子項(xiàng)目,它旨在提供一個(gè)工作流管理(設(shè)計(jì)、轉(zhuǎn)換,模擬和連接引擎)的工具。JWT 現(xiàn)在使用 UML活動(dòng)圖 符號(hào)(簡(jiǎn)稱UML-AD)設(shè)計(jì)工作流。UML-AD 嚴(yán)格等價(jià)于BPMN(就表現(xiàn)力來(lái)說(shuō))(詳見(jiàn) [WHITE_UNKNOWN_DATE] )。那么,使用UML-AD符號(hào),我們可以在JWT中把之前的BPMN圖表示為:
JWT是可擴(kuò)展的,同時(shí)提供了不同的轉(zhuǎn)換插件。其中一個(gè)是UML-AD2BPEL轉(zhuǎn)換,來(lái)自Augsburg大學(xué)的一個(gè)研究項(xiàng)目。這個(gè)BPEL轉(zhuǎn)換插件會(huì)輸出一個(gè)518行的BPEL-WS-1.1文檔(在這片文章的結(jié)尾會(huì)提供樣本)。注意,不管是Eclipse BPEL設(shè)計(jì)器還是Intalio設(shè)計(jì)器都無(wú)法正確地展示這個(gè)BPEL文件。鑒于此,我們使用了Netbeans。但產(chǎn)生的圖還是太復(fù)雜了,無(wú)法在此展現(xiàn)(要了解該圖的局部展現(xiàn),請(qǐng)參見(jiàn)“資源”小節(jié))。為了得到等價(jià)的 5 BPEL描述,JWT2BPEL轉(zhuǎn)換工具大量地使用了BPEL事件。要是有人有勇氣一讀的話,其難度可見(jiàn)一斑。
因此,使用諸如BPMN或者UML-AD這樣純工作流符號(hào)表示的簡(jiǎn)單并行非結(jié)構(gòu)化流程很難被表示成“可讀”的BPEL格式。這就是一個(gè)普通事實(shí),而不是單單是針對(duì)我們這里討論的這個(gè)簡(jiǎn)單流程。在考慮BPMN-to-BPEL雙向工程的情況下,情況更糟:(來(lái)自于Wikipedia) “從BPMN圖生成BPEL代碼,維護(hù)原始BPMN模型和所產(chǎn)生的BPEL代碼之間的同步,一個(gè)中的任何改動(dòng)都要傳播給另一個(gè)”。使用諸如BPMN這樣的自然工作流符號(hào)來(lái)表示用BPEL作為其最終格式的業(yè)務(wù)流程執(zhí)行,無(wú)異于沒(méi)事找事。
注意,從BPEL流程創(chuàng)建BPMN圖的過(guò)程似乎要比其反過(guò)程要容易的多:把結(jié)構(gòu)化元素轉(zhuǎn)化成非結(jié)構(gòu)化相當(dāng)簡(jiǎn)單。注意,在Intalio中已經(jīng)提供了這樣一個(gè)轉(zhuǎn)換(BPEL2BPMN)的Java類,從 這里 可得到。它似乎是以STP的核心,并且(目前)還不是完全地符合BPEL,在類的注釋中能看出來(lái):
;
/*
* 由BPEL文件產(chǎn)生BPMN的非常基本的例子。
* 這里解析的BPEL只是BPEL規(guī)范的一個(gè)很小的子集:
* scope、assign、receive、reply、invoke、flow、sequence。
* ...
*/
盡管如此,由于某些未知的原因,導(dǎo)入由Intalio設(shè)計(jì)器生成的BPEL文件將無(wú)法工作。可是,雙向工程的問(wèn)題在于保持同一流程兩個(gè)完全不同的表示的同步:一個(gè)是BPMN,另一個(gè)是BPEL。
結(jié)論
首先,我們澄清了一個(gè)常見(jiàn)的誤解:BPEL不是一門結(jié)構(gòu)化語(yǔ)言,但它是基于結(jié)構(gòu)化語(yǔ)言的(基于塊[Block])。在某些方面,BPEL更接近于類似 Java這樣的標(biāo)準(zhǔn)語(yǔ)言,而不是一個(gè)自然的工作流符號(hào),比如BPMN(基于圖)。直到現(xiàn)在,程序員都是直接打理他們的語(yǔ)言。集成開(kāi)發(fā)環(huán)境則用來(lái)簡(jiǎn)化幾個(gè)重復(fù)步驟,比如編譯、重構(gòu)、測(cè)試等等。 但是程序員直接“講”他們的語(yǔ)言。我們認(rèn)為,這種情景將同樣適用于BPEL。一個(gè)IDE 只能簡(jiǎn)化編程步驟(注意,我們?cè)谶@里并沒(méi)有用“設(shè)計(jì)”一詞)。但是,為了使用以及從中獲益,BPEL程序員將不得不“講”BPEL。關(guān)于BPEL對(duì)于大多技術(shù)人員是否是“說(shuō)得出口的”-就像Java一樣-這個(gè)問(wèn)題已經(jīng)超出了本文的范圍,但它確實(shí)是一個(gè)有趣的問(wèn)題。
然而對(duì)于業(yè)務(wù)分析師,BPEL則顯然不夠友好。BPEL難以閱讀、難以學(xué)習(xí)、難以實(shí)現(xiàn),而所有這些正是終端用戶的主要關(guān)注點(diǎn):難以回避。我們已經(jīng)注意到,在文中使用的這個(gè)簡(jiǎn)單例子中,當(dāng)創(chuàng)建“Employer”池時(shí),為了生成BPEL文件,我們受制于創(chuàng)建另一個(gè)“非執(zhí)行”的池。Intalio設(shè)計(jì)器中給出的許多其他BPEL相關(guān)行頭,從BPMN分析師的角度來(lái)看則完全沒(méi)有用:比如命名空間、Web服務(wù)調(diào)用、XML數(shù)據(jù)類型以及其他。
因此,我們認(rèn)為BPMN符號(hào)是業(yè)務(wù)分析師目前唯一可用的解決方案 6 。不過(guò),在流程能夠?qū)嶋H執(zhí)行之前仍需指定許多執(zhí)行細(xì)節(jié),這是BPMN規(guī)范中所沒(méi)有的,并且是分析師在設(shè)計(jì)時(shí)不清楚的。這些信息通常本質(zhì)上是技術(shù)、站點(diǎn)(如:郵件服務(wù)器地址、任務(wù)庫(kù))或?qū)崿F(xiàn)(如:Web服務(wù)、J2EE服務(wù)或.NET 服務(wù))依賴的。因此,技術(shù)人員輸入到環(huán)境上下文的流程骨架是一個(gè)在執(zhí)行語(yǔ)義(雙向模擬)上等價(jià)于原始BPMN流程,并且它還是易讀的以保證所做的修改不會(huì)改變流程的行為,這一點(diǎn)是極其重要的。
從BPMN到(可讀的)BPEL轉(zhuǎn)換相當(dāng)難以實(shí)現(xiàn),并會(huì)產(chǎn)生(如果正確的話)難以閱讀的代碼。順便提一下,雙向工程的問(wèn)題就更難了。除非后者能得以解決,否則無(wú)法讓實(shí)際業(yè)務(wù)分析師把BPEL作為設(shè)計(jì)流程的目標(biāo)輸出。
因此,我們很疑惑:既然已經(jīng)存在一種可以直接映射到BPMN各單元的基于圖的標(biāo)準(zhǔn),即XPDL v2.0,為什么還要將BPMN轉(zhuǎn)換成BPEL?使用這種映射,XPDL v2.0很自然就成了一種BPMN的持久化文件格式。此外,它還指定了之前只能用在BPEL中的可用行為,如Web服務(wù)調(diào)用和補(bǔ)償。當(dāng)然,有人會(huì)說(shuō),XPDL 2.0缺乏一些執(zhí)行方面的規(guī)范,這就讓它不適合直接執(zhí)行。我們相信,在XPDL沒(méi)有詳細(xì)說(shuō)明的地方使用BPEL,為實(shí)現(xiàn)一個(gè)完全符合BPMN v2.0、XPDL v2.0和BPEL的引擎留下了充足的空間。Bonita和Orchestra團(tuán)隊(duì)正是按這樣方式去實(shí)現(xiàn)的他們下一代BPM引擎。但這應(yīng)該是另一個(gè)故事了,需要另一篇文章來(lái)介紹……就此打住!
感謝Bonita & Orchestra 團(tuán)隊(duì)對(duì)本文的幫助和支持,尤其是Miguel Valdes-Faura的審校和建議。同時(shí)也感謝Gavin Terrill的校對(duì)和臨門一腳。
Pierre Vignéras
Bull, Architect of an Open World?
*BPM Team*, Bull R & D
- [BPEL07] OASIS, The BPEL Specification; (2007)
- [BPMN06] OMG, The BPMN Specification; (2006)
- [BOHM66] Bohm, Corrado and Giuseppe Jacopini, Flow diagrams, Turing machines and languages with only two formation rules; (1966)
- [DIJKSTRA68] Dijkstra, Edsger, Go To Statement Considered Harmful; (1968)
- [KIEPUSZEWSKI00] B. Kiepuszewski and A. H. M. Ter Hofstede and C. Bussler, On Structured Workflow Modelling; (2000)
- [MILNER89] Milner, R. 1989 Communication and Concurrency. Prentice-Hall, Inc.
- [EKIE89] Eike Best and Raymond Devillers and Astrid Kiehn and Lucia Pomello, Concurrent bisimulations in Petri nets; (1991)
- [OUYANG06] Chun Ouyang and Marlon Dumas and Arthur H. M. Ter Hofstede, From Business Process Models to Process-oriented Software Systems: The BPMN to BPEL Way; (2006)
- [AALST_UNKNOWNDATE] Wil M.P. van der Aalst1,2 and Kristian Bisgaard Lassen2, Translating Workflow Nets to BPEL
- [WHITE_UNKNOWN_DATE] Stephen A. White, Process Modeling Notations and Workflow Patterns
- 有人會(huì)說(shuō),程序員也必須處理現(xiàn)實(shí)世界的事兒,但他們完全不在同一個(gè)抽象層面(否則,為分析師定義特定的符號(hào)又有何意義?)。
- 當(dāng)然,我們必須定義“等價(jià)”的含義。一般來(lái)說(shuō),在流程的世界中,使用的正式定義是“雙向模擬(bisimulation)”[MILNER89]。但是鑒于它無(wú)法區(qū)分并行執(zhí)行和它的順序模擬(BPM用戶所希望的的),我們就用全并行雙向模擬[EKIE89]概念來(lái)替代它。
- 參見(jiàn)全并行雙向模擬的概念。
- 參見(jiàn)人類可讀的BEPL的公共思想,即,盡量用塊(block)創(chuàng)建。
- 順便說(shuō)一下,實(shí)現(xiàn)形式上確實(shí)等價(jià)(雙向模擬)原始BPMN圖的最終BPEL文件就留給讀者您了……;-)
- 可能也可以使用UML-AD符號(hào),因?yàn)樵诒憩F(xiàn)力上它等價(jià)于BPMN。不過(guò),我們還是認(rèn)為BPMN更貼近BPM分析師的要求。
資源
1. JWT2BPEL轉(zhuǎn)換輸出了 這個(gè)BPEL文件 。
2. 如果使用NetBeans把上一個(gè)資源給出的BPEL流程表示成一張圖,我們會(huì)得到 這樣的圖 。該圖表示了整個(gè)流程,中間的部分都收縮起來(lái)了(節(jié)點(diǎn)用“+”符號(hào)表示)。如果我們展開(kāi)這個(gè)節(jié)點(diǎn),我們會(huì)得到 一張展開(kāi)的圖 。在這個(gè)圖中,我們可以看到包含有“+”符號(hào)的兩個(gè)節(jié)點(diǎn)。它們分別代表了原始BPMN圖中的“Employee Arrival”和“Ready to work”兩個(gè)活動(dòng)。從“Employee Arrival”節(jié)點(diǎn),我們能夠看到事件所隸屬于的標(biāo)記為C5的BPEL范圍。在它的右邊,能夠看到那些事件。這些事件被用來(lái)以BPEL實(shí)現(xiàn)原始BPMN 圖中描述的并行和非結(jié)構(gòu)化流程。
查看英文原文 : Why BPEL is not the holy grail for BPM? 。
轉(zhuǎn)自:http://www.infoq.com/cn/articles/bpelbpm-cn
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
