SpringSource 應用程式平台部署選項

工程 | Sam Brannen | 2008 年 5 月 6 日 | ...

自從我們上週三發布 SpringSource 應用程式平台以來,許多開發人員已下載 1.0.0 beta 版,並開始試用該平台。因此,人們開始詢問:「我如何在平台上部署我的應用程式?我有哪些部署和封裝選項?」此外,開發人員也迫切希望看到可運作的範例。為了回應這些需求,S2AP 團隊將在未來幾週內發布幾個範例應用程式,示範這些功能以及更多功能,但在您親自試用這些範例之前,我想先為您概述平台中可用的部署和封裝選項。閱讀這篇文章後,您將準備好開始使用範例以及您自己的應用程式。

概觀

正如 Rob 在上週的文章 SpringSource 應用程式平台簡介 中提到的,該平台支援以下形式封裝的應用程式

  1. 原始 OSGi 綁定
  2. Java EE WAR
  3. 網路模組
  4. 平台封存 (PAR)

當您將應用程式部署到平台時,每個部署成品(例如,單個綁定、WAR 或 PAR)都會通過部署管道。此部署管道支援特定於個性的部署器概念,這些部署器負責處理具有特定個性(即應用程式類型)的應用程式。平台 1.0.0 版本原生支援類似於上述每個封裝選項的特定於個性的部署器。此外,部署管道可以通過額外的個性部署器進行擴展,並且平台的未來版本將提供對個性(例如批次、網路服務等)的支援。

現在讓我們仔細看看每個支援的部署和封裝選項,以探索哪一個最適合您的應用程式。

原始 OSGi 綁定

SpringSource 應用程式平台的核心是一個 OSGi 容器。因此,任何符合 OSGi 標準的綁定都可以直接部署在平台上,無需修改。如果您想通過 OSGi 服務註冊表在容器內全域發布或使用服務,您通常會將應用程式部署為單個綁定或一組獨立綁定。但是請注意,由於 PAR 格式的範圍性質,獨立綁定將無法跨應用程式邊界使用服務。換句話說,獨立綁定無法參考部署在 PAR 中的模組的服務。

WAR 部署選項

對於 Web 應用程式封存 (WAR),SpringSource 應用程式平台提供對以下三種格式的支援。

  1. 標準 Java EE WAR
  2. 共用函式庫 WAR
  3. 共用服務 WAR

這些格式中的每一種都在從標準 Java EE WAR 到 OSGi 化網路應用程式的增量遷移路徑中扮演著獨特的角色。

標準 WAR

正如 Rob 已經指出的那樣,「平台直接支援標準 WAR 檔案。在部署時,WAR 檔案會轉換為 OSGi 綁定並安裝到 Tomcat 中。所有標準 WAR 契約都將被遵守,並且您現有的 WAR 檔案應該可以直接放入並部署,無需更改。」 對於標準、未修改的 WAR 檔案的支援使您可以在現有的網路應用程式上試用 SpringSource 應用程式平台,然後逐步遷移到共用函式庫 WAR共用服務 WAR網路模組格式。

共用函式庫 WAR

如果您有使用標準 WAR 格式開發和封裝網路應用程式的經驗,您一定熟悉函式庫膨脹的痛苦。因此,除非您在 Servlet 容器的共用函式庫資料夾中安裝共用函式庫,否則您必須將網路應用程式所需的所有 JAR 封裝在 /WEB-INF/lib 中。在平台發布之前,這種函式庫膨脹基本上是網路應用程式的常態,但現在有一個更好的解決方案!共用函式庫 WAR 格式通過允許您通過標準 OSGi 清單標頭(例如 Import-PackageRequire-Bundle)宣告對函式庫的依賴性,從而減少了應用程式的部署佔用空間並消除了函式庫膨脹。平台通過 Import-LibraryImport-Bundle 清單標頭提供額外的支援來簡化依賴性管理,這些標頭本質上是宏,會擴展為符合 OSGi 標準的 Import-Package 語句。

有關您已擁有的函式庫種類的詳細資訊,請查看 SpringSource 企業綁定儲存庫。此外,Andy Wilkinson 將在本週稍後發布一篇部落格,解釋如何在您的應用程式和 SpringSource 應用程式平台中充分利用綁定儲存庫。敬請關注。

共用服務 WAR

