ivaneeo's blog

          自由的力量,自由的生活。

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            669 Posts :: 0 Stories :: 64 Comments :: 0 Trackbacks

          引言

          Apache Axis2(主要的開源 Web 服務平臺之一)提供了一系列新功能,最為可貴的是,其中的很多功能都對向開發(fā)人員提供更為用戶友好的方法起到了促進作用。在之前的 Axis 版本中,并不十分重視用戶友好性。例如,在 Axis1 中,用戶必須手動調用管理客戶機并更新服務器類路徑,然后重新啟動服務器以應用更改。這個有點麻煩的部署模型對新手肯定是一道障礙。因此,Axis2 經(jīng)過了精心的設計,能夠克服此缺點,并提供更為靈活、可方便進行配置的部署模型。

          Axis2 部署新功能

          Axis2 部署模型將一系列新功能引入了 Apache Web 服務堆棧中(其中一些功能對于 Web 服務范式并非新事物)。以下列出了最為重要的主要更改和新功能:

          • 類似于 Java™ 2 Platform Enterprise Edition (J2EE) 的部署機制(基于存檔)
          • 熱部署和熱更新
          • 存儲庫(可以在其中放置服務和模塊)
          • 處理程序(模塊)部署的更改
          • 新部署描述符
          • 多個部署選項

          在下面的內(nèi)容中,我們將逐個對每個方面進行詳細討論。

          回頁首

          類似于 J2EE 的部署機制

          在任何 J2EE 應用服務器中,都可以將應用程序作為自包含包部署,可以將所有的資源、配置文件和二進制文件打包為一個文件并進行部署。這顯然非常實用,而也正是因為如此,Axis2 也引入了相同的機制來更方便地部署服務(和模塊)。

          考慮這樣的情況,假如您有一個存在多個第三方依賴關系和一組屬性文件的服務,同時假定沒有類似于 J2EE 的部署機制。必須手動將所有這些依賴 JAR 文件和屬性文件放入類路徑中。如果有一個或兩個服務器,這項工作的量將翻倍!在存在數(shù)百副本的集群環(huán)境中,將依賴 JAR 文件和其他資源添加到類路徑中的做法并不實際。有了類似于 J2EE 的部署機制后,就沒有這些問題了,只需要將服務放入副本中,而不需要進行任何其他工作了。

          Axis2 自包含包(或存檔文件)的內(nèi)部結構如圖 1 中所示。兩種 Axis2 服務(存檔和模塊存檔)非常相似。二者之間的細微差別包括:

          • 對于 Axis 服務,描述符文件是 services.xml;而對于 Axis 模塊,描述符文件是 module.xml。
          • Axis2 服務的文件擴展名是 .aar(服務的文件名將為 foo.aar),模塊的文件擴展名為 .mar(模塊的文件名將為 foo.mar)。

          圖 1. 存檔文件的結構
          存檔文件的結構 

          回頁首

          熱部署和熱更新

          對于企業(yè)級應用程序,可用性是一個大問題。即使短時間的停機都可能帶來很大損失,因此重新啟動服務器并不是一個較好的做法。需要在不用關閉系統(tǒng)的情況下對其進行更新。而這就是熱部署和熱更新的用武之地。熱部署和熱更新是 Apache Web 服務堆棧(如 Axis 和 Axis2)中的新功能。這兩個新功能如下所述:

          • 熱部署是指在系統(tǒng)啟動并運行的情況下部署新服務的能力。例如,假定您有兩個服務——service1 和 service2——已啟動并運行,現(xiàn)在要在不用關閉系統(tǒng)的情況下部署名為 service3 的新服務。部署 service3 就是一個熱部署場景。作為系統(tǒng)管理員,如果不喜歡服務的熱部署,則可以通過更改名為 axis2.xml 的 Axis2 全局配置文件,將全局配置參數(shù)更改為以下所示,從而關閉此功能:<parameter name="hotdeployment">false</parameter>
          • 熱更新是指在不關閉系統(tǒng)的情況下更改現(xiàn)有 Web 服務的能力。這是一個重要的特性,是測試環(huán)境中需要的一個功能。不過,在實時系統(tǒng)中使用熱更新并不明智,因為這可能導致系統(tǒng)進入未知狀態(tài)。此外,還可能會丟失該服務的現(xiàn)有服務數(shù)據(jù)。為了防止出現(xiàn)這種情況,Axis2 缺省將熱更新參數(shù)設置為 FALSE。如果希望使用此功能,請按照以下所示更改配置參數(shù),從而啟用此功能:<parameter name="hotupdate">true</parameter>

          回頁首

          存儲庫

          Axis2 存儲庫實際上就是文件系統(tǒng)中具有特定結構的目錄。它可以位于本地,也可以位于遠程計算機上。之所以引入存儲庫概念,目的是為了方便地支持基于存檔的熱部署功能。

          存儲庫目錄包含兩個主要子目錄,分別名為 services 和 modules。還可能有一個可選的子目錄,名為 lib。如果希望部署服務,需要將服務存檔文件放入 services 目錄中。類似地,如果希望部署模塊,請將模塊存檔文件放入 modules 目錄。對于 lib 目錄,要將其作為放置對服務和模塊公用的第三方庫的位置。圖 2 顯示了存儲庫的圖形表示形式。


          圖 2. Axis2 存儲庫
          Axis2 存儲庫 

          注意:如果 modules 目錄中的部分或全部模塊希望共享某些資源,可以將這些資源添加到 modules 目錄中的 lib 目錄內(nèi)。類似地,如果 services 目錄中的全部或部分服務希望共享公共資源,恰當?shù)奈恢檬窃?services 目錄內(nèi)的 lib 目錄。

          回頁首

          處理程序(模塊)部署的更改

          服務擴展(或模塊)的概念是 Apache Axis 范式的一個新功能。其基本思想是對系統(tǒng)的核心功能進行擴展或提供服務質量保證。對于 Axis1,如果希望擴展其核心功能,則需要編寫處理程序(執(zhí)行鏈中的最小單位),更改全局配置文件添加該處理程序,最后要重新啟動系統(tǒng)。

          模塊進行相同的工作,但會減少所需進行的工作量。同時,模塊可以通過使用模塊描述文件 modul.xml 來包含一個或多個處理程序。大多數(shù)情況下,模塊是特定 WS 規(guī)范的實現(xiàn),例如 Axis2 addressing 模塊就是 WS-Addressing 的實現(xiàn)。

          如前面提到的,可以將模塊作為存檔文件部署。模塊存檔文件的結構如圖 3 中所示。


          圖 3. 模塊存檔文件的結構 
          模塊存檔文件的結構  

          回頁首

          新部署描述符

          Axis2 的靈活性和可擴展性的重點是其部署描述符。將不再僅處理一個配置文件,而是針對不同的配置級別有不同的配置文件。例如,如果希望向系統(tǒng)添加處理程序,則沒有必要更改全局配置;可以通過僅更改模塊配置文件來完成此工作。Axis2 中有三種類型的描述符或配置文件:

          • 全局描述符 (axis2.xml)
          • 服務描述符 (services.xml)
          • 模塊描述符 (module.xml)

          在全局描述符中,所有系統(tǒng)級的配置都在 axis2.xml 中給出,包括以下內(nèi)容:

          • 參數(shù)
          • 傳輸發(fā)送方
          • 傳輸偵聽器
          • 階段
          • 全局模塊

          Axis2 提供了缺省 axis2.xml。其中包含啟動 Axis2 所需的最小配置,但可以自由對其進行更改,從而使用您自己的 axis2.xml 啟動 Axis2。務必注意,如果對 axis2.xml 進行了任何更改,則必須重新啟動系統(tǒng),以使這些更改生效。

          在服務描述符中,由 services.xml 給出關于服務的配置。為了使服務有效,需要在服務存檔文件中包含 services.xml 文件。服務配置文件包含以下內(nèi)容:

          • 服務級別的參數(shù)
          • 服務的描述
          • 消息接收方
          • 需要作為 Web 操作(服務中的操作)公開的操作
          • 服務級別的模塊

          模塊描述符文件 (module.xml) 包含將模塊插入到系統(tǒng)中所需的配置數(shù)據(jù)。主要配置包括以下方面:

          • 處理程序及其階段規(guī)則
          • 模塊參數(shù)

          務必注意,module.xml 還可能包含以下元素:

          • 關于模塊的描述(及其實現(xiàn)的規(guī)范)
          • 端點(對于可靠消息傳遞的情況,就是類似于 create sequence 的端點)

          回頁首

          Axis2 中可用的部署方法

          在 Axis2 中,可采用三種主要方式部署服務:

          • 將服務存檔文件放入存儲庫中。
          • 使用存檔文件以編程方式創(chuàng)建服務。
          • 將服務作為傳統(tǒng) Java 對象(Plain Old Java Object,POJO)部署。

          在 Axis2 中,部署服務的最常用方法是直接將服務存檔文件復制或放置到存儲庫中(services 目錄)。如果使用基于 Axis2 WAR 文件的分發(fā)版本,則有兩個選擇:

          • 手動將存檔文件放置到存儲庫中。
          • 使用 Web 控制臺上載服務。

          以編程方式部署并非用戶需求,而是模塊創(chuàng)建者的需求,因為某些模塊要求 Web 服務的部署提供模塊的全部功能。若要以編程方式創(chuàng)建服務,需要使用 services.xml、類加載器(可用于加載您的類文件)和 AxisConfiguration。此方法的優(yōu)勢在于,您并不需要將服務存檔文件復制到存儲庫中,而且僅在運行時服務才可見。清單 1 可幫助您形成對編程服務部署方法的基本認識。


          清單 1. 編程服務部署
                          AxisConfiguration axisConfig;  // you need to have reference to AxisConfiguration  File file = new File("Location of the file""); ClassLoader clsLoader = new URLClassLoader(new URL[]{file.toURL()}); InputStream in = new FileInputStream("location of service.xml"); AxisService service = DeploymentEngine.buildService(in, clsLoader, axisConfig); 

          使用 Java 類部署服務是 Axis2 中提供的一項使用非常方便的功能,在這種情況下沒有必要生成服務存檔文件或 services.xml。唯一的要求是,必須在創(chuàng)建服務前將 Java 類放入類路徑中。在運行時,可以由模塊或服務創(chuàng)建新服務并進行部署。在 Axis2 中部署 POJO 僅需要三行代碼,如清單 2 中所示。


          清單 2. 在 Axis2 中部署 POJO
                          AxisService service = AxisService.createService(  MyService.class.getName(), axisConfig, RPCMessageReceiver.class); axisConfig.addService(service); 

          回頁首

          總結

          Axis2 在這里并不是證明 Web 服務概念,而是提供更好的 SOAP 處理模型,且相對于 Axis1 及其他現(xiàn)有 Web 服務引擎而言,此模型在速度和內(nèi)存方面性能有了很大的改善。此外,它還提供了方便的部署機制。現(xiàn)在已經(jīng)進入 Axis2 的時代了!

          posted on 2011-08-24 16:27 ivaneeo 閱讀(311) 評論(0)  編輯  收藏 所屬分類: java魔力
          主站蜘蛛池模板: 博客| 铜川市| 河源市| 德化县| 临桂县| 禄丰县| 姜堰市| 和硕县| 浦江县| 湘西| 苍梧县| 商洛市| 泰兴市| 鲁山县| 普兰县| 东港市| 田林县| 禄丰县| 南雄市| 邵武市| 民县| 无锡市| 汾阳市| 集安市| 饶河县| 饶阳县| 赤城县| 塔城市| 中西区| 华池县| 五莲县| 铁岭市| 和田县| 石首市| 新巴尔虎右旗| 循化| 白水县| 同心县| 凤冈县| 微山县| 张家川|