Axis2分析報(bào)告ppt課件_第1頁(yè)
Axis2分析報(bào)告ppt課件_第2頁(yè)
Axis2分析報(bào)告ppt課件_第3頁(yè)
Axis2分析報(bào)告ppt課件_第4頁(yè)
Axis2分析報(bào)告ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.1Axis2分析報(bào)告.2第一部分:需求分析.3背景“網(wǎng)絡(luò)服務(wù)”(Web Services),是指一些在網(wǎng)絡(luò)上運(yùn)行的、面向服務(wù)的、基于分布式程序的軟件模塊,網(wǎng)絡(luò)服務(wù)采用HTTP和XML等互聯(lián)網(wǎng)通用標(biāo)準(zhǔn),使人們可以在不同的地方通過(guò)不同的終端設(shè)備訪問(wèn)WEB上的數(shù)據(jù),如網(wǎng)上訂票,查看訂座情況。網(wǎng)絡(luò)服務(wù)在電子商務(wù)、電子政務(wù)、公司業(yè)務(wù)流程電子化等應(yīng)用領(lǐng)域有廣泛的應(yīng)用,被業(yè)內(nèi)人士奉為互聯(lián)網(wǎng)的下一個(gè)重點(diǎn)。隨著互聯(lián)網(wǎng)使用人群越來(lái)越多,互聯(lián)網(wǎng)本身和其相關(guān)技術(shù)都發(fā)展的越來(lái)越快,網(wǎng)絡(luò)服務(wù)已經(jīng)成為現(xiàn)代互聯(lián)網(wǎng)中信息交流和信息共享中不可缺少的一部分。.4Axis2背景Axis2是下一代 Apache Axis。Axis2

2、 雖然由 Axis 1.x 處理程序模型提供支持,但它具有更強(qiáng)的靈活性并可擴(kuò)展到新的體系結(jié)構(gòu)。Axis2 基于新的體系結(jié)構(gòu)進(jìn)行了全新編寫,而且沒(méi)有采用 Axis 1.x 的常用代碼。支持開(kāi)發(fā) Axis2 的動(dòng)力是探尋模塊化更強(qiáng)、靈活性更高和更有效的體系結(jié)構(gòu),這種體系結(jié)構(gòu)可以很容易地插入到其他相關(guān) Web 服務(wù)標(biāo)準(zhǔn)和協(xié)議(如 WS-Security、WS-ReliableMessaging 等)的實(shí)現(xiàn)中。Apache Axis2 是Axis的后續(xù)版本,是新一代的SOAP引擎。.5目的目的我們的編寫目的是通過(guò)探索Axis2的設(shè)計(jì)架構(gòu)和開(kāi)發(fā)模式來(lái)更好地理解軟件體系結(jié)構(gòu)在系統(tǒng)設(shè)計(jì)中的重要性,尤其在互聯(lián)

3、網(wǎng)時(shí)代,信息交流大、數(shù)據(jù)通信頻繁的特點(diǎn)下,對(duì)網(wǎng)絡(luò)服務(wù)框架的研究將有助于我們更好地理解和體驗(yàn)現(xiàn)代互聯(lián)網(wǎng)應(yīng)用框架的意義和內(nèi)部原理。.6需求分析 網(wǎng)絡(luò)服務(wù)支持支持廣泛使用的基于HTTP的SOAP協(xié)議,包括SOAP 1.1和SOAP 1.2。同時(shí)支持REST樣式的網(wǎng)絡(luò)服務(wù)模型。支持Spring框架.7需求分析 傳輸協(xié)議支持在SOAP發(fā)送方和接收方中支持多種協(xié)議比如SMTP、FTP和消息導(dǎo)向性中間件。支持WSDL 2.0中的MEP(消息交換模式).8需求分析 客戶端支持引言:大多數(shù)網(wǎng)絡(luò)服務(wù)框架都支持阻塞的網(wǎng)絡(luò)服務(wù)調(diào)用,但是現(xiàn)在越來(lái)越多的網(wǎng)絡(luò)服務(wù)框架開(kāi)始支持非阻塞網(wǎng)絡(luò)服務(wù)調(diào)用。其實(shí)不僅僅是網(wǎng)絡(luò)服務(wù),網(wǎng)絡(luò)應(yīng)

