SpringSource 應用平臺部署選項

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

自上週三釋出 SpringSource 應用平臺以來,許多開發者下載了 1.0.0 Beta 版本並開始試用該平臺。因此,人們開始問:“我如何在平臺上部署我的應用,以及我有哪些部署和打包選項?” 此外,開發者們迫切希望看到可執行的示例。為了回應這一需求,S2AP 團隊將在未來幾周釋出幾個示例應用,演示這些功能以及更多內容,但在您獲取這些示例之前,我想先向您介紹一下該平臺中可用的部署和打包選項的高階概覽。閱讀本文後,您將能夠快速上手這些示例以及您自己的應用。

概覽

正如 Rob 上週在他的帖子《介紹 SpringSource 應用平臺》中提到的,該平臺支援以下形式打包的應用

  1. 原生 OSGi Bundle
  2. Java EE WAR
  3. Web 模組
  4. 平臺歸檔 (PAR)

當您將應用部署到該平臺時,每個部署工件(例如,單個 bundle、WAR 或 PAR)會透過一個部署管道。這個部署管道支援“個性化部署器”的概念,它們負責處理具有特定個性(即應用型別)的應用。該平臺的 1.0.0 版本原生支援與上述每種打包選項相對應的個性化部署器。此外,部署管道可以透過新增其他個性化部署器進行擴充套件,該平臺的未來版本將支援諸如批處理、Web 服務等個性化功能。

現在讓我們仔細看看每種支援的部署和打包選項,以探索哪種最適合您的應用。

原生 OSGi Bundle

SpringSource 應用平臺的核心是一個 OSGi 容器。因此,任何 OSGi 相容的 bundle 都可以直接在平臺上未經修改地部署。如果您想透過 OSGi 服務登錄檔在容器內全域性釋出或消費服務,通常會將應用部署為一個單獨的 bundle 或一組獨立的 bundle。然而請注意,由於 PAR 格式的作用域特性,獨立的 bundle 將無法跨應用邊界消費服務。換句話說,一個獨立的 bundle 無法引用部署在 PAR 內的模組的服務。

WAR 部署選項

對於 Web 應用歸檔檔案 (WAR),SpringSource 應用平臺支援以下三種格式。

  1. 標準 Java EE WAR
  2. 共享庫 WAR
  3. 共享服務 WAR

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

標準 WAR

正如 Rob 已經指出的,“標準 WAR 檔案在平臺中直接支援。在部署時,WAR 檔案被轉換為 OSGi bundle 並安裝到 Tomcat 中。所有標準的 WAR 契約都會被遵守,您現有的 WAR 檔案應該可以直接放入並部署而無需更改。” 支援標準、未經修改的 WAR 檔案,使您可以在現有 Web 應用上試用 SpringSource 應用平臺,然後逐步遷移到共享庫 WAR共享服務 WARWeb 模組格式。

共享庫 WAR

如果您有使用標準 WAR 格式開發和打包 Web 應用的經驗,您肯定熟悉庫膨脹的痛苦。因此,除非您將共享庫安裝在 Servlet 容器的公共庫資料夾中,您必須將您的 Web 應用所需的所有 JAR 包打包到 /WEB-INF/lib 中。在平臺釋出之前,這種庫膨脹基本上是 Web 應用的常態,但現在有更好的解決方案!共享庫 WAR 格式透過允許您透過標準 OSGi 清單頭(例如 Import-PackageRequire-Bundle)宣告對庫的依賴來減少應用的部署佔用空間並消除庫膨脹。該平臺還提供了額外的支援,透過 Import-LibraryImport-Bundle 清單頭來簡化依賴管理,這些本質上是宏,會擴充套件為 OSGi 相容的 Import-Package 語句。

有關您可以使用的庫的詳細資訊,請檢視 SpringSource 企業 Bundle 倉庫。此外,Andy Wilkinson 將於本週晚些時候釋出一篇部落格,解釋如何在您的應用和 SpringSource 應用平臺中最大限度地利用 Bundle 倉庫。敬請關注。

共享服務 WAR

一旦您開始使用共享庫 WAR 利用宣告式依賴管理,您可能會發現自己想邁出下一步,以獲取 OSGi 容器的更多益處:在 OSGi 相容的 bundle 和您的 Web 應用之間共享服務。透過利用 Spring-DM 的強大功能和簡潔性,共享服務 WAR 格式將 OSGi 服務登錄檔置於您的指尖。作為最佳實踐,您通常會透過 <osgi:service ... /> 從您的領域、服務和基礎設施 bundle 中釋出服務,然後透過 <osgi:reference ... /> 在您的 Web 應用的 ApplicationContext 中消費它們。這樣做可以促進面向介面程式設計,並允許您將 Web 特定的部署工件與您的領域模型、服務層等完全解耦,這無疑是朝著正確方向邁出的一步。在三種支援的 WAR 部署格式中,共享服務 WAR 在模組化和減小 Web 應用總體佔用空間方面無疑是最具吸引力的。

Web 模組

除了基於 WAR 的部署格式之外,SpringSource 應用平臺引入了一種針對 OSGi 相容 Web 應用的部署和打包選項,即Web 模組格式。Web 模組的結構與共享服務 WAR 相似,因此可以充分利用所有三種 WAR 部署格式。此外,Web 模組透過新的 OSGi 清單頭(例如 Web-DispatcherServletUrlPatternsWeb-FilterMappings)減少了基於 Spring MVC 應用的配置。有關這些以及其他 Web-* 清單頭的更多詳細資訊,請查閱平臺的程式設計師指南。該平臺的未來版本還將支援 web.xml 片段以及上述清單頭。

如果您正在構建一個基於 Spring MVC 的 Web 應用並將其作為 Web 模組,您無需擔心為您的 DispatcherServlet 配置一個 WebApplicationContextApplicationContext。根據您 Web 模組的 /META-INF/MANIFEST.MF 中的元資料,平臺將即時為您自動生成一個配置恰當的 web.xml,並且您的應用將使用 Spring-DM 為您的 Web 模組建立的 ApplicationContext。未來版本還將增加對簡化配置基於 Spring Web Flow 的 Web 應用的支援。

從 WAR 到 Web 模組的遷移路徑

下圖以圖形方式描繪了從標準 WAR 到 Web 模組的遷移路徑。如您所見,庫從部署工件內部移到 Bundle 倉庫。類似地,服務從 WAR 內部移到外部 bundle 中,並透過 OSGi 服務登錄檔訪問。此外,隨著您向 Web 模組遷移,部署工件的總體佔用空間會減小。

Migration path from WAR to Web Module

平臺歸檔

最後的關鍵是 PAR(平臺歸檔)部署格式。PAR 是一個標準的 JAR 檔案,它將您應用的所有模組(例如,服務、領域和基礎設施 bundle,以及 Web 應用的 WAR 或 Web 模組)包含在一個單獨的部署單元中。這使您可以將整個應用作為一個單獨的實體進行部署、重新整理和取消部署。對於熟悉 Java EE 的人來說,在 OSGi 容器的環境中,PAR 可以被視為 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 社群中的所有近期活動。

檢視全部