注意:您應該熟悉 WebSphere Studio Application Developer Integration Edition Version 5.1.1 Web 服務開發環境、ASP .NET Web 服務,並瞭解構建 BPEL 流程的知識。本文還帶有 BPEL 商務程序的樣本代碼。
引言
由於 XML 和 Web 服務需要使用 BPEL,它迅速成為面向服務體繫結構(SOA)的基礎,BPEL 還提供了 WebSphere Application Server Enterprise Process Choreographer(Process Choreographer)的公開標準。這些年來,許多公司專屬應用程式程式都分別在 J2EE 和.NET 平台上被獨立和並行的開發和部署。這些商務應用程式都設計有細粒度的業務功能。例如,在 J2EE 中,使用實體 bean 實現資訊持久性,並使用會話 bean 實現商務邏輯。這些商務應用程式同樣還在有限的業務域裡提供整合架構,用於後端或是遺留公司專屬應用程式程式的整合。舉例來說,Java Connector Architecture(JCA)和 Java Messaging Service(JMS)都是典型的 J2EE 應用程式整合架構。
隨著 Web 服務的出現,後端公司專屬應用程式程式通過使用 WSDL 被公開為可發現並可調用的商務服務。WSDL 為 Web 服務介面定義了服務語義,例如操作、協議綁定和訊息類型等。BPEL 層在 WSDL 之上,它指定參與流程流的複合 Web 服務的行為。因此,它使業務分析人員和架構師可以定義商務程序流的邏輯,並可以使用 BPEL 來支援與 J2EE Web 服務和 .NET Web 服務的長期啟動並執行會話。
實際上,BPEL 流程流成功與否,基本取決於每個 Web 服務的 WSDL 文檔中定義的 XML 服務語義。XML schema 使 XML 與其他檔案格式區別開來,XSD 是 XML schema 定義,它是綜合且複雜的資料類型定義系統。簡單地說,XSD 定義了 XML 文檔的外型。使用 XSD 設計簡單且強型別(strongly-typed)的對象是 Web 服務互通性的基礎。“改進 J2EE 技術和 .NET 間的互通性”(本系列的第 1 部分)指出,許多 Web 服務編程人員忽視了 XSD schema 設計的重要性。換句話說,即他們使用自己喜愛的程式設計語言來為 Web 服務實現編寫代碼,並隨後用供應商的工具從實現中獲得 Web 服務語義。這種自底向上的方法產生了有關互通性的問題。
.NET 和 J2EE 之間的互通性問題通常源於 XML 命名空間和複雜資料類型,例如嵌套的複雜類型數組以及日期和時間(本系列的第 2 部分和第 3 部分)。本文中講述的技巧將展示在 BPEL 流程整合中如何在兩個平台之間安全並正確的傳遞嵌套數組、複雜類型和日期。但這需要您為這些複雜類型仔細設計 XSD schema。
著手準備
要構建流程,您需要在 Windows 中安裝 IBM WebSphere Studio Application Developer V5.1.1 和 Microsoft .NET Framwork 1.1。對於本文來說,這兩種產品都在同一台機器上安裝並運行。.NET Visual Studio 是用來構建 .NET Web 服務的整合工具,在本技巧中不予使用。
IIS 的主目錄在預設情況下為 C:\Inetpub\wwwroot。我將使用該目錄發布 .NET Web 服務。同時,.NET Framework 1.1 安裝在 C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 目錄下,且 SDK 在 C:\Program Files\Microsoft.NET\SDK\v1.1 目錄下。
將以下目錄添至系統 PATH 變數:
c:\Windows\Microsoft.NET\Framework\v1.1.4322
c:\Program Files\Microsoft.NET\SDK\v1.1\Bin
BPEL 商務程序的樣本代碼在下載部分。
典型的互操作業務情境
設想一個購買情境,購買者通過貨物代理商來執行定購請求。貨物代理商擁有許多提供貨源的供應商;每個參與者都是獨立的訂戶且擁有自己的產品庫存管理系統。也就是說,某個供應商可能運行 J2EE Web 服務來管理其庫存而其它供應商可能會使用 .NET Web 服務來進行相同的操作。
購買流程從向不同的供應商索取產品報價開始。在購買者提交訂單之前,代理商與每個供應商聯絡以擷取相應產品的報價,且每個供應商將返回該產品的詳細資料。之後購買者將瀏覽資訊並繼續進行下個定購流程。圖 1 展示了兩個供應商(Supplier A 和 Supplier B)報價請求的流程圖。購買者請求代理商提供報價,代理商將該報價請求傳給各供應商,並隨後將供應商提供的資訊返回給購買者。
圖 1.報價請求的流程圖
在該圖中:
Buyer 是提出購買請求的用戶端。
Agent 是商務程序,請求供應商提供產品資訊並處理購買者的訂單。
Supplier A 是 Java Web 服務,管理供應商 A 的庫存。
Supplier B 是 .NET Web 服務,管理供應商 B 的庫存。
對於購買者提出的購買請求,代理流程將首先對各供應商構造產品報價請求。各供應商作出反應,提供相應的產品資訊,包括價格、數量和其它產品資訊。代理隨後將這些產品資訊返回給購買者以供瀏覽和定購。
在接下來的章節中,我們將構建代理流程,為 Supplier A 構建 Java Web 服務,並為 Supplier B 構建 .NET Web 服務。