4、用程序都開(kāi)始傾向于非阻塞調(diào)用,比如AJAX。因此框架客戶端調(diào)用需支持阻塞和非阻塞態(tài)調(diào)用。.9需求分析 擴(kuò)展性支持不管是服務(wù)器端還是客戶端,整個(gè)SOAP消息處理流程(也就是消息的接收與處理,和構(gòu)建與發(fā)送)都必須支持可擴(kuò)展性,所有流程可以改變,并且支持用戶自定義的處理模塊。.10需求分析 性能要求框架需提供專有的XML解析器來(lái)最大化得優(yōu)化SOAP中XML的處理性能。對(duì)于客戶端API提供XML構(gòu)造器來(lái)快速創(chuàng)建XML數(shù)據(jù)并封裝到SOAP中傳輸。整個(gè)網(wǎng)絡(luò)服務(wù)調(diào)用流程,不管是阻塞還是非阻塞,都必須可適應(yīng)高頻率的并發(fā)調(diào)用,并始終保持系統(tǒng)的有效有序運(yùn)行。擴(kuò)展性支持不會(huì)對(duì)整個(gè)處理流程造成過(guò)多性能損耗。.11第二

5、部分:系統(tǒng)設(shè)計(jì)分析和管道過(guò)濾器模型.12系統(tǒng)設(shè)計(jì) Axis2的模塊部署模塊代碼生成模塊核心組件信息處理模塊SOAP處理模塊XML處理模塊客戶端API傳輸組件.13系統(tǒng)設(shè)計(jì) - 管道過(guò)濾器模式管道過(guò)濾器模式:Pipeline and Filters pattern,從名稱上可以看出來(lái),它形象得描述了一種消息處理的模式,即以一種類似管道和過(guò)濾器的處理方式逐步對(duì)數(shù)據(jù)進(jìn)行處理。管道:需要處理的數(shù)據(jù)。過(guò)濾器:處理的執(zhí)行。.14系統(tǒng)設(shè)計(jì) - 管道過(guò)濾器模式前一個(gè)過(guò)濾器的輸出是后一個(gè)過(guò)濾器的輸入。執(zhí)行過(guò)程環(huán)環(huán)相扣,如果一個(gè)過(guò)濾器沒(méi)有輸出,后續(xù)過(guò)濾器就沒(méi)有了輸入,因此無(wú)法進(jìn)行。每一個(gè)執(zhí)行點(diǎn)都可以有反饋機(jī)制,這

6、樣整個(gè)執(zhí)行過(guò)程是可控制的。例如一些腳本執(zhí)行器就是采用類似管道過(guò)濾器模式,如下圖:.15系統(tǒng)設(shè)計(jì) 管道過(guò)濾器處理方式為了滿足需求分析中:分段、高效、支持?jǐn)U展的處理方式。Axis2使用了管道過(guò)濾器模式的處理方式。最外層管道邏輯處理流:SOAP請(qǐng)求和回應(yīng)中層管道引擎執(zhí)行流:處理單元底層管道單元執(zhí)行流:最基本原子執(zhí)行單元.16系統(tǒng)設(shè)計(jì) 第一層:邏輯處理流Axis2會(huì)根據(jù)MEP(消息交換模式)的不同來(lái)決定最外層的邏輯處理流:.17系統(tǒng)設(shè)計(jì) 第二層:引擎執(zhí)行單元Axis2的執(zhí)行引擎是在第二層之上的,在第一層邏輯層之下,引擎處理層則把輸入流和輸出流的各個(gè)步驟具體刻畫出來(lái)。.18系統(tǒng)設(shè)計(jì) 第三層原子執(zhí)行到達(dá)第

