在本文中,我將解釋您可以如何使用來自 IBM® Rational®軟件的開發(fā)工具在三維空間中開發(fā)企業(yè) SOA 中間件應(yīng)用程序。同時(shí)您還將了解到如何將 Web 服務(wù)組件組合成跨多重 SOA 的中間件應(yīng)用程序,以及如何使用下面四種不同的方法來開發(fā)它們:
讓我們首先從物理和邏輯的角度研究每種方法。
邏輯和物理 Web 服務(wù)
物理 Web 服務(wù)即在存儲(chǔ)庫中所發(fā)布和找到的 Web 服務(wù)。創(chuàng)建一個(gè)邏輯 Web 服務(wù)后,可以繼續(xù)將一個(gè)邏輯 Web 服務(wù)與另一個(gè)物理 Web 服務(wù)組合起來,創(chuàng)建一個(gè)新的邏輯 Web 服務(wù)以供使用。之后,您可以將最后得到的邏輯 Web 服務(wù)與另一個(gè)物理或邏輯 Web 服務(wù)組合起來。您也可以將邏輯 Web 服務(wù)轉(zhuǎn)換成物理 Web 服務(wù)組件,以在存儲(chǔ)庫中發(fā)布和發(fā)現(xiàn)它們。
通過定義中間件應(yīng)用程序的業(yè)務(wù)模型和物理 Web 服務(wù)組件的業(yè)務(wù)模型之間的關(guān)系,您可以創(chuàng)建邏輯 Web 服務(wù)的 SOA 中間件應(yīng)用程序。為此,您可以使用 Rational Software Architect 和 Rational Software Modeler 中的一個(gè)或同時(shí)使用它們來支持使用統(tǒng)一建模語言(Unified Modeling Language,UML)的模型驅(qū)動(dòng) (model-driven) 開發(fā),以及支持分別記錄系統(tǒng)的不同視圖的 UML 可視化建模設(shè)計(jì)。
自頂向下方法
自頂向下方法從 Web 服務(wù)或非 Web 服務(wù)中間件應(yīng)用程序金字塔(請(qǐng)參見圖 1)的頂端開始。您需要將其劃分成更小的 Web 服務(wù)或組件,在金字塔的每個(gè)低層繼續(xù)這個(gè)過程,直到最小的部分或組件到達(dá)金字塔的底部為止。系統(tǒng)的所有部分都將順利地集成在一起并進(jìn)行互操作。
圖 1. 自頂向下方法
然而,互操作性可能具有不同的含義,這取決于應(yīng)用程序的預(yù)定用途。例如,如果應(yīng)用程序是以數(shù)據(jù)為中心,那么互操作性就是以數(shù)據(jù)為中心的。但是如果應(yīng)用程序的主要目標(biāo)是實(shí)現(xiàn)業(yè)務(wù)流程,那么互操作性就是基于流程的。
現(xiàn)在,讓我們從邏輯的角度來研究自頂向下方法。自頂向下方法考慮由企業(yè) SOA 中間件應(yīng)用程序組成的應(yīng)用程序的目標(biāo)。這個(gè)目標(biāo)又分成子目標(biāo),每個(gè)子目標(biāo)更進(jìn)一步分成更小的單元。這個(gè)過程一直繼續(xù)下去,直到達(dá)到 SOA 中間件應(yīng)用程序的金字塔的底部為止。
顯然,確保所有子目標(biāo)都順利地進(jìn)行互操作非常重要。如果目標(biāo)針對(duì)的是提供一個(gè)服務(wù)或一組服務(wù),那么服務(wù)互操作性就成為首要關(guān)注的事情。然而,如果目標(biāo)針對(duì)的是實(shí)現(xiàn)策略和規(guī)則,那么我們就需要將重點(diǎn)放在策略的互操作性上。
在現(xiàn)實(shí)世界中,并不存在單純的以數(shù)據(jù)為中心、基于流程或策略互操作性。相反,我們通常碰到的都是數(shù)據(jù)、流程、服務(wù)和策略互操作性混合在一起。每種互操作性類型所占的比例可以動(dòng)態(tài)地變化,這取決于每個(gè) Web 服務(wù)如何模塊化、設(shè)置優(yōu)先級(jí)、最優(yōu)化,以及如何通過松耦合的方式使彼此的交互達(dá)到最大程序。同樣,它也依賴于 Web 服務(wù)所運(yùn)行的平臺(tái)(例如開放的 Eclipse 體系結(jié)構(gòu))。
自底向上方法
從物理的角度來說,自底向上方法將基本的 Web 服務(wù)組件定義為最小的基礎(chǔ)部分。這使您可以將它與上一層更大的元素組合在一起,繼續(xù)這個(gè)過程,直到所有部分都在金字塔頂點(diǎn)處集成為一個(gè)完整的復(fù)雜 Web 服務(wù)和關(guān)系的中間件應(yīng)用程序?yàn)橹梗鐖D 2 所示。
圖 2. 自底向上方法
這個(gè)物理角度假定系統(tǒng)的所有部分都可以順利地進(jìn)行互操作?;ゲ僮餍缘暮x依賴于 Web 服務(wù)交互的類型:以數(shù)據(jù)為中心、業(yè)務(wù)流程或組合。應(yīng)用程序之間互操作性的每種類型所占的比例可以動(dòng)態(tài)地變化。
從邏輯的角度來說,自底向上方法從作為 SOA 企業(yè)目標(biāo)的基礎(chǔ)構(gòu)件的子目標(biāo)(例如服務(wù)組件)開始。作為一名開發(fā)人員,您可以與分析人員一起,將它們組合成上一層的更大目標(biāo)。繼續(xù)這個(gè)過程,直到所有的子目標(biāo)都在金字塔的頂點(diǎn)處集成為一個(gè) SOA 中間件的企業(yè)目標(biāo)為止。
確保所有的子目標(biāo)都將順利地進(jìn)行交互非常重要。如果子目標(biāo)針對(duì)的是提供一個(gè)服務(wù)或一組服務(wù),我們首要關(guān)注的事情就是子目標(biāo)之間的服務(wù)互操作性。然而,如果子目標(biāo)針對(duì)的是實(shí)現(xiàn)策略和規(guī)則,那么我們關(guān)心的事情就變成子目標(biāo)之間的策略互操作性。
旁路方法
從物理的角度來說,旁路方法(如圖 3 所示)允許您在自頂向下或自底向上方法的旁路添加或刪除 Web 服務(wù)組件。這使您能夠在保持現(xiàn)有中間件完整的同時(shí),更好地響應(yīng)變更的設(shè)計(jì)和開發(fā)需求。旁路角度假定要添加的組件將可以與現(xiàn)有的組件順利地交互。同樣,它也假定要?jiǎng)h除的組件將不會(huì)破壞剩余組件之間的互操作性。
圖 3. 旁路方法
從邏輯的角度來說,旁路方法使您能夠從在自頂向下或自底向上方法的旁路添加邏輯 Web 服務(wù)的子目標(biāo)開始。這使您可以添加諸如新的 Web 服務(wù)的服務(wù)類型和位置這樣的子目標(biāo)。您可以使用任一方法的旁路從邏輯 Web 服務(wù)中刪除子目標(biāo)。
您還可以更改 Web 服務(wù)的子目標(biāo),以便重用它來開發(fā)各種中間件應(yīng)用程序。請(qǐng)確保在邏輯上添加、刪除或者更改子目標(biāo)時(shí),Web 服務(wù)之間的互操作仍然能夠在生產(chǎn)環(huán)境中順利地進(jìn)行。您還需要確保在測(cè)試環(huán)境中運(yùn)行的 Web 服務(wù)能夠順利地出色工作。
嵌入式方法
從物理和邏輯的角度來說,嵌入式方法是上述三種方法的混合,至少要嵌入金字塔某層中的兩級(jí)或三級(jí)深。在這個(gè)嵌套、兩級(jí)嵌入式方法示例中,您可以在自底向上方法中嵌入自頂向下方法(請(qǐng)參見圖 4),或者反過來。您也可以在自頂向下或自底向上方法中嵌入旁路方法。
圖 4. 嵌入式方法
您可以獲得三級(jí)嵌套的嵌入式方法。例如,通過將旁路方法嵌入到自頂向下方法,接著嵌入到自底向上方法,您可以做到這一點(diǎn)。您也可以將自頂向下方法嵌入到第二個(gè)自頂向下方法,接著再嵌入到自底向上方法。
決定使用哪種方法
在開放的體系結(jié)構(gòu)中開發(fā) SOA 中間件應(yīng)用程序依賴于(舉例)您想要使用哪種關(guān)系型或 WebSphere®包。正如前面提到的,您可以使用 Rational Software Architect 和 Rational Software Modeler 來對(duì)企業(yè) SOA 中間件進(jìn)行建模,將 Web 服務(wù)當(dāng)作對(duì)象、關(guān)系實(shí)體或者兩者的混合。您也可以使用 Rational Web Developer for WebSphere Software for Linux?、Windows™ 2000、Windows 2003 Server 和 Windows XP 來簡(jiǎn)化您的 Web 服務(wù)開發(fā)。
結(jié)束語
開發(fā)企業(yè) SOA 中間件需要事先計(jì)劃好可以將多少 SOA 作為中間件應(yīng)用程序組合在一起。最好就使用哪些方法開發(fā)中間件的問題與業(yè)務(wù)分析人員小組進(jìn)行溝通。您還將發(fā)現(xiàn),解決了這些問題使開發(fā)企業(yè) SOA 中間件更加容易。您可以為中間件應(yīng)用程序開發(fā)這樣的 SOA,它們既重用,又可以交互和集成。而且通過事先決定使用哪些方法或方法的組合,使分析人員設(shè)計(jì)和分析中間件的工作變得簡(jiǎn)單。分析人員能夠確定使用哪種方法以及將多少個(gè) SOA 組合在一起,因?yàn)橹虚g件基于它們之間各種類型的互操作性,并且可能引起企業(yè) SOA 過載。