精彩的人生

          好好工作,好好生活

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks

          本文意譯自TSS的“BPEL and Java”,為的是更深入地理解這篇好文章,也算是我的一篇學習筆記。

          簡介

          在企業(yè)應(yīng)用開發(fā)領(lǐng)域,每一種新技術(shù)和平臺背后的動力和思想,無一例外的是提供一個能夠更有效的開發(fā)企業(yè)商務(wù)應(yīng)用的環(huán)境-商務(wù)應(yīng)用和業(yè)務(wù)過程更為緊密地保持一致,不能太復(fù)雜,而且能做到隨著業(yè)務(wù)過程的變化而輕松地改變。

          Java提供了一個極好的企業(yè)應(yīng)用開發(fā)平臺,但仍然不能做到分離業(yè)務(wù)過程。在一個公司內(nèi)部,業(yè)務(wù)過程需要相互協(xié)作和集成,公司之間也一樣。因為存在著不同的技術(shù)和功能,集成不同的應(yīng)用總是一項艱難的任務(wù)。

          應(yīng)用集成方面的最新進展,來自Service Oriented Architecture(SOA)和Web服務(wù)技術(shù)。從SOA的觀點來看,不同的應(yīng)用系統(tǒng)以Web服務(wù)的形式來發(fā)布它們的業(yè)務(wù)功能。因此,我們使用統(tǒng)一的標準方式(通過Web服務(wù))來訪問遺留系統(tǒng)和新開發(fā)應(yīng)用的功能。這種標準方式很重要,因為通常大多數(shù)公司存在著很多需要集成的應(yīng)用。

          如果僅僅是開發(fā)Web服務(wù)并把這些功能發(fā)布出來還不夠。我們也需要一種把這些功能按正確的順序組合起來的方法-定義使用這些Web服務(wù)的業(yè)務(wù)過程。我們顯然需要一個簡單直接的方式來定義這些業(yè)務(wù)過程,尤其是我們都知道業(yè)務(wù)過程通常易于變化,因此我們需要很容易地修改這些業(yè)務(wù)過程。

          這正是BPEL(Business Process Execution Language for Web Service,也稱作WS-BPEL或BPEL4WS)如此重要的原因。BPEL用于組合這些Web服務(wù),因此可以算是SOA的一種實現(xiàn)方式。
          我們將在本文討論BPEL的作用及其與Java的關(guān)系,尤其集中在如何擴展BPEL,使它不但可以組合Web服務(wù),也可以組合其他資源(如EJB,JMS等)。BPEL和Java結(jié)合的可能性,打開了一個有趣的新視野。

          BPEL的作用
          面向業(yè)務(wù)過程的SOA需要使用一個相對簡單的方式來描述如何把Web服務(wù)組合成業(yè)務(wù)過程。當然,如果描述的方式最好能夠執(zhí)行,這樣我們不但可以定義一個抽象的業(yè)務(wù)過程,而且完成了一個可執(zhí)行的業(yè)務(wù)過程規(guī)范。BPEL正是這樣的語言。實際上,它是第一個擁有以下特征的語言:
          1、允許我們同時定義抽象的業(yè)務(wù)過程和可執(zhí)行的業(yè)務(wù)過程
          2、受到大多數(shù)公司的支持
          3、存在可執(zhí)行這些業(yè)務(wù)過程語言的軟件(BPEL服務(wù)器)和開發(fā)工具(BPEL設(shè)計工具)

          在深入了解BPEL之前,讓我們討論一下如何組合Web服務(wù)。有兩種方式:Orchestration和Choreography。使用Orchestration,需要一個總控過程來控制涉及到的Web服務(wù),并協(xié)調(diào)Web服務(wù)不同操作的執(zhí)行。所涉及到的Web服務(wù)并不知道(也不必知道)它們是組合過程的一部分。只有中央的總控過程知道它們?nèi)绾谓M合和協(xié)調(diào)。

          相比之下,Choreography并不依賴中央的總控協(xié)調(diào)過程。相反,每個涉及其中的Web服務(wù)都知道何時執(zhí)行自己的操作,和誰交互。Choreography方式集中在消息的交換。所有的Choreography參與者都需要知道業(yè)務(wù)流程,要執(zhí)行的操作,要交互的消息,和交換消息的時機。

          從組合Web服務(wù)來執(zhí)行業(yè)務(wù)流程的角度來看,Orchestration比Choreography更靈活:
          1、我們知道誰負責執(zhí)行整個業(yè)務(wù)流程。
          2、及時Web服務(wù)并不知道它們是業(yè)務(wù)流程的一部分,我們?nèi)匀豢梢园阉鼈兘M合起來。
          3、當錯誤發(fā)生時,我們可以提供一個備選的Scenario。

          BPEL遵循Orchestration范式。其他的標準則使用Choreography范式,如 WSCI(Web Services Choreography Interface)和WS-CDL(Web Services Choreography Description Language)。和BPEL相比,Choreography沒有獲得業(yè)界的支持。
          2002年8月,BEA,IBM和微軟公司開發(fā)出BPEL的第一個版本。2003年4月,BPEL提交給OASIS標準化。

          BPEL既可以在公司內(nèi)部使用,也可以在公司之間使用。在公司內(nèi)部,BPEL用于標準化企業(yè)應(yīng)用集成,并集成遺留的孤立系統(tǒng)。在公司之間,BPEL使業(yè)務(wù)伙伴之間的集成更加容易和高效。BPEL定義的業(yè)務(wù)流程并不會影響已有的系統(tǒng)。在功能已經(jīng)存在或要發(fā)布成Web服務(wù)的環(huán)境,BPEL是關(guān)鍵的技術(shù)。隨著Web服務(wù)技術(shù)應(yīng)用的日益廣泛,BPEL的重要性也在上升。

          BPEL語言
          BPEL語言被設(shè)計來描述業(yè)務(wù)流程。它支持兩種不同類型的業(yè)務(wù)流程:
          1、可執(zhí)行的流程-允許我們定義一個業(yè)務(wù)流程的確切細節(jié)。它可以在Choreography引擎種執(zhí)行。多數(shù)情況下,BPEL都用于可執(zhí)行的流程。
          2、抽象的業(yè)務(wù)協(xié)議-允許我們定義參與方之間的公開消息交換協(xié)議。它不包括業(yè)務(wù)流程的內(nèi)部細節(jié),也不能執(zhí)行。

          BPEL構(gòu)建在XML和Web服務(wù)的基礎(chǔ)上。它是一個以XML為基礎(chǔ)的語言,支持Web服務(wù)技術(shù)的協(xié)議群,包括SOAP,WSDL,UDDI,WS-Reliable Message,WS-Addressing,WS-Coordination和WS-Transaction。BPEL是早期兩個工作流語言(WSFL和XLANG)的綜合。WSFL由IBM設(shè)計,基于有向圖的概念。XLANG有微軟設(shè)計,是一種塊結(jié)構(gòu)語言。BPEL綜合了兩者的特點,為描述業(yè)務(wù)流程提供了豐富的語義詞匯。

          BPEL流程定義了參與流程的Web服務(wù)執(zhí)行的確切次序。它可以按順序執(zhí)行,也可以并行執(zhí)行。使用BPEL,我們可以表達條件行為,例如,是否執(zhí)行一個Web服務(wù)取決于前一個執(zhí)行結(jié)果;也可以創(chuàng)建循環(huán),聲明變量,復(fù)制和為變量賦值,定義錯誤處理Handler等等。綜合使用這些結(jié)構(gòu),我們可以用算法的方式定義復(fù)雜的業(yè)務(wù)流程。

          因此,BPEL可以和通用的編程語言,比如Java相比較,但它沒有Java強大。另一方面,它更簡單,更適合業(yè)務(wù)流程的定義。因此,BPEL并不是現(xiàn)代語言(如Java)的替代,而是它們的補充。

          讓我們更仔細地看看典型的BPEL流程。首先,BPEL業(yè)務(wù)流程收到一個請求。為相應(yīng)請求,BPEL執(zhí)行相關(guān)的Web服務(wù),最后相應(yīng)請求者。因為BPEL流程需要和其他的Web服務(wù)協(xié)作,它依賴于被調(diào)用的Web服務(wù)的WSDL描述。

          BPEL流程包含幾個步驟。每個步驟稱為活動。BPEL支持簡單的和結(jié)構(gòu)化的活動。簡單的活動代表基本的結(jié)構(gòu),用于普通的任務(wù),如下列表所示:
          1、調(diào)用其他Web服務(wù),使用
          2、等待客戶端通過發(fā)送一個消息調(diào)用業(yè)務(wù)過程,使用
          3、為同步操作創(chuàng)建一個響應(yīng),使用
          4、為一個數(shù)據(jù)變量賦值,使用
          5、指出錯誤和例外發(fā)生,使用
          6、等待若干時間,使用
          7、終止整個流程,使用,等等

          我們可以組合這些基本的簡單活動來定義復(fù)雜的算法,用于定義業(yè)務(wù)流程的執(zhí)行步驟。為組合這些基本活動,BPEL支持幾個結(jié)構(gòu)化的活動。最重要的是:
          ,用于定義按次序執(zhí)行的一系列活動
          ,用于定義并行執(zhí)行活動的集合
          ,用于創(chuàng)建條件分支
          ,用于定義循環(huán)
          ,用于從多個可選的路徑中選擇其一

          每個BPEL流程都可以使用聲明變量,使用定義partner link。我們將在后面的小節(jié)討論

          BPEL流程可以是同步也可以是異步的。同步的BPEL流程阻塞客戶端(使用該流程的客戶端)直到流程結(jié)束并返回結(jié)果。異步的BPEL流程并不阻塞客戶端。它使用一個回調(diào)來返回結(jié)果(如果有)。通常,我們在耗時較長的流程使用異步流程,把同步流程用于處理在短時間內(nèi)返回結(jié)果的流程。假如一個BPEL流程使用異步的Web服務(wù),通常情況下它自己也是異步的(雖然不是必要的)。

          對于客戶端來說,一個BPEL流程看起來就像其他的Web服務(wù)。當我們定義一個BPEL流程時,我們實際上定義了一個組合現(xiàn)存Web服務(wù)的新Web服務(wù)。這個新的BPELWeb服務(wù)使用一系列portType,通過這些portType,它提供了類似于其他Web服務(wù)的操作。為調(diào)用一個在BPEL定義的業(yè)務(wù)流程,我們必須調(diào)用這些Web服務(wù)的組合。下圖是一個BPEL流程的示意圖:

          點擊查看原始大小 545 x 301



          Partner Link

          BPEL示例

          BPEL vs Java

          BPEL服務(wù)器和開發(fā)工具

          PPEL + Java

          總結(jié)

          資源

          關(guān)于作者

          待續(xù)......


          原文地址:http://starrynight.blogdriver.com/starrynight/637103.html


          posted on 2006-03-09 10:23 hopeshared 閱讀(499) 評論(0)  編輯  收藏 所屬分類: JavaWeb Service
          主站蜘蛛池模板: 中江县| 五河县| 会东县| 五原县| 同心县| 清新县| 麻栗坡县| 西安市| 定兴县| 本溪| 开化县| 聂荣县| 佛学| 会昌县| 安化县| 田阳县| 正蓝旗| 清新县| 盐源县| 衡阳县| 松江区| 高淳县| 泰安市| 绥芬河市| 荣成市| 漳州市| 霍林郭勒市| 桂阳县| 星子县| 阿拉善右旗| 博客| 电白县| 延寿县| 阳西县| 新绛县| 常山县| 柳州市| 湟源县| 朔州市| 安福县| 炉霍县|