7、三層,執(zhí)行的模塊就不可再分了。Axis2會(huì)使用原子執(zhí)行模塊代表管道過(guò)濾器中的節(jié)點(diǎn)。.19系統(tǒng)設(shè)計(jì) 多層管道過(guò)濾器的連接多層管道過(guò)濾器采用類似面對(duì)對(duì)象編程中對(duì)象的繼承和多態(tài)特性,一層管道過(guò)濾器看起來(lái)是線性的,但是一個(gè)過(guò)濾器類型的執(zhí)行可能會(huì)誘發(fā)另一個(gè)子管道過(guò)濾器,這樣這個(gè)過(guò)濾器的執(zhí)行就是其包含的子管道過(guò)濾器先得執(zhí)行。那么此時(shí)邏輯上這個(gè)管道過(guò)濾器執(zhí)行就具有多層的意義了。如下圖:.20Axis執(zhí)行引擎概括 第一層客戶端基于HTTP網(wǎng)絡(luò)服務(wù)傳輸協(xié)議Axis2執(zhí)行引擎服務(wù)端SOAP請(qǐng)求InFlow或者InFaultFlow接受方WebService執(zhí)行SOAP回應(yīng)OutFlow或者OutFaultFlow

8、.21Axis2執(zhí)行引擎 第二層,第三層下圖中的Phase代表第二層單元,Handler代表第三層概念。具體代碼實(shí)現(xiàn)在后面會(huì)詳解。.22第三部分:系統(tǒng)實(shí)現(xiàn)分析.23Axis2最底層管道過(guò)濾器最底層管道過(guò)濾器 - Handler和和Context剛才講過(guò),Axis2中的最底層管道過(guò)濾器執(zhí)行是原子的,不可再分的,因此管道過(guò)濾器直接對(duì)應(yīng)Handler和MessageContext對(duì)象:.24Axis2最底層管道過(guò)濾器最底層管道過(guò)濾器 - Handler和和ContextHandler是一個(gè)接口。命名空間:org.apache.axis2.engineHandler是沒(méi)有狀態(tài)存儲(chǔ)的:Stateless

9、。因此可以理解成是一種靜態(tài)的支持并發(fā)操作的對(duì)象,當(dāng)然實(shí)際上它還是非靜態(tài)的。管道過(guò)濾器的具體執(zhí)行類型都是可擴(kuò)展的:Handler和MessageContext都是可擴(kuò)展類型,僅定義必要執(zhí)行和操作接口。整個(gè)過(guò)程是可控制的: 通過(guò)InvocationResponse類型。.25Handler類型Handler類型定義如下常用方法:名稱作用getName返回名稱getParameter根據(jù)參數(shù)名稱返回參數(shù)類型(Parameter類型)invoke參數(shù)MessageContext,返回值InvocationResponse。調(diào)用Handler 的執(zhí)行flowComplete參數(shù)MessageContex

10、t,類似事件。當(dāng)Handler執(zhí)行完畢后,Axis2引擎會(huì)調(diào)用Handler的flowComplete函數(shù)。.26Handler類型Handler定義一個(gè)Nested Class:InvocationResponse,后者定義三個(gè)靜態(tài)字段:CONTINUE、SUSPEND、ABORT控制當(dāng)一個(gè)過(guò)濾器完成后,是否繼續(xù)或者暫停還是停止后續(xù)的操作。.27AbstractContext類型介紹完管道過(guò)濾器中的過(guò)濾器類型:Handler,我們來(lái)看管道對(duì)應(yīng)的類型:AbstractContext。Axis2的AbstractContext類型在命名空間:org.apache.axis2.context內(nèi)。該

11、類型是用來(lái)存儲(chǔ)任何過(guò)濾器操作中的抽象數(shù)據(jù)類型核心定義.28AbstractContext類型類型定義如下字段(全部是派生類可見(jiàn)的):定于如下函數(shù):名稱類型propertiesMapparentAbstractContextlastTouchTimelong名稱作用getProperty, setProperty, mergeProperties, getPropertiesNames對(duì)存儲(chǔ)屬性的操作(添加、刪除、合并)getParent,isAncestor, setLastTouchedTime其他非存儲(chǔ)屬性相關(guān)操作.29自定義一個(gè)Handler類型了解了上述信息我們可以自定義一個(gè)Handl

