Spring Dynamic Modules 1.0 正式發布

工程 | Costin Leau | 2008 年 1 月 25 日 | ...

我很榮幸地宣布(與 Adrian 一同宣布),經過 3 個里程碑版本和 2 個候選版本後,Spring Dynamic Modules(前身為 Spring OSGi)1.0 版已發布

自從我上次的文章(關於 1.0 M1)以來,許多功能都得到了改進或新增;我將在未來的文章中更多地談論它們(還有參考文件詳細解釋了該程式庫),所以我只列舉幾個:

- 一致性

我們希望提供一個強大、簡單且一致的程式設計模型。 這就是 Spring Dynamic Modules 以 Spring 為基礎,並使用其經驗證的概念、可靠性和普遍性的原因。

- 高度非侵入性

使用 Spring DM 的建議方法是不要在您的程式碼中使用其類別,或者在您的 bundle 資訊清單中包含任何對它們的導入。 如果您在程式碼中未使用 Spring,僅用於應用程式配置,則同樣的規則適用。 Spring DM 會為您建立應用程式上下文,因此您無需依賴 Spring 或 Spring DM。 並且不要擔心自訂命名空間或 XML 綱要等問題 - 我們已經涵蓋了它們。

- OSGi 服務動態生命週期管理

這是 Spring DM 最重要的功能之一 - 能夠像與一般的 Bean 互動一樣與 OSGi 服務互動。 您無需編寫任何程式碼即可發布和使用 OSGi 服務; 我們將為您處理動態 - 並且您擁有完全的控制權(有關更多資訊,請參閱未來)。

- 更聰明的整合測試框架

由於我們在內部廣泛使用 Spring-DM 整合測試,因此我們改進了預設值、Maven 整合,並使自動資訊清單產生速度更快,更智慧。 例如,該框架會自動確定測試 bundle 中可用的類別,並且不會為其產生導入。

- 簡單的 bundle 互動

Andy Piper (部落格) 添加了一種簡單、宣告式的方法,可以根據模組生命週期和 Spring Bean 依賴關係來安裝/啟動/停止/更新 bundle。

- 受管理的啟動/關閉上下文建立

在 OSGi 中,應用程式被分解為各種模組(也稱為 bundle),它們彼此依賴服務。 這會在模組之間建立一個依賴樹,這在啟動和關閉期間變得非常重要。 傳統上,可以通過基於依賴順序安裝和啟動 bundle 來解決此問題,但是,這並不能完全解決問題。 正如 OSGi 規範建議的那樣,需要很長時間才能初始化的 OSGi 服務(例如連線池)應依賴於與用於啟動和停止 bundle 的執行緒不同的執行緒。 這意味著如果啟動了一個 bundle,並不意味著其服務已啟動。 並非每個應用程式都準備好在啟動期間等待其所需的服務 - 事實上,很少有應用程式這樣做。 這意味著 bundle 將失敗,因為它依賴於幾毫秒後發布的服務(預設情況下,OSGi 是一個 VM 內平台,其中的事情發生得非常快)。

這種行為並不罕見 - 事實上,在具有多個 bundle 的多核心平台上,這種行為在啟動時非常常見。 Spring DM 通過確定依賴關係(從 Spring 配置中)並在建立應用程式上下文之前等待它們可用來解決此問題。 在關閉時將使用類似的過程,屆時 Spring DM 將根據其依賴順序停止上下文,因此您不必擔心啟動或停止 bundle。

- 無執行緒依賴等待

我不能討論依賴機制,而不提及用於依賴等待的「無執行緒」方法(聽起來有點像矛盾修飾法,我知道 - 我們正在為其設計一個花哨的標題),該方法由 Hal Hildebrand 實施(請參閱他的部落格)。 由於需要各種服務才能使模組正確啟動,因此需要某種等待/監控,這傳統上意味著使用執行緒。

但是,在 OSGi 平台上可以(並且將會)有多個模組(很容易有幾十個)- 為每個模組使用等待執行緒根本無法擴展。 我們努力改進的一件事是改進此模型,我相信我們提供了一個非常好的解決方案 - 在等待過程中根本不使用執行緒。 這意味著無論部署了 3 個 bundle 還是 300 個 bundle,除非您的模組實際啟動,否則不會花費任何 CPU 時間。

 

Spring Dynamic Modules 不僅僅是將 API「Spring-ifying」,而是處理不同的運行時環境。

 

關於工具,Spring IDE 支援 Spring DM 命名空間,並且(感謝 Christian)還為 Eclipse PDE 提供了 Spring-DM 特定的目標,這是 Spring IDE 夜間建置版本中提供的功能(有關安裝和使用外掛程式的更多資訊,請參閱參考文件中提供的資訊)。

 

未來方向

 

現在 1.0 已經發布,下一步是什麼? 有很多領域需要涵蓋:

Web 支援

OSGi 平台提供專用的 Http Service,但使用它需要編碼。 諸如資源載入、JSP 產生和部署之類的事情可以大大簡化。 這是 1.1 版本的主要重點領域。

持久性

現代持久性工具提供諸如延遲載入之類的高級功能,這些功能會彎曲 OSGi 環境強制執行的模組化邊界,因為它們依賴於類別產生和代理。 我們希望解決此問題,並且像提供 Web 支援一樣,無論使用純 JDBC 或/和 ORM 工具,都能提供流暢的體驗。

AOP

在持久性問題之後,我們正在尋找在 OSGi 內部進行通用 AOP 的解決方案。 這是一個難啃的骨頭,並且要正確地執行它,需要內部 OSGi 平台支援。 好消息是,像 Equinox Aspects 這樣的專案已經引領了道路,並且 OSGi Enterprise Expert Group (EEG) 也將該問題納入了他們的雷達。

 

說夠了

 

如果您想了解更多關於 Spring Dynamic Modules 的資訊,請參閱 專案頁面和參考文件,並使用我們的郵件清單(論壇將很快出現)。 此外,最近我們製作了一些 OSGi/Spring DM 螢幕錄影,這些錄影可在 Spring DM 首頁上找到。 第一個錄影(由我製作,分為兩個部分)展示了如何快速建立一個專案以使用 Spring DM 進行整合測試。
為什麼要進行整合測試? 因為使用 Spring DM 進行整合測試是一個非常簡單且快速的過程,並且是學習 OSGi 的一種非常有效的方法(尤其是在模組化方面)。

未來將會有更多的螢幕錄影 - 只需告訴我們您想看什麼,我們將根據請求的數量對它們進行相應的排隊。

事不宜遲,「使用 Spring DM 進行 OSGi 整合測試

 

取得 Spring 電子報

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

訂閱

取得領先

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

了解更多

取得支援

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

了解更多

即將到來的活動

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

查看所有