1 引言
隨著軟件開發方法研究的發展和分布式技術應用的深人,基于多種開發平臺和工具的商業系統得到大量應用,使得企業中的軟件系統變得日益龐大和復雜。由于傳統的軟件開發使用的平臺、開發工具、操作系統在結構上的緊藕合,以致這些位置上分散的獨立系統逐漸形成了所謂的“信息孤島”。為了更好地重用已有模塊、加快軟件開發速度,使這種重用可以不用考慮各自運行平臺和開發環境的差異,并使被重用的模塊可以方便地由舊系統納人新系統,一種面向服務的體系結構SOA ( ServiceOriented Architecture)的軟件設計方法被提了出來,這種通過對服務流程化的組織來構建分布式系統的方法既是體系結構模型,又是編程模型。
本文討論了如何利用SOA提供的這種較面向對象和基于構件更好的軟件復用方法去構建出一個松散藕合的分布式系統,使其達到復用度高和擴充性好的目的。
2 基于SOA的軟件開發方法
由于側重方向和觀察角度上的差異.對于SOA的具體定義各有不同。但是從體系結構方面考慮可以這樣給出:soA是一種松散藕合的軟件體系結構,在這種體系結構中,由各自獨立可復用的服務去構成系統功能。這些服務向外公布有意義明確的接口,軟件的開發是通過對這些實現透明的接口的調用來完成”。其體系結構如圖1所示。
圖1 SOA的體系結構
在面向服務的體系結構中主要有三種角色:
服務消費者是需要使用服務的應用程序或其它的服務。通過對注冊中心的服務進行查詢后,根據接口說明信息并使用某種傳輸協議與服務綁定并執行服務功能。
服務提供者是創建服務的實體。可以從服務消費者處接受請求并可以遠程執行所請求服務。通過向注冊中心發布服務接口信息以供服務消費者發現和訪問服務。
服務注冊中心處于中心位置提供了展示服務的功能。服務消費者通過查詢存儲有服務信息庫的注冊中心以找到感興趣服務的接口信息。
在面向服務的體系結構中的每個實體的角色并非固定,可以同時充當以上三種角色中的一個或多個。
在面向服務的體系結構中主要的操作有:
發布為了被訪問,服務的描述信息必須被發布以便服務消費者發現和調用。
發現服務請求者通過查詢注冊中心去定位符合其需求標準的服務。
綁定和調用在獲得服務描述信息之后,服務消費者據此去調用服務。
服務是SOA中的基礎設施,位于業務需求和底層技術之間的抽象層次中。在開發基于SOA軟件系統的過程中:首先,要明確功能需求和可獲得服務之間的動態關系,以及服務與實現服務的底層技術的關系;其次,SOA中的基本服務必須滿足定義明確和功能單一的要求,每個獨立部署的服務不必依賴其它系統;最后,整個系統功能需求的滿足通過服務的流程化組織而得到實現。
與傳統開發方法相比,SOA的特點在于具有:基于標準、松散藕合、共享服務和粗粒度等,其優勢可表現為:
(1)易于集成現有系統:在對現有系統不做修改的前提下,SOA可將現有系統和應用迅速轉換為服務。通過封裝可以提供服務接口的應用層來訪問遺留系統,因此不用修改現有系統體系結構。
(2)具有標準化的架構:只要符合相關標準,無論何時開發的組件都可以合并在一個結構良好的SOA系統中。并且不同開發者開發出的組件將被作為服務方便的添加部署在現有的基礎構架中。
(3)提升開發效率:由于SOA在可復用方面的特點,新的軟件在設計、開發、測試和部署時可以充分利用已有服務。因此,其開發周期可以顯著縮短。
(4)降低開發維護復雜度:通過采用SOA體系結構,在進行二次開發時成本急劇減少。同時,由于系統具有松散藕合的特征,維護成本也大大減少。
3 SOA的實現技術—Web服務
SOA中的應用是由服務使用者通過接口訪問服務而形成。潛在使用者可發現由服務提供者發布的該類接口并通過網絡來進行調用.這種設計思想同Web服務這種靈活而強大的具體實現技術有著某種程度的暗合,因此,使用Web服務來實現SOA具有天然的優勢。
此外,SOA是一種不受限于具體技術的體系結構,定位于特定技術的集合如Web服務、RMI,COM,CORBA等之上。從廣義角度來說,可以被上述任意一種具體技術來實現。從嚴格意義上講,只能由符合協議中立的技術去實現。相比以前的分布式計算技術,Web服務技術具有更好的可靠性、擴展性、易用性且具有協議開放性。雖然Web服務并非是實現SOA的必需組件,而且部署了Web服務也并非意味實現了SOA。但由于它所具有的上述優勢使其在實現SOA時具有重要地位,在實踐過程中往往被優先考慮為實現SOA的技術而得到采用。
3.1 Web服務的關鍵技術
基本的Web服務棧由SOAP, WSDL, UDDI等技術組成,其服務棧結構如圖2所示。SOAP ( Sim-ple Object Access Protocol)是一種輕型的基于XML的簡單通信協議,它定義了一種通過網絡傳送XML消息的格式。該消息由一個SOAP信封(envelope)元素和被信封元素包圍的一個可選擇的SOAP頭元素(header)和一個必須的SOAP體元素組成。
圖2 Web服務協議棧
WSDL ( Web Services Description Language)也是一種基于XM[的語言,通過這種語言,Web服務可以向其它應用程序傳遞它所提供的方法( method ),以及該方法的使用規則。
UDDI (Universal Description Discovery and Integration)定義了一種基于XML的格式,使用者可以使用這種格式去描述其功能和過程。它定義了Web服務的發現和發布的方法。
3.2 Web服務的運行方式
Web服務的運行方式與SOA的設計思想很相似:服務提供者將其服務的WSDL描述信息發表到UDDI注冊中心。服務使用者通過查詢注冊中心獲得所要使用服務的WSDL文檔,該文檔提供了與Web服務進行交互的信息。服務使用者向提供者發送SOAP請求消息,然后由Web服務提供者返回SOAP應答消息。
4 應用實例研究
4.1計算機教學管理系統(CMI )分析
國家遠程教育標準化委員會制定的CELTS-20(計算機教學管理規范喲對于教學管理互操作性有下列要求:①同樣的課可以在不同的CMI系統中工作;②分別開發的課能夠結合而成為一個CMI系統的課程;③課程可以從一個CMI系統搬到另一個CMI系統;④方便分析學生數據。
根據SOA在開放性和互操作性方面的原則,服務或模塊要能夠在不同的環境和平臺下方便地共享。因此,對于第一點和第三點來說,以上原則完全可以滿足這些要求。
重用是SOA中的一個關鍵的核心概念。SOA中鼓勵盡可能使用已有的服務,對象和應用來構建一個新的系統而不是重新編碼。這樣,就滿足了第二點的要求,即為不同系統開發的課程就可以通過重用已有應用來形成新的一個CMI系統。
基于SOA的體系結構又具備松禍合,分布性,靈活性,和可靠性等方面的特點,因此可以方便地從不同的數據來源甚至是不同的系統中分析數據而滿足第四點的要求。
再對CMI中要采用基于SOA體系結構的原因進行仔細分析。在CMI系統中常常要獲取學生的基本信息。同樣,在考試系統,教務管理系統中,此類的功能也必不可少。所以,同樣的功能存在于三個不同的系統中。此外,就是在同一個系統中也有多個模塊需要這樣的功能,現有的面向對象和基于構件軟件開發方法的解決之道同樣是用到復用的概念,但這種復用和SOA中復用的重大差異在于前者的復用是一種“代碼復用”,而SOA中的復用是一種“功能復用”。用面向對象和基于構件的軟件開發方法可能會通過復制已有代碼或實例化對象去解決。而在SOA中,只需要將這種“獲取學生基本信息”的功能封裝成服務,以后在任何一個系統中要用到此類功能時只需要對此進行調用即可。雖然用面向對象和基于構件的軟件開發方法看起來存在著冗余編程的問題,可是也算是一種可選的解決方案。隨著系統復雜性的增加,如果這三個系統是用不同編程語言運行在不同平臺之上,那么用面向對象和基于構件的軟件開發方法對于復用相同功能就無能為力,這三個系統必須分別編碼去實現同樣的功能。可是,如果利用SOA的重用服務的方法,代碼無需更動,真正實現“一次編寫,處處重用”的目的。因此,采用基于SOA的體系結構開發CMI計算機教學管理)系統較其它技術更具優勢。
4.2基于SOA的CMI系統設計
由于Java技術具有跨平臺的良好特性,而且J2EE提供的Web服務功能可以很容易地構建能夠訪問現有業務流程的SOA系統。因此使用J2EE技術開發基于SOA的CMI系統,其體系結構如圖3所示。
圖3 CMI系統體系結構
表示層可以包括用戶處理接口,與用戶交互組件,瀏覽器或者使用其他編程語言編寫的客戶端程序。所有的這些客戶端程序都可以向不同的服務發送請求。
防火墻是一種非常有效的網絡安全模型,通過它可以隔離風險區域與局域網的連接,同時不會妨礙對風險區域的訪問。防火墻可以監控進出網絡的通信量,僅讓安全的信息通過,同時又可以阻止不安全服務和非法用戶以抵制具有危害的數據。
ESB即企業服務總線,用以實現在通信,集成以及服務交互等方面的功能。本系統使用SOAP/HTTP和WSDL去實現其最低功能。雖然只實現部分功能,但為系統留下增加如內部安全性,服務質量,和消息處理等功能的擴充余地。
Web服務層即通過無狀態會話Bean或Jav-aBean來提供Web服務。
數據訪問層使用不同的技術(比如EJB-CMP,JDO,ADO)和不同的持久性技術訪問數據。這一層包含優化的數據訪問代碼,負責與數據源進行交互,并以相應的Web服務方法所期望的格式把數據返回給這些方法。這樣就能保護數據的完整性。
數據源即各種關系型數據庫或是基于XML的數據庫,也可以是一組文件,甚至可以是外部的Web服務。
4.3基于SOA的CMI系統實現
綜上所述,考慮到學生注冊在多個系統中也是必不可少的功能,所以結合CMI系統中的學生注冊為實例說明如何在Java中創建Web服務。采用的開發工具是Websphere Studio Application Developer5.1。WSAD可以根據Bean創建Web服務,并使用Bean中的消息自動生成WSDL文件,描述所創建的Web服務,使用SOAP分析HTTP的數據等。
在項目CMI中包括有如下兩個類,StuInfo和StuRegisterManager。其中Stulnfo保存有學生信息,在類StuRegisterManager中有createNewStuInfo方法可以寫人學生信息。
啟動WSAD中的Web服務向導將。reateNewStuInfo封裝成Web服務。在這個過程中可以選擇測試Web服務,生成客戶代理來方便地進行測試。也可以選擇“啟動Web服務資源管理器以將此Web服務發布到UDDI注冊中心”來將要生成的Web服務直接發布出去。
在生成Web服務之后,WSAD會自動生成一系列的WSDL文檔,其中最重要的是StuRegisterMan-ager.wsdl文件。WSDL文檔已被作為描述Web服務的通用方法,對此的理解可以幫助理解Web服務的運行機制。
WSDL文檔的根元素是definitions, message元素表示在客戶和Web服務之間傳遞的變量。port腸pe元素表示在客戶和Web服務之間怎樣發送該消息。Binding元素表示了客戶和Web服務之間如何互發消息,在其transport屬性中定義為transport= “http://schemas.xmlsoap.orglsoap/http”,表示客戶和服務之間的SOAP消息將采用HTTP協議。Service元素規定客戶調用該Web服務的URL,在這里使用本地地址進行測試并且在發布時將把它改為外部可以訪問的地址。
在編碼和生成Web服務之后,就可以將它發布出去。在此系統的開發和運行初期,采用了私有的UDDI注冊中心,因為主要是要建立基于內部的發現模式,當然也可以把它們發布到公共注冊中心。
最后的一步就是客戶端使用所發布的Web服務。不同于EJB客戶端通過名字引用EJB , Web服務客戶端無需服務名但是必須首先定位Web服務。首先,讀取關于學生注冊Web服務的WSDL并為客戶端生成代理,然后客戶端就可以通過RPC使用代理來輸人學生信息。
編碼,生成,發布和調用已經完整地構成了一個Web服務開發的全過程。通過對系統進行分析設計出符合前文所述SOA中關于服務要求的Web服務,再根據上述Web服務開發過程將其創建出來,最后對這些Web服務進行恰當的流程整合,一個基于SOA架構松禍合的CMI系統就形成了。
5 結束語
SOA的提出代表著標準化、松藕合、粗粒度的軟件體系結構的出現,不僅如此,它更代表著不拘泥于具體技術實現方式的一種新的軟件開發思想。當然,Web服務的技術在SOA達到成熟過程中起到關鍵作用,從SOA強調跨越異構平臺和不同開發環境方面考慮,Web服務是目前分布式技術中符合SOA提倡標準化的不多選擇之一。
在本文中我們對于SOA的現狀、背景、優勢、體系結構以及實現方法等各方面進行了介紹和分析。對Web服務作為一種SOA的實現技術也進行了重點介紹。最后,結合了一個具體的實例對于在SOA中開發Web服務進行了詳細的說明。
由于SOA自身具有的優勢符合了未來軟件發展的趨勢,并隨著各大軟件供應商在此展開的深入研究和激烈競爭,它必然會成為成熟的下一代主流開發技術而得到廣泛支持和應用。
核心關注:拓步ERP系統平臺是覆蓋了眾多的業務領域、行業應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業務管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業務領域的管理,全面涵蓋了企業關注ERP管理系統的核心領域,是眾多中小企業信息化建設首選的ERP管理軟件信賴品牌。
轉載請注明出處:拓步ERP資訊網http://www.guhuozai8.cn/
本文標題:基于SOA體系結構的軟件開發方法研究