12、er類型:/定義一個(gè)類型繼承自Axis2中的AbstractHandler類型public class MyHandler extends AbstractHandler public SimpleHandler() public InvocationResponse invoke(MessageContext msgContext) /判斷MessageContext中是否有叫abc的屬性,如果沒(méi)有的話,暫停整個(gè)管道過(guò)濾器處理流程 if(msgContext.getProperty(abc) = null) return InvocationResponse.SUSPEND; /如果有的話,

13、返回CONTINUE,繼續(xù)整個(gè)流程 return InvocationResponse.CONTINUE; .30Axis2第二層管道過(guò)濾器 Phase這是系統(tǒng)設(shè)計(jì)中第二層:引擎執(zhí)行單元的具體執(zhí)行,在Axis2中,這層的類型名稱是Phase類型。命名空間:org.apache.axis2.engine它具備如下特點(diǎn):定義一系列有序的Handler。是Axis2中新加的概念。Phase類型執(zhí)行Handler接口,因此Phase就是一種Handler,只不過(guò)是一個(gè)特殊的可以包含子Handler的Handler。.31Axis2第二層管道過(guò)濾器 PhasePhase類型的函數(shù):名稱作用getHand

14、lers, addHandler, removeHandler對(duì)子Handler的操作Invoke 參數(shù)是MessageContext,執(zhí)行所有子HandlergetName, setNamePhase本身名稱操作.32Axis2第二層管道過(guò)濾器 PhaseAxis引擎在運(yùn)行時(shí)是以Phase為執(zhí)行單位的,Axis2引擎只會(huì)調(diào)用Phase的Invoke函數(shù),而Phase類型的Invoke函數(shù)會(huì)調(diào)用背后包含的Handler的所有Invoke函數(shù)。如下圖:.33Axis2第三層管道過(guò)濾器:FlowFlow和Phase的關(guān)系就如同Phase和Handler的關(guān)系:Flow包含一個(gè)或多個(gè)Phase。區(qū)別

15、:Flow在Axis2中比較偏向邏輯方面,具體沒(méi)有直接的對(duì)應(yīng)執(zhí)行類型,而且Axis2引擎直接執(zhí)行的元素是Phase。Axis2中包含下面4中FlowInFlow輸入流。SOAP請(qǐng)求。InFaultFlow輸入錯(cuò)誤流。SOAP請(qǐng)求發(fā)生錯(cuò)誤(HTTP狀態(tài)值500)OutFlow輸出流。SOAP回應(yīng)。OutFaultFlow輸出錯(cuò)誤流。.34Axis2執(zhí)行模型再次回顧一下Axis2執(zhí)行模型:從最外層將,Axis2處理整個(gè)SOAP消息是在Phase層:客戶端基于HTTP網(wǎng)絡(luò)服務(wù)傳輸協(xié)議Axis2執(zhí)行引擎服務(wù)端SOAP請(qǐng)求InFlow或者InFaultFlow接受方WebService執(zhí)行SOAP回應(yīng)O

16、utFlow或者OutFaultFlow.35Axis2執(zhí)行模型在往下細(xì)分就是Phase和Handler的管道過(guò)濾器執(zhí)行:.36第四部分:非核心部分實(shí)現(xiàn)分析.37信息處理模型最下是StAX:Streaming API for XML (StAX),XML解析框架,來(lái)自Java,相比SAX模式的XML解析更具動(dòng)態(tài)性,相比DOM形式XML解析更具性能優(yōu)勢(shì),可以理解為介于SAX解析和DOM解析之間。 之上是AXIOM:Apache AXIOM是XML信息集模型,可供用來(lái)動(dòng)態(tài)創(chuàng)建信息對(duì)象數(shù)。 然后在原始XML解析和XML信息模型的基礎(chǔ)上,建立了整個(gè)核心框架,執(zhí)行引擎,部署。因?yàn)锳xis2使用SOAP傳

