現在部署 WAR 到 OSGi Web 容器變得更容易了

工程 | Andy Wilkinson | 2009 年 6 月 16 日 | ...

正如 Rob 在他的 OSGi Web 容器簡介中所提到的,dm Server 會自動將系統套件匯入到 Web Bundle 中。這證明非常有用,尤其是在將現有的 WAR 檔案部署到 OSGi 環境中時。我最近花了一些時間將此功能從 dm Server 的 Web 子系統移到 OSGi Web 容器 RI 中。此部落格文章描述了新功能以及如何使用它。

啟用系統套件的匯入

您可以使用兩種方法指示 RI 匯入所有導出的系統套件。

安裝 Web Bundle 時,您現在可以使用 SpringSource-SystemPackages URL 參數自動匯入系統 Bundle 的所有導出。例如

install webbundle:file:mywar.war?SpringSource-SystemPackages=import

或者,如果您不想每次安裝 WAR 檔案時都記得指定參數,則可以透過將 SpringSource-SystemPackages 標頭新增到 WAR 的 manifest 來啟用此功能

SpringSource-SystemPackages: import

匯入了哪些套件?

RI 將為系統 Bundle 導出的每個套件生成一個匯入,除非 WAR 檔案已經匯入該套件,或者該套件包含在 WEB-INF/classes 中或 WEB-INF/lib 中的 Jar 檔案中。如果 WAR 檔案已經匯入或包含該套件,則系統 Bundle 的導出將被忽略,並且任何現有的匯入都將保持不變。如果生成新的匯入,則將以精確包含從系統 Bundle 導出的版本範圍的版本範圍生成它。

試用看看

首先,按照 Rob 先前描述的方式建立並啟動 RI,但如果您使用了先前版本的 RI,則應使用 clean 選項啟動 PAX runner,以確保它使用新建立的 RI Bundle,而不是其快取中的那些

pax-run --clean --platform=equinox --snapshot runner.bundles

先前,要成功使用 formtags WAR,必須使用 Import-Package URL 參數匯入一些套件

install webbundle:file:formtags.war?Import-Package=org.xml.sax,org.xml.sax.helpers,javax.xml.parsers,org.w3c.dom

這有點麻煩,因為您需要知道要匯入哪些套件。現在,您可以使用 SpringSource-SystemPackages URL 參數

osgi> install webbundle:file:formtags.war?SpringSource-SystemPackages=import
Bundle id is 43

在安裝 formtags Web Bundle 時,無需列出要匯入的特定套件,它現在應該可以成功啟動

osgi> start 43

下一步是什麼?

我們一直在開發真正模組化的 OSGi Web 應用程式的原型,並且我們越來越接近可以向您展示的東西。它將採用 dm Server 的新組件的形式,該組件運行在 OSGi Web 容器之上,而 dm Server 現在嵌入該容器以取代其先前的 Web 支援。如果一切順利,它應該在本週末準備好。請關注此空間!

獲取 Spring 電子報

訂閱 Spring 電子報,與我們保持聯繫

訂閱

領先一步

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

了解更多

獲得支援

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

了解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

查看全部