一旦您開始利用具有共用函式庫 WAR 的宣告式依賴性管理,您可能會發現自己想要邁出下一步,以獲得 OSGi 容器的更多好處:在您的 OSGi 相容綁定和您的網路應用程式之間共用服務。通過建立在 Spring-DM 的強大功能和簡潔性之上,共用服務 WAR 格式將 OSGi 服務註冊表置於您的指尖。作為最佳實務,您通常會通過 <osgi:service ... /> 從您的網域、服務和基礎架構綁定發布服務,然後通過 <osgi:reference ... /> 在您的網路應用程式的 ApplicationContext 中使用它們。這樣做可以促進面向介面的編程,並允許您將特定於網路的部署成品與您的網域模型、服務層等完全解耦,這當然是朝著正確方向邁出的一步。在三種支援的 WAR 部署格式中,共用服務 WAR 在網路應用程式的模組化和減少整體佔用空間方面是最具吸引力的。

網路模組

除了基於 WAR 的部署格式之外,SpringSource 應用程式平台還為 OSGi 相容網路應用程式引入了一種部署和封裝選項,即網路模組格式。網路模組的結構與共用服務 WAR 類似,因此可以充分利用所有三種 WAR 部署格式。此外,通過新的 OSGi 清單標頭(例如 Web-DispatcherServletUrlPatternsWeb-FilterMappings),網路模組受益於簡化的 Spring MVC 應用程式配置。有關這些和其他 Web-* 清單標頭的更多詳細資訊,請參閱平台的 程式設計人員指南。平台的即將發布版本也將支援 web.xml 片段以及上述清單標頭。

如果您正在將基於 Spring MVC 的網路應用程式構建為網路模組,則無需擔心為 WebApplicationContextDispatcherServletApplicationContext 配置。根據您的網路模組的 /META-INF/MANIFEST.MF 中的中繼資料,平台將為您即時自動生成適當配置的 web.xml,並且您的應用程式將使用 Spring-DM 為您的網路模組創建的 ApplicationContext。未來的版本將增加額外的支援,以簡化基於 Spring Web Flow 的網路應用程式的配置。

從 WAR 到網路模組的遷移路徑

下圖以圖形方式描述了從標準 WAR 到網路模組的遷移路徑。如您所見,函式庫從部署成品內部移動到綁定儲存庫。同樣,服務從 WAR 內部移動到外部綁定,並通過 OSGi 服務註冊表訪問。此外,隨著您朝著網路模組方向發展,部署成品的整體佔用空間會減少。

Migration path from WAR to Web Module

平台封存

最後一塊拼圖是 PAR(平台封存)部署格式。PAR 是一個標準 JAR,其中包含應用程式的所有模組(例如,服務、網域和基礎架構綁定以及用於網路應用程式的 WAR 或網路模組),位於單個部署單元中。這允許您將整個應用程式作為單個實體進行部署、刷新和解除部署。對於那些熟悉 Java EE 的人來說,PAR 可以被認為是 OSGi 容器環境中 EAR(企業封存)的替代品。作為額外的好處,PAR 中的模組可以獨立且即時地刷新,例如通過 SpringSource 應用程式平台工具套件(註冊 beta 計劃並查看 Eclipse 工具支援)。

此外,PAR 在平台內限定範圍應用程式的模組。範圍限定提供了物理和邏輯應用程式邊界,從而保護您的應用程式的內部結構免受平台中部署的任何其他應用程式的影響。這意味著您的應用程式不必擔心與其他正在運行的應用程式發生衝突(例如,在 OSGi 服務註冊表中)。您可以獲得對載入時編織、類路徑掃描、上下文類別載入等的支援,並且平台會為您完成繁重的工作,以使所有這些在 OSGi 環境中無縫協作。如果您想充分利用 SpringSource 應用程式平台和 OSGi 提供的所有功能,那麼將您的應用程式封裝和部署為 PAR 絕對是推薦的選擇。

後續步驟

如果您尚未加入,我鼓勵您加入 beta 計劃 並親自試用 SpringSource 應用程式平台。

您可以在 使用者指南程式設計人員指南 中找到最新的文件,如果您在部署應用程式時遇到任何問題,或者對我們如何改進平台有任何建議,請隨時 建立 JIRA 問題

最後但並非最不重要的是,請務必查看 SpringSource 團隊部落格 上即將發布的文章,以隨時了解有關平台的新聞,並查看可運作的範例,包括已模組化並封裝為 PAR 的 OSGi 化 Spring PetClinic 範例應用程式。

取得 Spring 電子報

隨時掌握 Spring 電子報的最新資訊

訂閱

搶先一步

VMware 提供培訓和認證,以加速您的進展。

瞭解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

瞭解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

檢視全部