17、輸,用到WSDL定義服務(wù)描述,而SOAP和WSDL都是基于XML的。 核心框架定義好后,Axis還定義一些上層應(yīng)用運(yùn)行在核心框架之上。如數(shù)據(jù)傳輸模塊和數(shù)據(jù)綁定模塊。.38信息處理模型上述過(guò)程可以用這個(gè)圖來(lái)表示:.39客戶端API分析Axis2客戶端API支持異步核同步的調(diào)用方式。對(duì)于同步的調(diào)用方式,應(yīng)用程序的當(dāng)前執(zhí)行線程會(huì)阻塞,直到收到服務(wù)器回應(yīng),如下圖:.40客戶端API分析對(duì)于異步的調(diào)用方式,應(yīng)用程序的當(dāng)前執(zhí)行線程不會(huì)阻塞,服務(wù)器回應(yīng)會(huì)通過(guò)異步事件調(diào)用通知應(yīng)用程序。如下圖:RN代表服務(wù)器傳來(lái)的回應(yīng)通知。.41代碼測(cè)試實(shí)現(xiàn)使用Java創(chuàng)建一個(gè)簡(jiǎn)單的網(wǎng)絡(luò)服務(wù)執(zhí)行。來(lái)模擬查詢商品價(jià)格和添加商品價(jià)

18、格:首先創(chuàng)建一個(gè)HashMap來(lái)存儲(chǔ)string和double。首先判斷HashMap中否包含指定字符串。如果有的話,返回字符串對(duì)應(yīng)的double值。如果沒(méi)有返回42。.42代碼測(cè)試實(shí)現(xiàn)上述功能代碼:public class StockQuoteService private HashMap map = new HashMap(); /獲取價(jià)格函數(shù)獲取價(jià)格函數(shù) public double getPrice(String symbol) Double price = (Double) map.get(symbol); if(price != null) return price.doubleVa

19、lue(); return 42.00; /添加物品函數(shù)添加物品函數(shù) public void update(String symbol, double price) map.put(symbol, new Double(price); .43代碼測(cè)試實(shí)現(xiàn)使用W3C推薦的標(biāo)準(zhǔn)來(lái)定義這個(gè)網(wǎng)絡(luò)服務(wù),是網(wǎng)絡(luò)服務(wù)規(guī)格化:定義XML根節(jié)點(diǎn)為service(代表一個(gè)網(wǎng)絡(luò)服務(wù)),然后通過(guò)description、operation和parameter三個(gè)節(jié)點(diǎn)規(guī)格化定義網(wǎng)絡(luò)服務(wù)的描述、操作和參數(shù)的數(shù)據(jù)。.44代碼測(cè)試實(shí)現(xiàn)上述功能的代碼(保存在XML文件中) Stock Quote Service samples.

20、quickstart.service.axiom.StockQuoteService.45代碼測(cè)試實(shí)現(xiàn)接下來(lái)需要重新改寫網(wǎng)絡(luò)服務(wù)類型的執(zhí)行(按照Axis2的模式)。具體則需要使用AXIOM中的XML對(duì)象數(shù)解析的方法規(guī)范網(wǎng)絡(luò)服務(wù)的執(zhí)行。最后就是用ServiceClient客戶端API來(lái)調(diào)用網(wǎng)絡(luò)服務(wù),仍然是采用AXIOM的方式,當(dāng)然Axis2提供多種處理方式來(lái)讀取SOAP協(xié)議,不僅限于AXIOM,同時(shí)也不僅限與ServiceClient類型。.46測(cè)試代碼實(shí)現(xiàn)下面就是使用AXIOM的OMElement元素準(zhǔn)備發(fā)送SOAP數(shù)據(jù)的部分代碼:public static OMElement getPric

21、ePayload(String symbol) OMFactory fac = OMAbstractFactory.getOMFactory(); /讀取讀取XSD對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證 OMNamespace omNs = fac.createOMNamespace(http:/axiom.service.quickstart.samples/xsd, tns); /創(chuàng)建創(chuàng)建AXIOM準(zhǔn)備發(fā)送準(zhǔn)備發(fā)送XML數(shù)據(jù)數(shù)據(jù) OMElement method = fac.createOMElement(getPrice, omNs); OMElement value = fac.createOMElement(symbol, omNs); value.addChild(fac

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論