2002 年 12 月 01 日 最近發(fā)布的 Web 服務(wù)的業(yè)務(wù)流程執(zhí)行語(yǔ)言(Business Process Execution Language for Web Services,BPEL4WS)規(guī)范,其定位是成為整合方面的 Web 服務(wù)標(biāo)準(zhǔn)。您可以創(chuàng)建能夠如完成 Web 服務(wù)調(diào)用、操縱數(shù)據(jù)、拋出故障或終止一個(gè)流程等工作的不同活動(dòng),然后將它們連接起來(lái),從而創(chuàng)建出復(fù)雜的流程。這些活動(dòng)可以嵌套到結(jié)構(gòu)化活動(dòng)中,結(jié)構(gòu)化活動(dòng)定義了其中的活動(dòng)的運(yùn)行方式,如是串行或是并行還是取決于某些條件。本系列文章的目的是讓讀者對(duì) BPEL4WS 語(yǔ)言的不同部件有所了解,并教讀者如何創(chuàng)建他們自己的完整的流程。 今天,Web 服務(wù)能夠通過(guò)業(yè)界規(guī)范進(jìn)行相互通信、公開(kāi)自己、被發(fā)現(xiàn)和被調(diào)用。然而,直到上周,在將這些服務(wù)鏈接在一起以成為一個(gè)業(yè)務(wù)流程或一個(gè)整合時(shí),用戶(hù)仍需要從許多相互沖突的規(guī)范中作出選擇 ― IBM 的 WSFL 和 Microsoft 的 XLANG 之間正存在這種情況。Web 服務(wù)的業(yè)務(wù)流程執(zhí)行語(yǔ)言(BPEL4WS)是 WSFL 和 XLANG 融合的產(chǎn)物,如果運(yùn)氣好的話(huà),它將成為 Web 服務(wù)整合標(biāo)準(zhǔn)的基礎(chǔ)。BPEL4WS 集 WSFL 和 XLANG 兩家之長(zhǎng)(前者支持面向圖形的流程,后者則支持流程的結(jié)構(gòu)化構(gòu)造)于一身,形成了一個(gè)支持以極自然的方式實(shí)現(xiàn)各種類(lèi)型的業(yè)務(wù)流程的結(jié)合性的軟件包。除了是一種實(shí)現(xiàn)語(yǔ)言之外,BPEL4WS 同樣還可以用來(lái)描述業(yè)務(wù)流程的接口 ― 辦法是使用抽象流程這個(gè)概念。我們將在以后的文章中進(jìn)一步討論這個(gè)問(wèn)題。 BPEL4WS 的最初實(shí)現(xiàn)稱(chēng)為 BPWS4J,IBM 在 alphaWorks(請(qǐng)參閱 參考資料)上也發(fā)布了這個(gè)最初實(shí)現(xiàn)。用戶(hù)在學(xué)習(xí)和試驗(yàn) BPEL4WS 時(shí)可以用這個(gè)實(shí)現(xiàn)來(lái)充當(dāng)試驗(yàn)地。 我們?cè)诒疚挠懻摰氖?BPEL4WS 的基本概念。
BPEL4WS 支持兩種截然不同的使用情形:
本文中著重闡述第一種情形;本系列以后將會(huì)有一篇文章來(lái)討論 BPEL4WS 的一些抽象流程概念。 作為可執(zhí)行流程的實(shí)現(xiàn)語(yǔ)言,BPEL4WS 的作用是將一組現(xiàn)有的服務(wù)整合起來(lái),從而定義一個(gè)新的 Web 服務(wù)。因此,BPEL4WS 基本上是一種實(shí)現(xiàn)這樣的整合的語(yǔ)言。與其它任何 Web 服務(wù)一樣,整合服務(wù)的接口也被描述為 WSDL portType 的集合。整合(稱(chēng)為 流程)指明了服務(wù)接口與整合的總體執(zhí)行的配合情況。 圖 1說(shuō)明了從外部看到的 BPEL4WS 流程的上述情況。 圖 1. 作為 BPEL4WS 流程實(shí)現(xiàn)的 Web 服務(wù)的視圖 ![]() BPEL4WS 中出現(xiàn)的整合原語(yǔ)主要來(lái)自于工作流和業(yè)務(wù)流程集成方面多年的經(jīng)驗(yàn),因此,BPEL4WS 的定位是成為一種業(yè)務(wù)流程整合語(yǔ)言。 上圖云塊中的是什么東西?不同于用傳統(tǒng)的編程語(yǔ)言來(lái)實(shí)現(xiàn) WSDL 服務(wù),每個(gè) portType 的每項(xiàng)操作并不映射成 BPEL4WS 中的一個(gè)獨(dú)立的邏輯塊。服務(wù)的整個(gè)類(lèi)型(即該服務(wù)的 portType 集合)由單個(gè) BPEL4WS 流程實(shí)現(xiàn)。這樣,與調(diào)用接口操作的外部用戶(hù)相對(duì)應(yīng)的特定“入口點(diǎn)”在 BPEL4WS 描述中指明。這些入口點(diǎn)消費(fèi) WSDL 操作的從只輸入(input-only)操作或輸入-輸出(input-output)操作傳入的消息。對(duì)于后一種情況,流程還必須指明輸出消息在哪里生成。BPEL4WS 只使用和支持 WSDL 只輸入操作和輸入-輸出(請(qǐng)求-響應(yīng)(request-response))操作;只輸出(output-only)(通知(notification))操作和輸出-輸入(output-input)(要求-響應(yīng)(solicit-response))操作既不需要也不支持。 BPEL4WS 流程本身基本上就是一個(gè)流程圖,類(lèi)似于用來(lái)表達(dá)算法的流程圖。流程的每一步稱(chēng)為一個(gè)活動(dòng)。存在以下一些基本活動(dòng):調(diào)用某個(gè) Web 服務(wù)上的操作( 通過(guò)使用語(yǔ)言所提供的任何結(jié)構(gòu)化活動(dòng),可以將這些原語(yǔ)活動(dòng)組合成更復(fù)雜的算法。這些結(jié)構(gòu)化活動(dòng)提供的能力有:定義一組步驟的有序序列( BPEL4WS 允許您遞歸地組合結(jié)構(gòu)化活動(dòng),以表達(dá)任意復(fù)雜的算法,這些算法表示了服務(wù)的實(shí)現(xiàn)。 作為一種用來(lái)將一組服務(wù)組合在一起以形成一個(gè)新的服務(wù)的語(yǔ)言,BPEL4WS 流程由向其它服務(wù)提出調(diào)用和/或接收來(lái)自 客戶(hù)機(jī)( 圖 1 中服務(wù)的用戶(hù))的調(diào)用組成。前者通過(guò)使用 第一種類(lèi)型的伙伴是顯而易見(jiàn)的 ― 流程無(wú)疑必須調(diào)用其它服務(wù)以完成一些事情。 把流程的客戶(hù)機(jī)當(dāng)作伙伴對(duì)待的原因可能并不這么顯而易見(jiàn)。這樣做實(shí)際上有兩個(gè)原因:第一個(gè)原因是,有時(shí)流程可能會(huì)需要調(diào)用其中一個(gè)客戶(hù)機(jī)伙伴上的操作。異步交互的主要支持機(jī)制如下:客戶(hù)機(jī)調(diào)用流程上的某個(gè)操作以請(qǐng)求某種服務(wù)。一旦完成,流程會(huì)調(diào)用客戶(hù)機(jī)伙伴上的操作。此時(shí),客戶(hù)機(jī)伙伴與被調(diào)用的伙伴已沒(méi)有什么明顯差別。 第二個(gè)原因是,流程所提供的服務(wù)可能被不止一個(gè)客戶(hù)機(jī)使用(使用全部服務(wù)或使用服務(wù)的幾個(gè)部件)。此外,流程可能會(huì)希望區(qū)別服務(wù)的這些不同用戶(hù)。舉例來(lái)說(shuō),一個(gè)表示貸款服務(wù)系統(tǒng)的流程提供了單個(gè) Web 服務(wù),但只有其中的一些部件是申請(qǐng)貸款的客戶(hù)能訪(fǎng)問(wèn)的,其他一些部分則是客戶(hù)服務(wù)代表能訪(fǎng)問(wèn)的,最終是整個(gè)服務(wù)則只有貸款擔(dān)保人才能訪(fǎng)問(wèn)。根據(jù)某個(gè)操作是由客戶(hù)還是由擔(dān)保人調(diào)用的,所返回的行為可能會(huì)有很大不同。另外,由于使用伙伴來(lái)模擬客戶(hù)機(jī),所以流程可以指明某些操作只能被某些客戶(hù)機(jī)調(diào)用。 因此,伙伴可以分為以下幾種:
前兩種分別是 被調(diào)用的伙伴和 客戶(hù)機(jī)伙伴,它們都是簡(jiǎn)單明了的。請(qǐng)考慮第三種情況下流程首先調(diào)用服務(wù)時(shí)流程和服務(wù)之間的關(guān)系。這意味著服務(wù)提供了(或發(fā)布了)一個(gè) portType(PT1),然后流程調(diào)用該 portType 的操作。同時(shí),流程必須提供一個(gè)服務(wù)從其中調(diào)用操作的 portType(PT2)。這樣,從流程的角度看,流程需要來(lái)自服務(wù)的 portType PT1 并提供 portType PT2 給服務(wù)。從服務(wù)的角度來(lái)看兩者間的關(guān)系,則會(huì)得到一個(gè)相反的結(jié)論:服務(wù)提供 portType PT1 給流程并需要來(lái)自流程的 portType PT2。不管是流程首先調(diào)用服務(wù)還是相反,服務(wù)和流程的關(guān)系都同上所述。 服務(wù)鏈接類(lèi)型 BPEL4WS 用服務(wù)鏈接類(lèi)型來(lái)定義伙伴?;旧?,伙伴是這樣來(lái)定義的:給伙伴一個(gè)名稱(chēng),然后指明服務(wù)鏈接類(lèi)型的名稱(chēng),確定流程在這個(gè)服務(wù)鏈接類(lèi)型中將充當(dāng)什么角色,確定伙伴將充當(dāng)什么角色。對(duì)于純被調(diào)用的伙伴和純客戶(hù)機(jī)伙伴的情況,服務(wù)鏈接類(lèi)型中將只有一個(gè)角色,因而在定義伙伴時(shí)只指明了一個(gè)角色。伙伴名稱(chēng)隨后將在 服務(wù)引用 開(kāi)發(fā)者需要有處理業(yè)務(wù)流程中的錯(cuò)誤和從錯(cuò)誤恢復(fù)的手段。BPEL4WS 通過(guò) 此外,BPEL4WS 支持 補(bǔ)償這個(gè)概念,這是一種允許流程設(shè)計(jì)者為某些不可逆的動(dòng)作實(shí)現(xiàn)一些補(bǔ)償動(dòng)作的技術(shù)。舉例來(lái)說(shuō),設(shè)想有一個(gè)旅行預(yù)定流程。一旦確認(rèn)了一項(xiàng)預(yù)定,則必須執(zhí)行一些顯式操作才能取消這項(xiàng)預(yù)定。這些動(dòng)作就稱(chēng)為原始動(dòng)作的“補(bǔ)償動(dòng)作”。 BPEL4WS 引入了作用域這個(gè)概念,從而遞歸地支持了故障處理和補(bǔ)償,作用域本質(zhì)上是故障處理和/或補(bǔ)償?shù)膯卧T敿?xì)理解補(bǔ)償和故障處理,需要一篇以它們?yōu)橹黝}的文章,將來(lái)會(huì)提供一篇這樣的文章。 這些服務(wù)的生命周期是什么樣的呢?作為 BPEL4WS 流程實(shí)現(xiàn)的 Web 服務(wù)有一個(gè)實(shí)例生命周期模型。也就是說(shuō),這些服務(wù)的客戶(hù)機(jī)總是與服務(wù)(流程)的某個(gè)特定實(shí)例交互。那客戶(hù)機(jī)如何創(chuàng)建服務(wù)的實(shí)例呢? 與傳統(tǒng)的分布式對(duì)象系統(tǒng)不同,BPEL4WS 實(shí)例不是通過(guò)工廠(chǎng)模式創(chuàng)建的。相反,BPEL4WS 中的實(shí)例是在服務(wù)的消息到達(dá)時(shí)隱式地創(chuàng)建的。也就是說(shuō),實(shí)例不是用顯式的“實(shí)例標(biāo)識(shí)(instance ID)”來(lái)標(biāo)識(shí),而是用數(shù)據(jù)消息中的一些關(guān)鍵字域來(lái)標(biāo)識(shí)。舉例來(lái)說(shuō),如果流程表示一個(gè)訂單實(shí)現(xiàn)系統(tǒng),則發(fā)票號(hào)碼可能就是用來(lái)標(biāo)識(shí)交互所涉及的某個(gè)特定實(shí)例的“關(guān)鍵字”域。這樣,如果當(dāng)消息到達(dá)流程的“啟動(dòng)”點(diǎn)時(shí)沒(méi)有可用的匹配實(shí)例,那么就會(huì)自動(dòng)創(chuàng)建一個(gè)新的實(shí)例并與消息中的關(guān)鍵字?jǐn)?shù)據(jù)關(guān)聯(lián)起來(lái)。在定位到了合適的實(shí)例之后,只能在流程的非啟動(dòng)點(diǎn)接受消息;也就是說(shuō),在這些情況下,消息事實(shí)上總是被傳送到特定實(shí)例。在 BPEL4WS 中,找到一個(gè)合適的實(shí)例或者創(chuàng)建一個(gè)合適的實(shí)例(如有必要的話(huà))的流程稱(chēng)為 消息相關(guān)性(message correlation)。將來(lái)也會(huì)有一篇討論消息相關(guān)性的文章。
我們?cè)诒疚暮?jiǎn)要地解釋了 BPEL4WS 主要的底層概念。我們從總體上討論了 BPEL4WS 是關(guān)于什么的,然后討論了伙伴、故障、補(bǔ)償以及生命周期。在本系列以后的文章中,我們打算詳細(xì)地討論 BPEL4WS 的各個(gè)特定方面。 [編者按:本專(zhuān)欄的每一期將交替地提供講述 BPEL4WS 背后的概念的系列和講述如何從技術(shù)上實(shí)現(xiàn)這些概念的系列。下一期將介紹技術(shù)實(shí)現(xiàn)。]
|
聯(lián)系客服