在這個系列的前面兩部分,Holt Adams 解釋了 Web 服務非同步作業的相關性並討論了一些構建非同步服務的模式。現在,他要開始講解三個新規範 ― Web 服務的商務程序執行語言(Business Process Execution Language for Web Services)、Web 服務協調(Web Services Coordination)和 Web 服務事務(Web Services Transaction)― 並說明它們如何為 Web 服務開發人員提供許多可能性。您將看到這三個規範如何支援非同步作業並建立一個反映實際業務互動的可運行編程環境。
對於想使用 Web 服務來整合他們所在的企業與其夥伴之間的商務程序的 IT 設計師和商務分析師來說,日子只是好過了一點點。在這個系列的第一篇文章中,我提到過“隨著業界進一步開發決定如何協調 Web 服務間的流以及如何描述實現商務程序的 Web 服務間相關性的規範,對非同步作業的支援將被簡化。”那麼,猜一下剛剛發生了什麼事?8 月 9 日,IBM、Microsoft 和 BEA 發布了共同開發的一組用於向 Web 服務添加業務語義的規範。這三個規範被發布到了整個業界以進行進一步的開發,同時發布的還有一些逐條列出要滿足的各項額外功能的計劃,這些計劃的目的是啟動滿足一組非常重要的客戶流程和事務要求所需的標準化過程。這些規範是 Web 服務的商務程序執行語言(BPEL4WS 或 BPEL)、Web 服務協調(WS-Coordination 或 WS-C)和 Web 服務事務(WS-Transaction 或 WS-T)。這三個規範確實能使企業用一個全面的模型來描述他們的商務程序,並且還提供了一個用來執行該模型、協調商務活動和事務行為的實現架構。本文將概述一下 BPEL、WS-C 和 WS-T 規範如何簡化對非同步作業的支援。更重要的是,您還將瞭解這些規範如何描述和實現這樣的企業業務互動,這些業務互動通常在涉及到兩方或更多方的、長時間啟動並執行有狀態互動中進行一系列點對點訊息交換的企業業務互動。
在本系列前面的文章中,我介紹了非同步 Web 服務操作的一些概念,同時還介紹了用來實現雙方之間各個非同步作業的各種整合模式。這些模式本質上是被建模為無狀態的、獨立的互動。在這些模式中,我提出了參與應用程式或訊息傳遞傳輸在將請求映射到響應時要建立和管理相關器的要求。同樣,解決方案設計者也需要提供一種方法,通過這種方法把 回複地址(reply-to address)(響應將被發送到這個地址)提供給服務提供者;這樣,當響應可用時,就可以在分開的執行線程上把它們發送到請求客戶機。所有這些要求,以及其他更為重要的要求(比如協調一組有狀態互動和將請求路由到有狀態流程執行個體等要求)都將在新規範中得到滿足。於是,我們就可以在 商務程序引擎(business process engine)內對複雜的、實際的企業流程進行建模和直接執行(更多時候是在引擎上立即執行)。
目前,Web 服務描述語言(Web Services Description Language,WSDL)規範的版本 1.1 自身(不包括擴充)只支援無狀態的互動模型,按這種模型在兩方之間交換同步訊息或相互之間無關聯的非同步訊息。這三個新規範的發布使得這樣的企業商務程序有可能得到支援,這些企業商務程序要求涉及到在兩方或更多方之間的有狀態且長時間啟動並執行互動中進行的點對點訊息交換序列(同步的和非同步)的互動模型。
在進一步學習本文之前,您應該對 BPEL、WS-C 和 WS-T 規範有一個基本的理解,因為我們將在這裡探討來自這些規範的許多概念。非同步作業要求:回顧
支援實際的企業商務程序本質上要涉及到非同步作業,因為這些流程持續的時間比較長。每個流程的各個活動都需要與初始請求分開以最佳化系統資源的使用,並且需要把處理過程分解為一組可恢複的事務。我在這個系列的第一篇文章中提到過,支援非同步作業需要完成下面幾個任務:
為它們的交換定義一個或一組相關器和一種機制。
定義一個 回複地址,這個地址指定應該把響應發送到何處,並確保向服務提供者通知了這個目的地。
服務提供者產生響應的過程作為一個事務與請求分開。
客戶機接收到非同步響應。
客戶機和服務提供者把響應與相應的請求關聯在一起。
另外,由於我將在可能涉及到流程及其夥伴間許多互動的較大型有狀態業務事務的範疇內討論非同步作業,在非同步作業期間交換的訊息將需要被路由到同一個協調流程執行個體。因此,我還需要提出先前這個系列的第一篇文章中沒有列入的另一個要求:
把請求路由到有狀態協調流程執行個體。
BPEL XML 文法元素
本文將概述 BPEL 如何為長時間啟動並執行業務事務簡化整合夥伴間商務程序的過程,其中一個業務事務由流程及其夥伴之間的多個互動組成。在下面幾部分中,我將提供可以用來滿足上面標識出的非同步作業要求的具體 BPEL XML 文法樣本。
BPEL XML 流語言具有用來對活動和用於控制流程程行為的機制進行描述的文法。在我的樣本中,我將使用這種文法的一個子集,這個子集中包含下面的 主動標記(activity token)和 元素(element):
基本活動(Basic activity):用於處理入站請求和響應的接收、資料向全域容器的分配以及出站 Web 服務請求的產生。本文將示範的這些活動的樣本包括 receive 和 invoke 。
結構化活動(Structured activity):用於管理活動序列的整個流程流、活動的平行處理以及在控制流程程流時添加條件邏輯。本文將示範的這些活動的樣本包括 sequence 和 flow 。
其他的 BPEL XML 元素協助定義支援業務事務中的非同步作業所需的關係和相關性。本文將示範的這些元素的樣本包括 partners 、 serviceLinkTypes 、 role 、 link 、 source 和 target 。