本文作為SOA&RSA系列文章的第一篇,從總體上介紹了SOA實(shí)現(xiàn)的相關(guān)技術(shù),以及RSA中對(duì)這些技術(shù)的支持與擴(kuò)展。在后面的系列文章中,我們將對(duì)一些主要技術(shù)和工具做有針對(duì)性的具體介紹。
1 概述
面向服務(wù)的體系架構(gòu)(Service Oriented Architecture, SOA)就是在分布式的環(huán)境中,將各種功能都以服務(wù)的形式提供給最終用戶或者其他服務(wù)。如今,企業(yè)級(jí)應(yīng)用的開發(fā)都采用面向服務(wù)的體系架構(gòu)來滿足靈活多變,可重用性高的需求。IBM Rational Software Architect(RSA)是一套設(shè)計(jì)與開發(fā)工具,它構(gòu)建在開放的、可擴(kuò)展的Eclipse3.0平臺(tái)之上,實(shí)現(xiàn)了多項(xiàng)行業(yè)最新標(biāo)準(zhǔn),提供了靈活的插件擴(kuò)展機(jī)制。借助UML2.0技術(shù),它實(shí)現(xiàn)了模型驅(qū)動(dòng)的軟件開發(fā)模式,可以幫助開發(fā)團(tuán)隊(duì)創(chuàng)建更加強(qiáng)壯的軟件結(jié)構(gòu)。
本文作為SOA&RSA系列文章的第一篇,從總體上介紹了SOA實(shí)現(xiàn)的相關(guān)技術(shù),以及RSA中對(duì)這些技術(shù)的支持與擴(kuò)展。在后面的系列文章中,我們將對(duì)一些主要技術(shù)和工具做有針對(duì)性的具體介紹。
2 面向服務(wù)的體系架構(gòu) - SOA
在經(jīng)典軟件工程理論中,不管是瀑布方法還是原型方法,都是從需求分析做起,一步一步構(gòu)建起形形色色的軟件系統(tǒng)。但是,需求變更像一個(gè)揮之不去的陰影,時(shí)刻伴隨著系統(tǒng)左右。每一個(gè)實(shí)際應(yīng)用系統(tǒng)的開發(fā)者都飽嘗了在系統(tǒng)進(jìn)入開發(fā)階段、測(cè)試階段,甚至上線階段遭遇應(yīng)接不暇的需求變更的極端痛苦。如何解決這一問題?能否來一場(chǎng)軟件開發(fā)和架構(gòu)的革命?SOA的提出,就是被人看成這樣的一場(chǎng)革命。其實(shí)質(zhì)就是要將系統(tǒng)模型與系統(tǒng)實(shí)現(xiàn)分割開來。
2.1 什么是SOA
2.1.1 定義
SOA并不是一個(gè)新概念,有人就將CORBA和DCOM等組件模型看成SOA架構(gòu)的前身。早在1996年,Gartner Group就已經(jīng)提出了SOA的預(yù)言,不過那個(gè)時(shí)候僅僅是一個(gè)"預(yù)言",當(dāng)時(shí)的軟件發(fā)展水平和信息化程度還不足以支撐這樣的概念走進(jìn)實(shí)質(zhì)性應(yīng)用階段。到了近一兩年,SOA的技術(shù)實(shí)現(xiàn)手段漸漸成熟了,在BEA、IBM等軟件巨頭的極力推動(dòng)下,才得以慢慢風(fēng)行起來。
關(guān)于SOA,目前尚未有一個(gè)統(tǒng)一的、業(yè)界廣泛接受的定義。一般認(rèn)為:SOA,面向服務(wù)的架構(gòu)是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元----服務(wù)(service),通過服務(wù)間定義良好的接口和契約(contract)聯(lián)系起來。接口采用中立的方式定義,獨(dú)立于具體實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語言,使得構(gòu)建在這樣的系統(tǒng)中的服務(wù)可以使用統(tǒng)一和標(biāo)準(zhǔn)的方式進(jìn)行通信。這種具有中立的接口定義(沒有強(qiáng)制綁定到特定的實(shí)現(xiàn)上)的特征稱為服務(wù)之間的松耦合。
2.1.2 SOA中的特征
從SOA的定義中,我們看到兩點(diǎn):
- 軟件系統(tǒng)架構(gòu): SOA不是一種語言,也不是一種具體的技術(shù),更不是一種產(chǎn)品,而是一種軟件系統(tǒng)架構(gòu),它嘗試給出在特定環(huán)境下推薦采用的一種架構(gòu),從這個(gè)角度上來說,它其實(shí)更像一種架構(gòu)模式(Pattern),是一種理念架構(gòu),是人們面向應(yīng)用服務(wù)的解決方案框架。
- 服務(wù)(service)是整個(gè)SOA實(shí)現(xiàn)的核心。SOA架構(gòu)的基本元素是服務(wù),SOA 指定一組實(shí)體(服務(wù)提供者、服務(wù)消費(fèi)者、服務(wù)注冊(cè)表、服務(wù)條款、服務(wù)代理和服務(wù)契約),這些實(shí)體詳細(xì)說明了如何提供和消費(fèi)服務(wù)。遵循 SOA 觀點(diǎn)的系統(tǒng)必須要有服務(wù),這些服務(wù)是可互操作的、獨(dú)立的、模塊化的、位置明確的、松耦合的并且可以通過網(wǎng)絡(luò)查找其地址。
基于上面討論,我們給出SOA的下面一些特征:
- 服務(wù)的封裝(encapsulation)。將服務(wù)封裝成用于業(yè)務(wù)流程的可重用組件的應(yīng)用程序函數(shù)。它提供信息或簡(jiǎn)化業(yè)務(wù)數(shù)據(jù)從一個(gè)有效的、一致的狀態(tài)向另一個(gè)狀態(tài)的轉(zhuǎn)變。封裝隱藏了復(fù)雜性。服務(wù)的API保持不變,使得用戶遠(yuǎn)離具體實(shí)施上的變更。
- 服務(wù)的重用(reuse)。服務(wù)的可重用性設(shè)計(jì)顯著地降低了成本。為了實(shí)現(xiàn)可重用性,服務(wù)只工作在特定處理過程的上下文(context)中,獨(dú)立于底層實(shí)現(xiàn)和客戶需求的變更。
- 服務(wù)的互操作(interoperability)。互操作并不是一個(gè)新概念。在CORBA、DCOM、web service中就已經(jīng)采用互操作技術(shù)了。在SOA中,通過服務(wù)之間既定的通信協(xié)議進(jìn)行互操作。主要有同步和異步兩種通信機(jī)制。SOA提供服務(wù)的互操作特性更利于其在多個(gè)場(chǎng)合被重用。
- 服務(wù)是自治的(Autonomous)功能實(shí)體。服務(wù)是由組件組成的組合模塊,是自包含和模塊化的。SOA非常強(qiáng)調(diào)架構(gòu)中提供服務(wù)的功能實(shí)體的完全獨(dú)立自主的能力。傳統(tǒng)的組件技術(shù),如.NET Remoting, EJB,COM或者CORBA,都需要有一個(gè)宿主(Host或者Server)來存放和管理這些功能實(shí)體;當(dāng)這些宿主運(yùn)行結(jié)束時(shí)這些組件的壽命也隨之結(jié)束。這樣當(dāng)宿主本身或者其它功能部分出現(xiàn)問題的時(shí)候,在該宿主上運(yùn)行的其它應(yīng)用服務(wù)就會(huì)受到影響。SOA架構(gòu)中非常強(qiáng)調(diào)實(shí)體自我管理和恢復(fù)能力。常見的用來進(jìn)行自我恢復(fù)的技術(shù),比如事務(wù)處理(Transaction),消息隊(duì)列(Message Queue),冗余部署(Redundant Deployment)和集群系統(tǒng)(Cluster)在SOA中都起到至關(guān)重要的作用。
- 服務(wù)之間的松耦合度(Loosly Coupled)。服務(wù)請(qǐng)求者到服務(wù)提供者的綁定與服務(wù)之間應(yīng)該是松耦合的。這就意味著,服務(wù)請(qǐng)求者不知道提供者實(shí)現(xiàn)的技術(shù)細(xì)節(jié),比如程序設(shè)計(jì)語言、部署平臺(tái),等等。服務(wù)請(qǐng)求者往往通過消息調(diào)用操作,請(qǐng)求消息和響應(yīng),而不是通過使用 API 和文件格式。這個(gè)松耦合使會(huì)話一端的軟件可以在不影響另一端的情況下發(fā)生改變,前提是消息模式保持不變。在一個(gè)極端的情況下,服務(wù)提供者可以將以前基于遺留代碼(例如,COBOL)的實(shí)現(xiàn)完全用基于 Java 語言的新代碼取代,同時(shí)又不對(duì)服務(wù)請(qǐng)求者造成任何影響。這種情況是真實(shí)的,只要新代碼支持相同的通信協(xié)議。
- 服務(wù)是位置透明的(location transparency)。服務(wù)是針對(duì)業(yè)務(wù)需求設(shè)計(jì)的。需要反應(yīng)需求的變化,即所謂敏捷(agility)設(shè)計(jì)。要想真正實(shí)現(xiàn)業(yè)務(wù)與服務(wù)的分離。就必須使得服務(wù)的設(shè)計(jì)和部署對(duì)用戶來說是完全透明的。也就是說,用戶完全不必知道響應(yīng)自己需求的服務(wù)的位置,甚至不必知道具體是哪個(gè)服務(wù)參與了響應(yīng)。
2.2 SOA不等于web 服務(wù)
由于Web服務(wù)與SOA有著很多相同的技術(shù)特點(diǎn),如:基于XML語言,符合SOAP、WSDL和UDDI標(biāo)準(zhǔn)等,很多人都認(rèn)為下一代Web服務(wù)就是SOA。 Web服務(wù)可以用來實(shí)現(xiàn)SOA,但是如果沒有Web服務(wù),企業(yè)照樣也可以很好地實(shí)現(xiàn)SOA。反之,即便是利用Web服務(wù)技術(shù),也不一定能保證SOA的效果就更好。
Web服務(wù)與SOA關(guān)系如圖1所示。
Web服務(wù)是一套技術(shù)體系,可以用來建立應(yīng)用解決方案,解決特定的消息通信和應(yīng)用集成問題。隨著時(shí)間的推移,我們發(fā)現(xiàn),這些技術(shù)在不斷發(fā)展、不斷成熟,也會(huì)更好地幫助你實(shí)現(xiàn)SOA。SOA是一種軟件架構(gòu),而不局限于某個(gè)技術(shù)的組合(例如Web服務(wù)),它超越了技術(shù)范疇。在一個(gè)商業(yè)環(huán)境中,純粹的SOA是一種應(yīng)用軟件架構(gòu),其中所有的功能都是相互獨(dú)立的服務(wù)模塊,通過完備定義的接口相互聯(lián)系起來。只要按照一定的順序來請(qǐng)求這些功能模塊所提供的服務(wù),就可以形成完整的業(yè)務(wù)流程。正如IBM SOA技術(shù)和策略總監(jiān)Mark Colan先生強(qiáng)調(diào)的那樣:"Web服務(wù)的確是實(shí)現(xiàn)SOA一條最好的路,但不等同于SOA。"
SOA的靈活性將給企業(yè)帶來巨大的好處。如果把企業(yè)的IT架構(gòu)抽象出來,將其功能以粗粒度的服務(wù)形式表示出來,每種服務(wù)都清晰地表示其業(yè)務(wù)價(jià)值,那么,這些服務(wù)的顧客(可能在公司內(nèi)部,也可能是公司的某個(gè)業(yè)務(wù)伙伴)就可以得到這些服務(wù),而不必考慮其后臺(tái)實(shí)現(xiàn)的具體技術(shù)。更進(jìn)一步,如果顧客能夠發(fā)現(xiàn)并綁定可用的服務(wù),那么在這些服務(wù)背后的IT系統(tǒng)能夠提供更大的靈活性。
但是,要得到這種靈活性,需要有一系列實(shí)現(xiàn)架構(gòu)的新方法,這是一項(xiàng)艱巨的任務(wù)。企業(yè)架構(gòu)設(shè)計(jì)師必須要變成"面向服務(wù)的架構(gòu)設(shè)計(jì)師",不僅要理解SOA,還要理解SOA的實(shí)踐。在架構(gòu)實(shí)踐和最后得到的架構(gòu)結(jié)果之間的區(qū)別非常微妙,也非常關(guān)鍵。那么目前SOA的實(shí)現(xiàn)技術(shù)究竟有哪些呢?
3 SOA的實(shí)現(xiàn)技術(shù)
3.1 實(shí)現(xiàn)SOA的核心技術(shù) - web 服務(wù)
正如我們前面所講的,服務(wù)是整個(gè)SOA實(shí)現(xiàn)的核心,web服務(wù)相關(guān)技術(shù)自然成為實(shí)現(xiàn)SOA的首選。
- XML
XML 1.0 (可擴(kuò)展標(biāo)記語言,Extensible Markup Language) 標(biāo)準(zhǔn)是一個(gè)基于文本的 World Wide Web 組織 (W3C) 規(guī)范的標(biāo)記語言。與 HTML 使用標(biāo)簽來描述外觀和數(shù)據(jù)不同,XML 嚴(yán)格地定義了可移植的結(jié)構(gòu)化數(shù)據(jù)。它可以作為定義數(shù)據(jù)描述語言的語言,如標(biāo)記語法或詞匯、交換格式和通信協(xié)議。
- SOAP
簡(jiǎn)單對(duì)象訪問協(xié)議 (Simple Object Access Protocol) 是一個(gè)基于XML的,用于在分布式環(huán)境下交換信息的輕量級(jí)協(xié)議。SOAP 在請(qǐng)求者和提供者對(duì)象之間定義了一個(gè)通信協(xié)議,這樣,在面向?qū)ο缶幊塘餍械沫h(huán)境中,該請(qǐng)求對(duì)象可以在提供的對(duì)象上執(zhí)行遠(yuǎn)程方法調(diào)用。因?yàn)镾OAP是平臺(tái)無關(guān)和廠商無關(guān)的標(biāo)準(zhǔn),因此盡管SOA并不必須使用SOAP,但在帶有單獨(dú) IT基礎(chǔ)架構(gòu)的合作伙伴之間的松耦合互操作中,SOAP仍然是支持服務(wù)調(diào)用的最好方法。
W3C SOAP 1.2規(guī)范在服務(wù)請(qǐng)求者和服務(wù)提供者之間定義使用XML格式的消息進(jìn)行通信。將應(yīng)用程序請(qǐng)求(在XML中)放入 SOAP 信封中(也是 XML ),并從請(qǐng)求者到提供者發(fā)送應(yīng)用程序請(qǐng)求,提供者發(fā)回的響應(yīng)也采用相同的形式。最近 SOAP 被稱為面向服務(wù)的架構(gòu)協(xié)議 (Services-Oriented Architecture Protocol)。 SOAP的優(yōu)點(diǎn)在于它完全和廠商無關(guān),相對(duì)于平臺(tái)、操作系統(tǒng)、目標(biāo)模型和編程語言可以獨(dú)立實(shí)現(xiàn)。另外,傳輸和語言綁定以及數(shù)據(jù)編碼的參數(shù)選擇都是由實(shí)現(xiàn)決定的。
- WSDL
Web服務(wù)描述語言 WSDL (Web Services Description Language) 是一個(gè)提供描述服務(wù)IDL標(biāo)準(zhǔn)方法的XML詞匯。Web 服務(wù)描述語言(WSDL)規(guī)范定義了一個(gè) XML詞匯表,該詞匯表依照請(qǐng)求和響應(yīng)消息,在服務(wù)請(qǐng)求者和服務(wù)提供者之間定義了一種契約。我們能夠?qū)eb服務(wù)定義為軟件,這個(gè)軟件通過描述SOAP消息接口的 WSDL文檔來提供可重用的應(yīng)用程序功能,并使用標(biāo)準(zhǔn)的傳輸協(xié)議來進(jìn)行傳遞。
WSDL描述包含必要的細(xì)節(jié),以便服務(wù)請(qǐng)求者能夠使用特定服務(wù):
- 請(qǐng)求消息格式
- 響應(yīng)消息格式
- 向何處發(fā)送消息。
WSDL 是基于 XML 的,因此 WSDL 文檔是計(jì)算機(jī)可讀的(machine-readable)。這樣開發(fā)環(huán)境使用WSDL將集成服務(wù)的流程自動(dòng)處理到請(qǐng)求者應(yīng)用程序。例如 WebSphere Studio產(chǎn)生一個(gè)Java的代理對(duì)象,它能夠像本地對(duì)象一樣實(shí)現(xiàn)服務(wù),但是實(shí)際上代理對(duì)象僅僅處理請(qǐng)求的創(chuàng)建和響應(yīng)消息的解析。不管服務(wù)是否用Java、C#或者其他的語言實(shí)現(xiàn),生成的Java代理對(duì)象都能夠從WSDL描述中調(diào)用任何的Web服務(wù)。實(shí)際上,WSDL不能像編程語言那樣描述實(shí)現(xiàn)細(xì)節(jié)。
- UDDI
統(tǒng)一描述、發(fā)現(xiàn)和集成 (Universal Description, Discovery and Integration) 規(guī)范提供了一組公用的 SOAP API,使得服務(wù)代理得以實(shí)現(xiàn)。UDDI為發(fā)布服務(wù)的可用性和發(fā)現(xiàn)所需服務(wù)定義了一個(gè)標(biāo)準(zhǔn)接口(基于 SOAP 消息)。UDDI 實(shí)現(xiàn)將發(fā)布和發(fā)現(xiàn)服務(wù)的 SOAP 請(qǐng)求解釋為用于基本數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)管理功能調(diào)用。
為了發(fā)布和發(fā)現(xiàn)其他SOA服務(wù),UDDI 通過定義標(biāo)準(zhǔn)的 SOAP 消息來實(shí)現(xiàn)服務(wù)注冊(cè)(Service Registry)。注冊(cè)是一種服務(wù)代理,它是在 UDDI 上需要發(fā)現(xiàn)服務(wù)的請(qǐng)求者和發(fā)布服務(wù)的提供者之間的中介。一旦請(qǐng)求者決定使用特定的服務(wù),開發(fā)者通常借助于開發(fā)工具(如Microsoft Visual Studio .NET)并通過創(chuàng)建以發(fā)送請(qǐng)求并處理響應(yīng)的方式訪問服務(wù)的代碼來綁定服務(wù)。
SOA不需要使用UDDI,但由于 UDDI 是建立在SOA上來完成自身工作的,所以UDDI是服務(wù)發(fā)現(xiàn)的一個(gè)好的解決方案。
3.2 SOA 基礎(chǔ)架構(gòu)的關(guān)鍵組件 -企業(yè)服務(wù)總線(Enterprise Service Bus,ESB)
企業(yè)服務(wù)總線ESB(Enterprise Service Bus)是SOA架構(gòu)的一個(gè)支柱技術(shù)。 作為一種消息代理架構(gòu)它提供消息隊(duì)列系統(tǒng),使用諸如SOAP或JMS (Java Message Service)等標(biāo)準(zhǔn)技術(shù)來實(shí)現(xiàn)。 有人把ESB描述成一種開放的、基于標(biāo)準(zhǔn)的消息機(jī)制,通過簡(jiǎn)單的標(biāo)準(zhǔn)適配器和接口,來完成粗粒度應(yīng)用(比如服務(wù))和其他組件之間的互操作。
ESB的主要功能有:通信和消息處理、服務(wù)交互和安全性控制、服務(wù)質(zhì)量和服務(wù)級(jí)別管理、建模、管理和自治、基礎(chǔ)架構(gòu)智能等。ESB由中間件技術(shù)實(shí)現(xiàn)并作為支持 SOA 的一組基礎(chǔ)架構(gòu),支持異構(gòu)環(huán)境中的服務(wù)、消息,以及基于事件的交互,并且具有適當(dāng)?shù)姆?wù)級(jí)別和可管理性。
SOA的原則可以描述如下:
- 利用顯式的與實(shí)現(xiàn)無關(guān)的接口來定義服務(wù)。
- 利用強(qiáng)調(diào)位置透明性和可互操作性的通信協(xié)議。
- 封裝可重用業(yè)務(wù)功能的服務(wù)的定義。
為了實(shí)現(xiàn) SOA,應(yīng)用程序和基礎(chǔ)架構(gòu)都必須支持 SOA 原則。啟用 SOA 應(yīng)用程序涉及到創(chuàng)建服務(wù)接口,服務(wù)接口可以直接也可以間接地通過使用適配器用于現(xiàn)有的或新的功能。從最基本的級(jí)別來看,啟用該基礎(chǔ)架構(gòu)涉及到規(guī)劃功能來將服務(wù)請(qǐng)求路由和傳遞給正確的服務(wù)提供者。然而,基礎(chǔ)架構(gòu)支持在不影響服務(wù)的客戶端的情況下由另一個(gè)服務(wù)實(shí)現(xiàn)替代原有的服務(wù)實(shí)現(xiàn)也是至關(guān)重要的。這不僅需要根據(jù) SOA 原則指定服務(wù)接口,而且需要基礎(chǔ)架構(gòu)允許客戶端代碼以獨(dú)立于所涉及的服務(wù)位置和通信協(xié)議的方式來調(diào)用服務(wù)。這樣的服務(wù)路由和替代是 ESB 的許多功能中的一部分。
ESB 支持這些服務(wù)交互功能,并提供集成的通信、消息傳遞以及事件基礎(chǔ)架構(gòu)來支持這些功能。因此,它將當(dāng)今正在使用的主要企業(yè)集成模式組合成一個(gè)實(shí)體。ESB 為 SOA 提供與企業(yè)需要保持一致的基礎(chǔ)架構(gòu),從而提供合適的服務(wù)級(jí)別和可管理性、以及異構(gòu)環(huán)境中的操作。圖2顯示了ESB為SOA提供的基礎(chǔ)架構(gòu):
ESB 需要某種形式的服務(wù)路由目錄(service routing directory)來路由服務(wù)請(qǐng)求。然而,SOA 可能還有單獨(dú)的業(yè)務(wù)服務(wù)目錄(business service directory),其最基本的形式可能是設(shè)計(jì)時(shí)服務(wù)目錄,用于在組織的整個(gè)開發(fā)活動(dòng)中實(shí)現(xiàn)服務(wù)的重用。Web 服務(wù)遠(yuǎn)景在業(yè)務(wù)服務(wù)目錄和服務(wù)路由目錄的角色中都放置了一個(gè) UDDI 目錄,因而使得可以動(dòng)態(tài)發(fā)現(xiàn)和調(diào)用服務(wù)。這樣的目錄可以視為 ESB 的一部分;然而,在這樣的解決方案變得普遍之前,業(yè)務(wù)服務(wù)目錄可能與 ESB 是分離的。
Business Service Choreographer 的作用是通過若干業(yè)務(wù)服務(wù)來組合業(yè)務(wù)流程;因此,它將通過 ESB 調(diào)用服務(wù),然后再次通過 ESB 將業(yè)務(wù)流程公開為客戶端可用的其他服務(wù)。然而,Business Service Choreographer 在編排業(yè)務(wù)流程和服務(wù)中所扮演的角色確定了這種業(yè)務(wù)工作流技術(shù)是一種與基礎(chǔ)架構(gòu)技術(shù) ESB 分離的技術(shù)。
最后,B2B Gateway 組件的作用是使兩個(gè)或多個(gè)組織的服務(wù)在受控且安全的方式下對(duì)彼此可用。這有助于查看這些連接到 ESB 的組件,但它們并不是 ESB 的一部分。雖然有一些網(wǎng)關(guān)技術(shù)可以提供適合于實(shí)現(xiàn) B2B Gateway 組件和 ESB 的功能,但是 B2B Gateway 組件的用途是將其與 ESB 分離。事實(shí)上,這種用途可能需要附加的功能(如合作伙伴關(guān)系管理),這些功能不是 ESB 的一部分,并且不一定受到 ESB 技術(shù)的支持。
3.3 實(shí)現(xiàn)SOA的方法學(xué) - 模型驅(qū)動(dòng)的開發(fā)
SOA強(qiáng)調(diào)松散耦合,強(qiáng)調(diào)跨平臺(tái)集成,這與模型驅(qū)動(dòng)的架構(gòu)和開發(fā)不謀而合。模型驅(qū)動(dòng)的架構(gòu)和開發(fā)(Model Driven Architecture, MDA以及Model Driven Development, MDD)并沒有把業(yè)務(wù)模型和平臺(tái)無關(guān)模型分開來,而是把平臺(tái)無關(guān)模型做為起點(diǎn)。
MDA由提出CORBA的OMG模型提出。MDA認(rèn)為架構(gòu)設(shè)計(jì)師首先要對(duì)待創(chuàng)建的系統(tǒng)有一個(gè)形式化的UML的模型。MDA首先給出一個(gè)平臺(tái)無關(guān)的模型來表示系統(tǒng)的功能需求和use cases,根據(jù)系統(tǒng)搭建的平臺(tái),架構(gòu)設(shè)計(jì)師可以由這個(gè)平臺(tái)無關(guān)的模型得到平臺(tái)相關(guān)的模型,這些平臺(tái)相關(guān)模型足夠詳細(xì),以至于可以用來直接生成需要的代碼。
基于MDA的思想,利用MDD方式,我們可以對(duì)SOA進(jìn)行建模,在此基礎(chǔ)上,實(shí)現(xiàn)各種形式的模型轉(zhuǎn)換或擴(kuò)展實(shí)現(xiàn)SOA.
4 RSA對(duì)SOA實(shí)現(xiàn)技術(shù)的支持
IBM 軟件開發(fā)平臺(tái)提供了對(duì)SOA 應(yīng)用程序開發(fā)的最好支持。IBM 軟件開發(fā)平臺(tái)包含 Rational 產(chǎn)品家族、向?qū)А⒛0濉⒓皹?gòu)建應(yīng)用程序的指南,Rational 開發(fā)工具是基于成功的并且非常受歡迎的 Eclipse 平臺(tái),它不僅易用、靈活,而且在每一個(gè)開發(fā)進(jìn)程中都可以使用外部開發(fā)環(huán)境。圖3顯示了基于 Eclipse 的 IBM Rational 產(chǎn)品體系。
Rational Software Modeler 提供了使用設(shè)計(jì)標(biāo)準(zhǔn)(比如統(tǒng)一建模語言,UML )構(gòu)建模型的能力。通過 Rational Software Modeler,可以將這些模型轉(zhuǎn)變?yōu)轭惡驮创a。關(guān)于Web 服務(wù)的開發(fā),Rational Web Developer for WebSphere Software Version 6.0 提供了一種端對(duì)端的環(huán)境。利用它,不僅可以完成開發(fā)和測(cè)試,還可以通過 WebSphere Application Server 產(chǎn)品完成 Web 服務(wù)的部署。
Rational Software Architect, RSA涵蓋了RAD以及RSM的全部功能,提供了對(duì)基于模型的開發(fā)以及web應(yīng)用開發(fā)的最好的支持。
4.1 對(duì)web服務(wù)開發(fā)的支持
RSA中包含了構(gòu)建 Web 服務(wù)的專門工具,可以通過自頂向下,自底向上,為web服務(wù)建模等不同角度進(jìn)行web服務(wù)的開發(fā),提供了代碼編寫和完成應(yīng)用程序的開發(fā)環(huán)境。還可以使用一些額外的工具(比如 IBM Rational Functional Tester),對(duì)應(yīng)用程序進(jìn)行測(cè)試,然后把它部署到 WebSphere 服務(wù)器平臺(tái)中。
首先,RSA提供了XML的編輯器,可以對(duì)XML進(jìn)行圖形化的顯示和編輯,圖4顯示了對(duì)XML的圖形編輯界面及其對(duì)應(yīng)的源代碼。
另外,在RSA中可以創(chuàng)建web service及其相關(guān)的多種資源,如圖5所示
當(dāng)我們想將現(xiàn)有的資源,如Java Bean或者EJB作為web服務(wù)進(jìn)行發(fā)布時(shí),RSA中提供相應(yīng)的支持,如圖6所示:
相反,如果我們想生成已有的WSDL對(duì)應(yīng)的web服務(wù)實(shí)現(xiàn)代碼,也可以使用RSA中相應(yīng)的工具,如圖7所示:
RSA中提供了Web服務(wù)瀏覽器,使得發(fā)現(xiàn)web服務(wù)變得更容易,同時(shí),RSA提供了圖形界面對(duì)web服務(wù)的WSDL進(jìn)行顯示和編輯。見圖8:
由于RSA提供了對(duì)UML2.0的支持,我們同樣可以根據(jù)對(duì)web服務(wù)建模,通過模型轉(zhuǎn)換來生成相應(yīng)的web服務(wù)WSDL。如圖9所示:
RSA貫穿整個(gè)應(yīng)用程序開發(fā)的生命周期,使得應(yīng)用程序的設(shè)計(jì)更加輕松,更一致地將 SOA 應(yīng)用程序的組件捆綁在一起。
RSA內(nèi)嵌了WebSphere Application Server 6.0的運(yùn)行環(huán)境,WAS 6.0中的SI-BUS實(shí)現(xiàn)了ESB,因此我們可以用RSA進(jìn)行SOA、ESB的部署和測(cè)試。如圖10所示,可以在RSA上創(chuàng)建WAS 6.0的服務(wù)實(shí)例,并在此服務(wù)上部署ESB。
4.2 基于模型的開發(fā)與軟件資產(chǎn)重用
除了對(duì)web服務(wù)開發(fā)的支持,RSA還提供對(duì)UML2.0規(guī)范以及可重用資產(chǎn)規(guī)范(Reusable Asset Specification, RAS )的支持。這就使得基于模型的開發(fā)(Model Based Development, MDA) 和基于資產(chǎn)的開發(fā)(Asset Based Development, ABD)成為RSA最有優(yōu)勢(shì)的兩大特征。這里我們只作簡(jiǎn)單介紹,在本文的后續(xù)文章中,我們將對(duì)這些開發(fā)作詳細(xì)介紹。
4.2.1 支持UML2.0的MDA平臺(tái)
UML是實(shí)現(xiàn)MDA技術(shù)的一把鑰匙,它使得用MDA技術(shù)創(chuàng)建的所有應(yīng)用程序都基于標(biāo)準(zhǔn)化的、平臺(tái)獨(dú)立的UML模型。通過將這一通用的、被普遍接受的建模標(biāo)準(zhǔn)作為杠桿,MDA使得開發(fā)人員可以創(chuàng)建能被輕便地訪問、天生具有良好的互操作性的應(yīng)用程序。我們?cè)谇懊嫣岬剑肦SA可以對(duì)web服務(wù)建模,通過模型轉(zhuǎn)換生成web服務(wù)。
基于Eclipse平臺(tái)的RSA,提供各種模式(Pattern),模板(Template)插件的開發(fā),通過這些高可重用度的模式及模板,用戶只需要簡(jiǎn)單的參數(shù)配置,就可以得到相應(yīng)的模型,代碼及其他資源。圖11顯示了應(yīng)用RSA模式生成新的模型,再基于新模型生成可部署的項(xiàng)目及代碼。
4.2.2 Recipe - 基于資產(chǎn)的開發(fā)(Asset Based Development)
RSA中的解決方案指導(dǎo)(Solution Guide)插件基于可重用資產(chǎn)規(guī)范對(duì)資產(chǎn)的創(chuàng)建,打包,發(fā)布,到重用提供了全方位的支持。可以將各種模式,模型及其他可重用資源作為資產(chǎn)導(dǎo)出,存入本地或遠(yuǎn)程資產(chǎn)庫以便重用及共享,資產(chǎn)在資產(chǎn)庫中按照一定的方法進(jìn)行分類,在RSA中使用資產(chǎn)庫瀏覽器對(duì)資產(chǎn)進(jìn)行查找時(shí)一目了然。圖12是在可重用資產(chǎn)視圖中,瀏覽資產(chǎn)庫。
5 總結(jié)
在本文中,我們討論了面向服務(wù)體系架構(gòu)的基本概念以及實(shí)現(xiàn)技術(shù),并列出了IBM Rational產(chǎn)品RSA對(duì)實(shí)現(xiàn)SOA的技術(shù)的支持,在后續(xù)的文章中,我們將對(duì)本文中涉及的各項(xiàng)具體技術(shù)實(shí)現(xiàn)細(xì)節(jié)作詳細(xì)介紹。