<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    精彩的人生

    好好工作,好好生活

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks
    關(guān)鍵詞bpel ?? java ?? web服務(wù) ?? ??????????????????????????????????????

    原文鏈結(jié):http://www.theserverside.com/articles/article.tss?l=BPELJava

    BPEL and Java

    BPEL的作用

    ??? 實(shí)現(xiàn)從面向過程到面向服務(wù)的轉(zhuǎn)變需要一種語(yǔ)言以描述Web services是怎樣被組織成業(yè)務(wù)流程。如果這種描述是可執(zhí)行的,即允許我們定義抽象的流程,而且允許我們描述流程準(zhǔn)確的執(zhí)行規(guī)則,那將更好。而BPEL正是這樣一種語(yǔ)言。事實(shí)上它是最先具備以下特性的語(yǔ)言:
    ??? 1 允許我們定義抽象和可執(zhí)行的流程
    ??? 2 有大多數(shù)公司支持
    ??? 3 軟件運(yùn)行在bpel流程可以執(zhí)行(BPEL服務(wù)器)和設(shè)計(jì)(BPEL設(shè)計(jì)器)的平臺(tái)上
    ??? 在我們對(duì)BPEL做更深入的了解之前,先論述一下怎樣組織web服務(wù)。這通常有兩種方法:音樂演奏式和舞蹈式。音樂演奏式為一個(gè)中心進(jìn)程控制相關(guān)的web services并協(xié)調(diào)在操作中被調(diào)用的web services中不同操作的執(zhí)行。音樂演奏時(shí)的樂譜就是一次組織過程。被調(diào)用的web services并不知道他們被調(diào)用以組織成一個(gè)流程,也不知道他們是一個(gè)更高層業(yè)務(wù)流程的一部分(它們也不需要知道)。只有音樂演奏中的指揮者知道這些,所以音樂演奏方式是將清晰定義的操作和web services的調(diào)用順序集中起來(lái)管理的方式。
    ??? 相比而言舞蹈方式不依賴一個(gè)中心的協(xié)調(diào)器。每一個(gè)在舞蹈方式中被調(diào)用的web service清楚的知道何時(shí)執(zhí)行它的操作并且知道與誰(shuí)合作。舞蹈方式是專注與信息交互的合作方式。所有的參與者需要關(guān)注業(yè)務(wù)流程,操作的執(zhí)行,信息的交互以及信息交互的時(shí)機(jī)。
    ??? 通過對(duì)組合web services以執(zhí)行業(yè)務(wù)流程的了解,音樂演奏方式比之舞蹈方式為更靈活的處理方法:
    ???? 我們準(zhǔn)確的知道誰(shuí)對(duì)整個(gè)業(yè)務(wù)流程的執(zhí)行負(fù)責(zé)
    ???? 即使是那些不知道他們是一個(gè)業(yè)務(wù)流程一部分的web services,我們也可以組合
    ???? 當(dāng)錯(cuò)誤發(fā)生時(shí)我們也可以提供可選擇的替代
    ??? BPEL遵循音樂演奏的方式。舞臺(tái)方式為其他標(biāo)準(zhǔn)采用,比如WSCI(Web Services Choreogaphy Interface)和WS-CDL(Web Service Choreography Description Language)。比之BPEL,舞蹈方式還沒有獲得業(yè)界的支持。
    ??? 2002年8月,BEA、IBM、Microsoft開發(fā)出BPEL的第一個(gè)版本。從那時(shí)候起,越來(lái)越多廠商的加入使得在2003年3月在第一個(gè)版本基礎(chǔ)上做了一些調(diào)整和改進(jìn)的1.1版本的誕生。在2003年3月,BPEL被提交至OASIS組織作為標(biāo)準(zhǔn),后來(lái)WSBPELTC組織成立。
    ??? BPEL可以在公司內(nèi)部和公司之間使用。在公司內(nèi)部,BPEL的作用是標(biāo)準(zhǔn)化企業(yè)應(yīng)用集成和促進(jìn)以前孤立系統(tǒng)之間的集成。在企業(yè)之間,BPEL使得業(yè)務(wù)伙伴之間的集成更容易更高效。以BPEL描述的業(yè)務(wù)流程的定義在不影響現(xiàn)有系統(tǒng)的情況下完成升級(jí)。在已經(jīng)是函數(shù)環(huán)境或?qū)⒁ㄟ^web services方式提供服務(wù)的環(huán)境當(dāng)中BPEL是重要的技術(shù)。隨著web service技術(shù)得到越來(lái)越多的使用,BPEL的重要性將日漸增強(qiáng)。
    BPEL語(yǔ)言
    ????? 現(xiàn)在讓我們看一下BPEL語(yǔ)言。BPEL作為一種語(yǔ)言具體設(shè)計(jì)用來(lái)定義業(yè)務(wù)流程。BPEL支持兩種不同類型的業(yè)務(wù)流程:
    ???? 可執(zhí)行流程允許我們指定嚴(yán)格的業(yè)務(wù)流程的細(xì)節(jié),他們由音樂演奏引擎執(zhí)行。在大多數(shù)情況下,BPEL被用作定義可執(zhí)行的流程
    ??? 抽象的業(yè)務(wù)協(xié)議允許我們指定僅僅在各參與者之間公共的信息交換。他們不包含處理流程的內(nèi)部細(xì)節(jié)并且不是可執(zhí)行的。
    ??? BPEL建立在XML和web services之上,它是一種基于XML的語(yǔ)言,支持包括SOAP,WSDL,UDDI,WS-Reliable消息,WS-Addressing,WS-Coordination和WS-Transaction的web services技術(shù)棧。BPEL汲取了兩種早先的工作流語(yǔ)言:WSFL(Web Services Flow Language)和XLANG。WSFL由IBM設(shè)計(jì),基于有向的內(nèi)容。XLANG由微軟設(shè),是一種程序塊結(jié)構(gòu)語(yǔ)言。BPEL融合了這兩種方法為業(yè)務(wù)流程的描述提供了豐富的語(yǔ)法。
    ??? 一個(gè)BPEL流程嚴(yán)格指定了參與的web services被調(diào)用的順序。這可以順序或并行地完成。使用BPEL我們可以表示有條件的行為,例如一個(gè)web service的執(zhí)行可以依賴前一個(gè)調(diào)用的結(jié)果。我們也可以構(gòu)建循環(huán),申明變量,拷貝和賦值變量,定義錯(cuò)誤處理程序等。通過組合這些結(jié)構(gòu),我們可以以一個(gè)算法方式定義復(fù)雜的業(yè)務(wù)流程。
    ??? 因此BPEL可以與像java這樣的一般編程語(yǔ)言相比,不過沒有java那樣強(qiáng)大。但另一方面,它更簡(jiǎn)單并適合業(yè)務(wù)流程的定義。因此BPEL不是對(duì)java這樣的高級(jí)語(yǔ)言的替代而是一個(gè)補(bǔ)充。讓我們了解一下一個(gè)典型的BPEL流程。首先,這個(gè)BPEL業(yè)務(wù)流程收到一個(gè)請(qǐng)求。為了處理這個(gè)請(qǐng)求,流程開始調(diào)用相關(guān)的web services并將最后的結(jié)果返回給最初的請(qǐng)求發(fā)送者。因?yàn)锽PEL流程需要與其他的web services通信,所以它非常依賴被合成web service所調(diào)用的web services的WSDL描述。
    ??? 一個(gè)BPEL流程由很多個(gè)步驟組成,每一步驟被稱為一個(gè)活動(dòng)。BPEL支持基本的和結(jié)構(gòu)化的活動(dòng)。基本的活動(dòng)即為基礎(chǔ)的結(jié)構(gòu),用作公共的任務(wù),比如:
    ??? 使用調(diào)用其他的web services
    ??? 通過發(fā)送一個(gè)消息等待客戶端調(diào)用業(yè)務(wù)流程使用(收到一個(gè)請(qǐng)求)
    ??? 使用對(duì)同步的操作產(chǎn)生響應(yīng)
    ??? 使用處理數(shù)據(jù)變量
    ??? 使用指示錯(cuò)誤和異常
    ??? 使用等待一段時(shí)間
    ??? 使用結(jié)束整個(gè)流程等等
    ??? 這樣我們可以組合這些和其他基本的活動(dòng)定義準(zhǔn)確反映業(yè)務(wù)流程步驟的復(fù)雜算法。為了組合基本的活動(dòng)BPEL支持一些結(jié)構(gòu)化的活動(dòng)。其中最重要的有:
    ??? 允許我們定義一系列按順序調(diào)用的活動(dòng)
    ??? 用來(lái)定義一系列并行調(diào)用的活動(dòng)
    ??? 用來(lái)構(gòu)建分支結(jié)構(gòu)
    ??? 用來(lái)定義循環(huán)
    ??? 在許多的替代路徑中選擇一個(gè)的操作使用
    ??? 每一個(gè)BPEL流程也可以使用申明變量,使用定義合作鏈接。我們將在文章的下面部分對(duì)合作鏈接作更多的探討。
    ??? 一個(gè)BPEL流程可能是同步也可能是異步的。一個(gè)同步的BPEL流程鎖定客戶端(使用這個(gè)流程的)直到這個(gè)流程完成并返回一個(gè)結(jié)果給客戶端。一個(gè)異步的流程不鎖定客戶端,而是使用一個(gè)回調(diào)來(lái)返回結(jié)果(如果結(jié)果存在的話)。通常我們使用異步的流程實(shí)現(xiàn)長(zhǎng)時(shí)間的流程,使用同步實(shí)現(xiàn)在一個(gè)相對(duì)短的時(shí)間里返回結(jié)果的流程。如果一個(gè)BPEL流程使用異步的web services,流程本身同時(shí)也是異步的(雖然這不是必須的)。
    ???? 對(duì)于客戶端來(lái)說(shuō),一個(gè)BPEL流程看起來(lái)就和其他的web service差不多。當(dāng)我們定義一個(gè)流程,實(shí)際上我們是在定義一個(gè)由已存在服務(wù)組合而成的新的web service。為了調(diào)用由BPEL描述的業(yè)務(wù)流程,我們需要調(diào)用合成出來(lái)的復(fù)合web service。下圖為一個(gè)BPEL流程的示意圖:
    ? example-bpel-process
    ?? 合作鏈接
    上面我們提到BPEL也申明合作鏈接,現(xiàn)在讓我們解釋一下什么是合作鏈接。我們已經(jīng)提到BPEL和外部的web services的交互有兩種方式:
    ?? BPEL流程調(diào)用其他web services上的操作
    ?? BPEL流程接收客戶端的調(diào)用。在所有客戶端中有一個(gè)是發(fā)起最初調(diào)用的BPEL流程的使用者。其他客戶端是web services。舉例來(lái)說(shuō),是那些已經(jīng)為BPEL流程所調(diào)用,但是需要回調(diào)以返回結(jié)果。
    ?? BPEL把這些所有和它交互部分的鏈接稱之為合作鏈接(partner links)。合作者鏈接可以是被BPEL流程調(diào)用的web services,也可以是調(diào)用BPEL流程的客戶端。每一個(gè)BPEL流程至少有一個(gè)客戶端合作鏈接,因?yàn)楸厝挥幸粋€(gè)調(diào)用BPEL流程的客戶端。
    ??? 通常一個(gè)BPEL流程也至少有一個(gè)調(diào)用的合作鏈接,因?yàn)樗鼘⒄{(diào)用至少一個(gè)web service(通常不止一個(gè))。不管怎么樣,被調(diào)用的合作鏈接可能成為客戶端鏈接——這通常是在異步服務(wù)的情況下,流程調(diào)用一個(gè)操作的地方。然后這個(gè)服務(wù)(合作者)調(diào)用流程上的回調(diào)操作來(lái)返回被請(qǐng)求的數(shù)據(jù)。
    ??? BPEL像合作鏈接一樣對(duì)待客戶端有兩個(gè)原因。最顯而易見的是支持異步交互,第二個(gè)原因是基于BPEL流程可以提供服務(wù)的事實(shí)。這些通過端口類型提供的服務(wù)可以為多于一個(gè)的客戶端使用。流程可能希望區(qū)分不同客戶端并僅僅提供給他們經(jīng)授權(quán)的功能。舉例來(lái)說(shuō),一個(gè)保險(xiǎn)流程可能提供給汽車保險(xiǎn)客戶與房產(chǎn)保險(xiǎn)客戶不同的一系列操作。
    ??? 綜上述,我們可以看到合作鏈接描述了指向合作者的鏈接,這樣的合作者可能是:
    ??? 流程調(diào)用的服務(wù)
    ??? 調(diào)用流程的服務(wù)
    ??? 兩者兼而有之的服務(wù)——它們既被流程調(diào)用也調(diào)用流程

    BPEL的例子
    ??? 為了了解BPEL流程究竟是什么樣子,下面我們給出一個(gè)選擇最好保險(xiǎn)服務(wù)的非常簡(jiǎn)單的BPEL流程。首先,我們申明指向一個(gè)BPEL流程客戶端(稱作client)和兩個(gè)保險(xiǎn)web服務(wù)(稱作insuranceA 和 insuranceB)的合作鏈接。
    ?

    ?1<?xml?version="1.0"?encoding="utf-8"?>
    ?2<process?name="insuranceSelectionProcess"??????????targetNamespace="http://packtpub.com/bpel/example/"?????????xmlns="http://schemas.xmlsoap.org/ws/2003/03/business-process/"?????????xmlns:ins="http://packtpub.com/bpel/insurance/"?????????xmlns:com="http://packtpub.com/bpel/company/"?>
    ?3<partnerLinks>
    ?4??????<partnerLink?name="client"
    ?5?????????????????partnerLinkType="com:selectionLT"
    ?6???????????????????myRole="insuranceSelectionService"/>
    ?7??????<partnerLink?name="insuranceA"???????????????????????????????????partnerLinkType="ins:insuranceLT"?
    ?8?myRole="insuranceRequester"
    ?9???????????????????partnerRole="insuranceService"/>
    10??????<partnerLink?name="insuranceB"???????????????????partnerLinkType="ins:insuranceLT"
    11???????????????????myRole="insuranceRequester"???????????????????partnerRole="insuranceService"/>
    12???</partnerLinks>??
    13
    14



    然后,我們?yōu)楸kU(xiǎn)請(qǐng)求申明變量(InsuranceRequest),保險(xiǎn)A和B響應(yīng)(InsuranceAResposne, InsuranceBResposne),和最終的選擇(InsuranceSelectionResponse)


    ???
    <variables>
    ??????
    <!--?input?for?BPEL?process?-->
    ??????
    <variable?name="InsuranceRequest"
    ????????????????messageType
    ="ins:InsuranceRequestMessage"/>
    ??????
    <!--?output?from?insurance?A?-->
    ??????
    <variable?name="InsuranceAResposne"????????????????messageType="ins:InsuranceResponseMessage"/>
    ??????
    <!--?output?from?insurance?B?-->
    ??????
    <variable?name="InsuranceBResposne"????????????????messageType="ins:InsuranceResponseMessage"/>
    ??????
    <!--?output?from?BPEL?process?-->
    ??????
    <variable?name="InsuranceSelectionResponse"????????????????messageType="ins:InsuranceResponseMessage"/>
    ???
    </variables>



    最后,我們具體化流程步驟。首先我們從客戶端等待初始的請(qǐng)求信息()。然后我們使用并行調(diào)用()兩個(gè)保險(xiǎn)web服務(wù)。保險(xiǎn)服務(wù)返回保額,然后我們選擇低的保額(/ )并使用將結(jié)果返回給客戶(BPEL流程的調(diào)用者)


    ???
    <sequence>
    ??????
    <!--?Receive?the?initial?request?from?client?-->
    ??????
    <receive?partnerLink="client"
    ???????????????portType
    ="com:InsuranceSelectionPT"???????????????operation="SelectInsurance"???????????????variable="InsuranceRequest"
    ???????????????createInstance
    ="yes"?/>
    ?????
    <!--?Make?concurrent?invocations?to?Insurance?A?and?B?-->
    ??????
    <flow>
    ?????????
    <!--?Invoke?Insurance?A?web?service?-->
    ?????????
    <invoke?partnerLink="insuranceA"?????????????????portType="ins:ComputeInsurancePremiumPT"?????????????????operation="ComputeInsurancePremium"?????????????????inputVariable="InsuranceRequest"
    ?????????????????outputVariable
    ="InsuranceAResposne"?/>
    ?????????
    <!--?Invoke?Insurance?B?web?service?-->
    ?????????
    <invoke?partnerLink="insuranceB"
    ?????????????????portType
    ="ins:ComputeInsurancePremiumPT"
    ?????????????????operation
    ="ComputeInsurancePremium"
    ?????????????????inputVariable
    ="InsuranceRequest"
    ?????????????????outputVariable
    ="InsuranceBResposne"?/>
    ??????
    </flow>
    ??????
    <!--?Select?the?best?offer?and?construct?the?response?-->
    ??????
    <switch>
    ????????
    <case?condition="bpws:getVariableData('InsuranceAResposne',
    ?????????????????????????'confirmationData','/confirmationData/Amount')
    ??????????????????????<=?bpws:getVariableData('InsuranceBResposne',
    ?????????????????????????'confirmationData','/confirmationData/Amount')"
    >
    ???????????
    <!--?Select?Insurance?A?-->
    ???????????
    <assign>
    ?????????????
    <copy>
    ???????????????
    <from?variable="InsuranceAResposne"?/>
    ???????????????
    <to?variable="InsuranceSelectionResponse"?/>
    ?????????????
    </copy>
    ???????????
    </assign>
    ????????
    </case>
    ????????
    <otherwise>
    ???????????
    <!--?Select?Insurance?B?-->
    ???????????
    <assign>
    ?????????????
    <copy>
    ???????????????
    <from?variable="InsuranceBResposne"?/>
    ???????????????
    <to?variable="InsuranceSelectionResponse"?/>
    ?????????????
    </copy>
    ???????????
    </assign>
    ????????
    </otherwise>
    ??????
    </switch>
    ??????
    <!--?Send?a?response?to?the?client?-->
    ??????
    <reply?partnerLink="client"
    ?????????????portType
    ="com:InsuranceSelectionPT"
    ?????????????operation
    ="SelectInsurance"
    ?variable
    ="InsuranceSelectionResponse"/>
    ???
    </sequence>
    </process>



    因?yàn)槊恳粋€(gè)BPEL流程都是一個(gè)web service,每一個(gè)BPEL流程也需要一個(gè)WSDL文檔。我們將不再對(duì)開發(fā)BPEL流程的更深入的細(xì)節(jié)作討論。更多的資料可以參閱由Packt Publishing于2004年10月出版的《web服務(wù)的業(yè)務(wù)流程執(zhí)行語(yǔ)言》(Business Process Execution Language for Web Services)
    ? BPEL和Java
    ? 看到從上面BPEL流程的例子一些人也許會(huì)想這樣一個(gè)組合用java也很容易實(shí)現(xiàn)。對(duì)于非常簡(jiǎn)單的流程來(lái)說(shuō)這是正確的。但是對(duì)于更復(fù)雜的流程來(lái)說(shuō)我們會(huì)看到BPEL比之Java的至少兩個(gè)重要的優(yōu)勢(shì)。
    ? BPEL比之Java的第一個(gè)優(yōu)勢(shì)是BPEL流程是可移植的,甚至可以運(yùn)行在Java平臺(tái)之外。BPEL流程可以在基于Java平臺(tái)的音樂演奏服務(wù)器上運(yùn)行也可以在任何其他的軟件平臺(tái)上運(yùn)行(如.Net平臺(tái))。這在使用不同平臺(tái)的B-B交互中顯得尤為重要。
    ? BPEL的第二個(gè)優(yōu)勢(shì)是它針對(duì)業(yè)務(wù)流程特性的支持。通常業(yè)務(wù)流程是長(zhǎng)時(shí)間運(yùn)行的,特別是他們?cè)趇nternet上實(shí)現(xiàn)與其他合作者交互的時(shí)候。有可能這樣流程的執(zhí)行需要幾分鐘,幾小時(shí),甚至是幾天才能完成。有可能它們調(diào)用一個(gè)web service需要等待一個(gè)相對(duì)長(zhǎng)的時(shí)間以獲得回調(diào)的結(jié)果。如果我們不使用一個(gè)BPEL流程而是使用一個(gè)Java應(yīng)用程序我們的大部分時(shí)間將會(huì)擔(dān)心什么線程已經(jīng)完成,什么仍然在運(yùn)行。我們將不得不跟蹤Java線程以確定那些我們能結(jié)束,又有哪些需要繼續(xù)運(yùn)行以獲得回調(diào)結(jié)果。
    ? BPEL也用相對(duì)簡(jiǎn)單的方式支持補(bǔ)償。對(duì)在業(yè)務(wù)流程中那些已經(jīng)成功完成操作的補(bǔ)償,或者撤銷操作是業(yè)務(wù)流程中最重要的問題之一。補(bǔ)償?shù)哪康氖腔謴?fù)這個(gè)被撤銷的業(yè)務(wù)流程中已經(jīng)執(zhí)行完成的活動(dòng)。
    ?? 補(bǔ)償與大多數(shù)業(yè)務(wù)流程的特性相關(guān),這種業(yè)務(wù)流程是長(zhǎng)時(shí)間運(yùn)行的并且使用異步的方式與松散耦合的web servcies通信。就成功完成來(lái)說(shuō)業(yè)務(wù)流程是非常脆弱的,因?yàn)樗麄兯褂玫臄?shù)據(jù)本身就是脆弱的。因?yàn)樗鼈兺ǔM跨多個(gè)合作伙伴(同時(shí)是多個(gè)企業(yè)),所以需要關(guān)注業(yè)務(wù)流程可能是完整執(zhí)行也可能部分結(jié)果是未完成的,即補(bǔ)償。這和在企業(yè)信息系統(tǒng)中的ACID事務(wù)類似。BPEL使用定義的補(bǔ)償操作的能力支持補(bǔ)償?shù)母拍?某種范圍上講這是特殊處理),這種特性稱之為長(zhǎng)時(shí)間事務(wù)(LRT)。
    ??? 業(yè)務(wù)流程也可能需要對(duì)中心事件做出反映。這樣的事件可能是消息事件或者警告事件。通過在端口類型上的調(diào)用操作消息事件由引入消息觸發(fā)。警告事件是時(shí)間相關(guān)的,并且在一段持續(xù)時(shí)間之后或者一個(gè)特殊的時(shí)間觸發(fā)。BPEL對(duì)業(yè)務(wù)流程中的事務(wù)管理提供了很好的支持。
    ??? 這樣就有并發(fā)活動(dòng)。在BPEL中并發(fā)活動(dòng)使用活動(dòng)來(lái)模擬。在標(biāo)簽內(nèi)聚集嵌套的活動(dòng)非常直觀,也對(duì)表示那些并不太復(fù)雜的并發(fā)場(chǎng)景非常有幫助。為了表達(dá)更復(fù)雜的場(chǎng)景,提供在活動(dòng)之間表達(dá)同步依賴的能力。換句話說(shuō),我們可以具體指定哪個(gè)活動(dòng)能夠開始,什么時(shí)候開始(依賴其他的活動(dòng))并且可以定義復(fù)雜的依賴。舉例來(lái)說(shuō),我們常常指定一個(gè)特定的活動(dòng)或幾個(gè)活動(dòng)必須在其他一個(gè)或幾個(gè)活動(dòng)結(jié)束之后才能開始。
    ??? 與web services的無(wú)狀態(tài)模式相比業(yè)務(wù)流程模式需要使用一個(gè)有狀態(tài)的模式。當(dāng)一個(gè)客戶端開始一個(gè)業(yè)務(wù)流程,一個(gè)新的實(shí)例將會(huì)創(chuàng)建。這個(gè)實(shí)例在業(yè)務(wù)流程的生命周期中存在。發(fā)送給業(yè)務(wù)流程的消息(使用在端口類型和通信端口上的操作)需要被轉(zhuǎn)送到正確的業(yè)務(wù)流程實(shí)例。BPEL提供使用特定業(yè)務(wù)數(shù)據(jù)來(lái)保存指向特定業(yè)務(wù)流程實(shí)例的機(jī)制。這種功能稱為相關(guān)性(correlation)。
    ??? 我們可以繼續(xù)討論,不過很明顯BPEL已設(shè)計(jì)用來(lái)滿足定義業(yè)務(wù)流程的需要。很明顯,BPEL作為一種編程語(yǔ)言或是一個(gè)平臺(tái)來(lái)說(shuō)都不能取代Java。事實(shí)上,Java平臺(tái)是運(yùn)行BPEL流程的一個(gè)選擇。
    ??? BPEL服務(wù)器和開發(fā)工具
    ??? 為了執(zhí)行BPEL流程我們需要一個(gè)音樂演奏式的服務(wù)器。這樣的服務(wù)器為可執(zhí)行的BPEL業(yè)務(wù)流程提供一個(gè)運(yùn)行的環(huán)境。BPEL與web services緊密相關(guān),也和支持web service開發(fā)的現(xiàn)代軟件平臺(tái)緊密相關(guān),特別是J2EE和.Net平臺(tái)。
    ??? BPEL服務(wù)器可以使用J2EE或者.Net應(yīng)用服務(wù)器的環(huán)境,這樣他們可以使用應(yīng)用服務(wù)器提供的服務(wù),比如安全,事務(wù),可伸縮性,和數(shù)據(jù)庫(kù)的集成,EJB組件服務(wù),如JMS的消息服務(wù)等等。
    ??? BPEL服務(wù)器在J2EE和.Net平臺(tái)上都已存在。在J2EE平臺(tái)下我們至少可以在以下中選擇:
    ???? Oracle BPEL Process Manager (http://www.oracle.com/technology/products/ias/bpel/index.html)
    ???? IBM WebSphere Business Integration Server Foundation??????? (http://www.ibm.com/software/integration/wbisf)
    ??? IBM alphaWorks BPWS4J (http://www.alphaworks.ibm.com/tech/bpws4j)
    ??? OpenStorm Service Orchestrator (http://www.openstorm.com)
    ???? Vergil VCAB Server (http://www.vergiltech.com/products_VCAB.php)
    ??? Active Endpoints ActiveWebflow Server (http://www.active-endpoints.com/products/index.html)
    ??? ActiveBPEL engine (http://www.activebpel.org/)
    ??? Fivesight Process eXecution Engine (http://www.fivesight.com/pxe.shtml)
    ??? 基于.Net平臺(tái)的BPEL服務(wù)器包括:
    Microsoft BizTalk 2004 (http://www.microsoft.com/biztalk/)
    OpenStorm Service Orchestrator (http://www.openstorm.com)
    ? OpenStorm提供包括J2EE和.NET平臺(tái)上的解決方案。除了BPEL音樂演奏式服務(wù)器之外還有一些可用的BPEL設(shè)計(jì)工具。這些工具支持對(duì)BPEL流程的圖形化開發(fā)并通常和服務(wù)器集成在一起:
    ?? Oracle BPEL Designer
    ? IBM WebSphere Studio Application Developer, Integration Edition
    ? IBM BPWS4J Editor
    ??Vergil VCAB Composer
    ?Active Endpoints ActiveWebflow Designer
    當(dāng)Vergil VCAB Composer在.NET平臺(tái)上建立時(shí),Oracle, IBM和Active Endpoints的解決方案則是基于Java Eclipse框架。我們可以看到在Java平臺(tái)上更多可用的BPEL服務(wù)器和設(shè)計(jì)器。
    BPEL+jAVA
    ? 我們已經(jīng)看到BPEL是組合web services成為業(yè)務(wù)流程的合適語(yǔ)言。BPEL不是一般普適性語(yǔ)言(也不想成為)。因此BPEL和JAVA相互配合,Java負(fù)責(zé)web services的編程實(shí)現(xiàn)和web services與BPEL流程的執(zhí)行平臺(tái)。
    ?? 如在規(guī)格說(shuō)明書中提到的,BPEL是可擴(kuò)展的。特別是BPEL可以擴(kuò)展至web services之外是非常有前景的。這意味著我們可以使用BPEL組合不同的資源而不僅僅是web services。在J2EE平臺(tái)中,可能包括EJBs,JMS,RMI,JCA和其他資源。對(duì)于這個(gè)問題通常有兩種解決方法:
    ??? 支持BPEL和Java代碼的混合,這就是BPELJ的思想
    ??? 用WSDL描述所有的資源(Java classes,EJBs,JMS等等),這是Web Services調(diào)用框架中的思想
    ? BPELJ提供在BPEL流程定義中包含java代碼(稱之為JAVA片斷)的可能性。這一方面使我們能夠從BPEL中直接調(diào)用Java資源(BPELJ支持Java合作者鏈接),另一方面,它給了BPELJ增強(qiáng)的能力,因?yàn)槭褂胘ava片斷,我們可以執(zhí)行諸如計(jì)算值,構(gòu)建XML文檔之類的任務(wù),也可以不用創(chuàng)建web服務(wù)就執(zhí)行其他代碼。我們也可以使用BPEL變量表達(dá)JAVA代碼片段。IBM和BEA支持BPELJ,并且已經(jīng)發(fā)表了BPELJ的白皮書。
    ??? 將java代碼整合進(jìn)BPEL流程以支持調(diào)用JAVA資源是非常有用的。但是,在某些情況下這樣的處理方式也會(huì)帶來(lái)缺點(diǎn)。對(duì)一個(gè)Java資源的調(diào)用不同于對(duì)一個(gè)web service的調(diào)用。web服務(wù)調(diào)用框架(WSIF)遵循另外一種處理思路:在BPEL中使用相同的語(yǔ)法調(diào)用資源或服務(wù)并使用WSDL來(lái)描述,即使它是一個(gè)不通過SOAP協(xié)議通信的Java資源。WSIF也允許我們將這樣的服務(wù)和實(shí)際的實(shí)現(xiàn)與協(xié)議相映射。
    ??? 換句話說(shuō),我們可以把對(duì)抽象服務(wù)的描述與基于SOAP協(xié)議的實(shí)現(xiàn)綁定,與Java類綁定,與EJB綁定或者其它支持的資源,這只需要修改WSDL綁定即可。在BPEL中沒有代碼的更改是必須的而支持BPEL擴(kuò)展也是需要的。對(duì)這種綁定的支持在由WSIF提供的支持者那里是堅(jiān)定不移的。
    ?? WSIF是最初由IBM的WSTK (Web Services Toolkit)開發(fā)中alphaWorks部分發(fā)展而來(lái)的Apache技術(shù)。現(xiàn)在如Oracle BPEL Process Manager的一些BPEL服務(wù)器已經(jīng)支持WSIF。
    ?? 這兩種方法,BPELJ和WSIF都適合現(xiàn)實(shí)世界的場(chǎng)景并且使得BPEL在EAI和B2B中都非常有用。
    結(jié)束語(yǔ)
    ??? BPEL是面向過程轉(zhuǎn)向面向服務(wù)的一種重要語(yǔ)言。因?yàn)锽PEL具體設(shè)計(jì)用來(lái)定義業(yè)務(wù)流程,因此對(duì)業(yè)務(wù)流程的很多特殊性有很好的支持,如長(zhǎng)時(shí)間事務(wù),補(bǔ)償,事件管理,相關(guān)性等等。BPEL非常適合和J2EE平臺(tái)一起使用,很多BPEL服務(wù)器也是建立在J2EE之上的。結(jié)合BPEL和Java的BPELJ以及WSIF的思路使得BPEL的可用性越來(lái)越好。應(yīng)該看到正在制定的JBI(Java Business Integration)規(guī)范將會(huì)在JAVA平臺(tái)里給業(yè)務(wù)集成和BPEL一個(gè)更好的備有證明文件的位置。??
    ?


    地址:http://cauzcy.bokee.com/4749126.html

    posted on 2006-04-21 15:04 hopeshared 閱讀(2743) 評(píng)論(1)  編輯  收藏 所屬分類: Web Service

    Feedback

    # re: 轉(zhuǎn)載:BPEL和Java 2009-03-04 09:22 你老子
    cao ni lao mu  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 中文字幕亚洲免费无线观看日本| 国产精品色午夜免费视频| 黄页网站在线视频免费| 亚洲综合激情另类小说区| 亚洲毛片av日韩av无码| 免费看美女被靠到爽| 蜜桃AV无码免费看永久| 国产免费AV片在线观看| 添bbb免费观看高清视频| 亚洲一区二区三区丝袜| 亚洲国产美女视频| 亚洲A∨无码一区二区三区| 亚洲熟妇少妇任你躁在线观看无码 | 一个人看www免费高清字幕| 亚洲狠狠婷婷综合久久| 亚洲一区二区三区久久| 亚洲视频在线观看免费视频| 久久亚洲免费视频| 亚洲精品国偷自产在线| 亚洲国产专区一区| 免费大片黄手机在线观看| 国产黄色片在线免费观看| 成人免费无码大片a毛片软件| 97在线线免费观看视频在线观看| 91香蕉国产线在线观看免费 | 亚洲精品无码专区在线在线播放| 亚洲人成电影在线播放| 亚洲欧洲中文日韩久久AV乱码| 国产片免费在线观看| 国产免费人成视频在线观看| 在线免费视频一区二区| 在线播放免费人成视频在线观看| 免费看无码自慰一区二区| 免费毛片在线播放| 破了亲妺妺的处免费视频国产| 日本一道本高清免费| 亚洲VA综合VA国产产VA中| 精品亚洲成α人无码成α在线观看| 亚洲国产日韩成人综合天堂| 国产亚洲精品拍拍拍拍拍| 日本红怡院亚洲红怡院最新|