本文意譯自TSS的“BPEL and Java”,為的是更深入地理解這篇好文章,也算是我的一篇學(xué)習(xí)筆記。
簡介
在企業(yè)應(yīng)用開發(fā)領(lǐng)域,每一種新技術(shù)和平臺背后的動(dòng)力和思想,無一例外的是提供一個(gè)能夠更有效的開發(fā)企業(yè)商務(wù)應(yīng)用的環(huán)境-商務(wù)應(yīng)用和業(yè)務(wù)過程更為緊密地保持一致,不能太復(fù)雜,而且能做到隨著業(yè)務(wù)過程的變化而輕松地改變。
Java提供了一個(gè)極好的企業(yè)應(yīng)用開發(fā)平臺,但仍然不能做到分離業(yè)務(wù)過程。在一個(gè)公司內(nèi)部,業(yè)務(wù)過程需要相互協(xié)作和集成,公司之間也一樣。因?yàn)榇嬖谥煌募夹g(shù)和功能,集成不同的應(yīng)用總是一項(xiàng)艱難的任務(wù)。
應(yīng)用集成方面的最新進(jìn)展,來自Service Oriented Architecture(SOA)和Web服務(wù)技術(shù)。從SOA的觀點(diǎn)來看,不同的應(yīng)用系統(tǒng)以Web服務(wù)的形式來發(fā)布它們的業(yè)務(wù)功能。因此,我們使用統(tǒng)一的標(biāo)準(zhǔn)方式(通過Web服務(wù))來訪問遺留系統(tǒng)和新開發(fā)應(yīng)用的功能。這種標(biāo)準(zhǔn)方式很重要,因?yàn)橥ǔ4蠖鄶?shù)公司存在著很多需要集成的應(yīng)用。
如果僅僅是開發(fā)Web服務(wù)并把這些功能發(fā)布出來還不夠。我們也需要一種把這些功能按正確的順序組合起來的方法-定義使用這些Web服務(wù)的業(yè)務(wù)過程。我們顯然需要一個(gè)簡單直接的方式來定義這些業(yè)務(wù)過程,尤其是我們都知道業(yè)務(wù)過程通常易于變化,因此我們需要很容易地修改這些業(yè)務(wù)過程。
這正是BPEL(Business Process Execution Language for Web Service,也稱作WS-BPEL或BPEL4WS)如此重要的原因。BPEL用于組合這些Web服務(wù),因此可以算是SOA的一種實(shí)現(xiàn)方式。
我們將在本文討論BPEL的作用及其與Java的關(guān)系,尤其集中在如何擴(kuò)展BPEL,使它不但可以組合Web服務(wù),也可以組合其他資源(如EJB,JMS等)。BPEL和Java結(jié)合的可能性,打開了一個(gè)有趣的新視野。
BPEL的作用
面向業(yè)務(wù)過程的SOA需要使用一個(gè)相對簡單的方式來描述如何把Web服務(wù)組合成業(yè)務(wù)過程。當(dāng)然,如果描述的方式最好能夠執(zhí)行,這樣我們不但可以定義一個(gè)抽象的業(yè)務(wù)過程,而且完成了一個(gè)可執(zhí)行的業(yè)務(wù)過程規(guī)范。BPEL正是這樣的語言。實(shí)際上,它是第一個(gè)擁有以下特征的語言:
1、允許我們同時(shí)定義抽象的業(yè)務(wù)過程和可執(zhí)行的業(yè)務(wù)過程
2、受到大多數(shù)公司的支持
3、存在可執(zhí)行這些業(yè)務(wù)過程語言的軟件(BPEL服務(wù)器)和開發(fā)工具(BPEL設(shè)計(jì)工具)
在深入了解BPEL之前,讓我們討論一下如何組合Web服務(wù)。有兩種方式:Orchestration和Choreography。使用Orchestration,需要一個(gè)總控過程來控制涉及到的Web服務(wù),并協(xié)調(diào)Web服務(wù)不同操作的執(zhí)行。所涉及到的Web服務(wù)并不知道(也不必知道)它們是組合過程的一部分。只有中央的總控過程知道它們?nèi)绾谓M合和協(xié)調(diào)。
相比之下,Choreography并不依賴中央的總控協(xié)調(diào)過程。相反,每個(gè)涉及其中的Web服務(wù)都知道何時(shí)執(zhí)行自己的操作,和誰交互。Choreography方式集中在消息的交換。所有的Choreography參與者都需要知道業(yè)務(wù)流程,要執(zhí)行的操作,要交互的消息,和交換消息的時(shí)機(jī)。
從組合Web服務(wù)來執(zhí)行業(yè)務(wù)流程的角度來看,Orchestration比Choreography更靈活:
1、我們知道誰負(fù)責(zé)執(zhí)行整個(gè)業(yè)務(wù)流程。
2、及時(shí)Web服務(wù)并不知道它們是業(yè)務(wù)流程的一部分,我們?nèi)匀豢梢园阉鼈兘M合起來。
3、當(dāng)錯(cuò)誤發(fā)生時(shí),我們可以提供一個(gè)備選的Scenario。
BPEL遵循Orchestration范式。其他的標(biāo)準(zhǔn)則使用Choreography范式,如 WSCI(Web Services Choreography Interface)和WS-CDL(Web Services Choreography Description Language)。和BPEL相比,Choreography沒有獲得業(yè)界的支持。
2002年8月,BEA,IBM和微軟公司開發(fā)出BPEL的第一個(gè)版本。2003年4月,BPEL提交給OASIS標(biāo)準(zhǔn)化。
BPEL既可以在公司內(nèi)部使用,也可以在公司之間使用。在公司內(nèi)部,BPEL用于標(biāo)準(zhǔn)化企業(yè)應(yīng)用集成,并集成遺留的孤立系統(tǒng)。在公司之間,BPEL使業(yè)務(wù)伙伴之間的集成更加容易和高效。BPEL定義的業(yè)務(wù)流程并不會(huì)影響已有的系統(tǒng)。在功能已經(jīng)存在或要發(fā)布成Web服務(wù)的環(huán)境,BPEL是關(guān)鍵的技術(shù)。隨著Web服務(wù)技術(shù)應(yīng)用的日益廣泛,BPEL的重要性也在上升。
BPEL語言
BPEL語言被設(shè)計(jì)來描述業(yè)務(wù)流程。它支持兩種不同類型的業(yè)務(wù)流程:
1、可執(zhí)行的流程-允許我們定義一個(gè)業(yè)務(wù)流程的確切細(xì)節(jié)。它可以在Choreography引擎種執(zhí)行。多數(shù)情況下,BPEL都用于可執(zhí)行的流程。
2、抽象的業(yè)務(wù)協(xié)議-允許我們定義參與方之間的公開消息交換協(xié)議。它不包括業(yè)務(wù)流程的內(nèi)部細(xì)節(jié),也不能執(zhí)行。
BPEL構(gòu)建在XML和Web服務(wù)的基礎(chǔ)上。它是一個(gè)以XML為基礎(chǔ)的語言,支持Web服務(wù)技術(shù)的協(xié)議群,包括SOAP,WSDL,UDDI,WS-Reliable Message,WS-Addressing,WS-Coordination和WS-Transaction。BPEL是早期兩個(gè)工作流語言(WSFL和XLANG)的綜合。WSFL由IBM設(shè)計(jì),基于有向圖的概念。XLANG有微軟設(shè)計(jì),是一種塊結(jié)構(gòu)語言。BPEL綜合了兩者的特點(diǎn),為描述業(yè)務(wù)流程提供了豐富的語義詞匯。
BPEL流程定義了參與流程的Web服務(wù)執(zhí)行的確切次序。它可以按順序執(zhí)行,也可以并行執(zhí)行。使用BPEL,我們可以表達(dá)條件行為,例如,是否執(zhí)行一個(gè)Web服務(wù)取決于前一個(gè)執(zhí)行結(jié)果;也可以創(chuàng)建循環(huán),聲明變量,復(fù)制和為變量賦值,定義錯(cuò)誤處理Handler等等。綜合使用這些結(jié)構(gòu),我們可以用算法的方式定義復(fù)雜的業(yè)務(wù)流程。
因此,BPEL可以和通用的編程語言,比如Java相比較,但它沒有Java強(qiáng)大。另一方面,它更簡單,更適合業(yè)務(wù)流程的定義。因此,BPEL并不是現(xiàn)代語言(如Java)的替代,而是它們的補(bǔ)充。
讓我們更仔細(xì)地看看典型的BPEL流程。首先,BPEL業(yè)務(wù)流程收到一個(gè)請求。為相應(yīng)請求,BPEL執(zhí)行相關(guān)的Web服務(wù),最后相應(yīng)請求者。因?yàn)锽PEL流程需要和其他的Web服務(wù)協(xié)作,它依賴于被調(diào)用的Web服務(wù)的WSDL描述。
BPEL流程包含幾個(gè)步驟。每個(gè)步驟稱為活動(dòng)。BPEL支持簡單的和結(jié)構(gòu)化的活動(dòng)。簡單的活動(dòng)代表基本的結(jié)構(gòu),用于普通的任務(wù),如下列表所示:
1、調(diào)用其他Web服務(wù),使用
2、等待客戶端通過發(fā)送一個(gè)消息調(diào)用業(yè)務(wù)過程,使用
3、為同步操作創(chuàng)建一個(gè)響應(yīng),使用
4、為一個(gè)數(shù)據(jù)變量賦值,使用
5、指出錯(cuò)誤和例外發(fā)生,使用
6、等待若干時(shí)間,使用
7、終止整個(gè)流程,使用,等等
我們可以組合這些基本的簡單活動(dòng)來定義復(fù)雜的算法,用于定義業(yè)務(wù)流程的執(zhí)行步驟。為組合這些基本活動(dòng),BPEL支持幾個(gè)結(jié)構(gòu)化的活動(dòng)。最重要的是:
,用于定義按次序執(zhí)行的一系列活動(dòng)
,用于定義并行執(zhí)行活動(dòng)的集合
,用于創(chuàng)建條件分支
,用于定義循環(huán)
,用于從多個(gè)可選的路徑中選擇其一
每個(gè)BPEL流程都可以使用聲明變量,使用定義partner link。我們將在后面的小節(jié)討論。
BPEL流程可以是同步也可以是異步的。同步的BPEL流程阻塞客戶端(使用該流程的客戶端)直到流程結(jié)束并返回結(jié)果。異步的BPEL流程并不阻塞客戶端。它使用一個(gè)回調(diào)來返回結(jié)果(如果有)。通常,我們在耗時(shí)較長的流程使用異步流程,把同步流程用于處理在短時(shí)間內(nèi)返回結(jié)果的流程。假如一個(gè)BPEL流程使用異步的Web服務(wù),通常情況下它自己也是異步的(雖然不是必要的)。
對于客戶端來說,一個(gè)BPEL流程看起來就像其他的Web服務(wù)。當(dāng)我們定義一個(gè)BPEL流程時(shí),我們實(shí)際上定義了一個(gè)組合現(xiàn)存Web服務(wù)的新Web服務(wù)。這個(gè)新的BPELWeb服務(wù)使用一系列portType,通過這些portType,它提供了類似于其他Web服務(wù)的操作。為調(diào)用一個(gè)在BPEL定義的業(yè)務(wù)流程,我們必須調(diào)用這些Web服務(wù)的組合。下圖是一個(gè)BPEL流程的示意圖:

Partner LinkBPEL示例BPEL vs JavaBPEL服務(wù)器和開發(fā)工具PPEL + Java總結(jié)資源關(guān)于作者待續(xù)......
原文地址:
http://starrynight.blogdriver.com/starrynight/637103.html