Spring Dynamic Modules 達到 1.0!

工程 | Adrian Colyer | 2008年1月25日 | ...

嗯,它比我們最初預期的花費了更長的時間,但我很高興地說 Spring Dynamic Modules 專案今天達到了它的 1.0 里程碑。 當我第一次在 2006 年 9 月發布關於這個主題的文章時("Spring OSGi 支援獲得動力"),最初的規格只是一個針對 Spring Framework 的 issue 的附件,並且與更廣泛的 OSGi 社群的聯繫才剛剛開始形成。

快進到 18 個月後,Spring Dynamic Modules 已經成為 Spring 產品組合中的一個完整的專案,其提交者來自 SpringSource、BEA 和 Oracle。 BEA 和 Oracle 都使用 Spring Dynamic Modules 來構建他們自己的基於 OSGi 的產品(例如,請參閱 "WebLogic Event Server - 為什麼我們使用 Spring"),並且 Spring Dynamic Modules 討論組已經有將近 1000 名成員。 OSGi 聯盟本身已經成立了一個 企業專家組

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 個,除非您的模組實際啟動,否則都不會花費任何 CPU 時間。

 

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

 

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

 

未來方向

 

既然 1.0 已經發佈,接下來是什麼? 有很多領域需要涵蓋

Web 支援

OSGi 平台提供專用的 Http Service,但使用它需要編碼。 資源載入、JSP 生成和部署等事情可以得到顯著簡化。 這是 1.1 版本的主要關注點。

持久化

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

AOP

在解決持久化問題之後,我們正在尋找在 OSGi 內部進行通用 AOP 的解決方案。 這是一個難啃的硬骨頭,並且要正確地做到這一點,需要內部 OSGi 平台支援。 好消息是,諸如 Equinox Aspects 之類的專案已經引領了道路,並且 OSGi 企業專家組 (EEG) 正在關注這個問題。

 

說夠了

 

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

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

不再贅述,「使用 Spring DM 進行 OSGi 整合測試

 

網域物件依賴注入功能的新改進

工程 | Ramnivas Laddad | 2008年1月24日 | ...

Spring 的依賴注入 (DI) 機制允許配置在應用程式上下文中定義的 bean。 如果您想將相同的想法擴展到非 bean 怎麼辦? Spring 對網域物件 DI 的支援利用 AspectJ 織入將 DI 擴展到任何物件,即使它是由 web 或 ORM 框架建立的。 這使得能夠建立行為豐富的網域物件,因為網域物件現在可以與注入的物件協作。 在這篇部落格中,我將討論 Spring 框架在這個領域的最新改進。

網域物件 DI 背後的核心思想非常簡單:一個 AspectJ 織入的 aspect 選擇與任何符合特定規格的物件的建立反序列化 對應的連接點。 對這些連接點的 Advice 將依賴關係注入到正在建立或反序列化的物件中。 當然,魔鬼藏在細節中。 例如,您如何選擇與反序列化對應的連接點,或者如何確保每個物件僅注入一次依賴關係? 通過提供一些預先編寫的…

Spring 超越 EJB 成為技能要求

工程 | Rod Johnson | 2008年1月24日 | ...

職位列表是衡量技術真實採用情況的一個很好的指標。 它們表明公司是否在花錢,從而可以區分實質和炒作; 它們表明開發人員獲得和培養相關技能的重要性(技術永續性的一個重要因素); 它們為公司採用特定技術提供了良好的安全指南。

因此,Indeed.com 的 jobtrends 網站(一個職位列表聚合網站)是一個重要的資源。 它允許跟踪一段時間內職位需求數量的趨勢,並且…

SpringSource 認證計畫

工程 | Daryl Heinz | 2008年1月17日 | ...

注意: 這篇文章已經過編輯,以反映 Spring 轉移到 Pivotal。關於Spring 訓練和認證的最新部落格文章請參閱 這裡

自從六個月前我作為培訓總監加入 SpringSource 以來,我一直聽到一個一致的要求。 根據對 Spring 技能的 不斷增長的需求,全球的開發人員和顧問都在尋求可量化的方法來展示他們的 Spring 專業知識。 同樣,需求背後的招聘經理正在尋求一個認證計畫,以幫助識別和聘用那些對 Spring 具有立即可用、基線知識的技術人員。

如同 Spring 專案團隊回應開源社群的需求,我們也很高興地宣布 SpringSource 認證計畫。這項計畫將於本月,也就是 2008 年 1 月,正式啟動,首先推出的是 Spring Framework Professional

採用力量:為何沒有公司大到可以拒絕開發者想要的東西

工程 | Rod Johnson | 2008 年 1 月 16 日 | ...

對新聞來說真是個重要的一天,因為我們完成了在倫敦舉辦的第一屆年度 Spring eXchange。首先,Sun Microsystems 收購了 MySQL,然後是期待已久的 Oracle 收購 BEA Systems。在進一步評論之前,我想祝賀所有在 MySQL 的朋友們,尤其是 Mårten Mickos,以及所有在 BEA 的朋友們。這個產業的整合趨勢正在增加。

作為一家開源公司,我們很高興看到 MySQL 因其努力而獲得回報。我們看到了 Mårten 和他的同事們為了構建他們的軟體、社群和強大的… 所付出的努力。

祝 Tony Hoare 生日快樂

工程 | Rod Johnson | 2008 年 1 月 14 日 | ...

上週五是 Tony (C.A.R.) Hoare 的生日。誰是 C. A. R. Hoare?如果你是一位程式設計師,你可能熟悉 Quicksort (快速排序)——一種優雅且出人意料地簡單的排序演算法,在大多數情況下速度極快。如果你學過電腦科學,你幾乎肯定已經用多種語言實現過快速排序,並且會認出此頁面上的動畫。Hoare 在 1960 年發明了快速排序,它現在是使用最廣泛的排序演算法。Quicksort in Action

除了其他貢獻之外,Hoare 還發明了用於指定互動的通訊循序程序 (CSP) 語言…

捕捉失敗和系統狀態 (第一部分)

工程 | Alef Arendsen | 2008 年 1 月 07 日 | ...

在 The Spring Experience 大會上,我主持了一個關於各個方面的會議。其中之一是上週我描述的 Hibernate 同步 aspect。另一個是可以捕獲首次失敗和系統狀態的 aspect,有時稱為 First-Failure Data Capture (FFDC)。我主持這次會議是為了展示一些非常有用的 aspect,但人們可能尚未在實踐中遇到過。我經常聽到人們詢問除了日誌記錄、追蹤、交易管理和安全性之外的 aspect。我認為 Hibernate 同步 aspect 和 FFDC aspect 是不錯的例子。

簡介

FFDC 的目標是在發生錯誤時盡可能多地捕獲有關系統當前狀態的資訊。以下條目解釋了此 aspect 的工作原理以及如何在您自己的應用程式中使用它。

讓我們…

在 JDBC 操作之前,刷新 Hibernate Session (包含 TSE 範例程式碼)

工程 | Alef Arendsen | 2008 年 1 月 04 日 | ...

在同一個交易中混合使用物件關係映射器和未使用物件關係映射器的程式碼,可能會導致資料在應該可用的時候,在底層資料庫中不可用。 由於我偶爾會遇到這種情況,因此我認為如果我寫下我的解決方案,對大家都會有所幫助。

簡而言之:我將在本篇文章的其餘部分介紹的是一個 aspect,它可以觸發底層持久機制 (JPA、Hibernate、TopLink) 將任何髒資料發送到資料庫。

順便說一句,我在去年 12 月的 The Spring Experience 的其中一個會議上介紹了這個 aspect,這篇文章也為你們提供了原始碼…

Spring .NET 1.1 和容器配置

工程 | Mark Pollack | 2008 年 1 月 04 日 | ...

對於 Spring.NET 來說,這真是相當充實的一年。在 12 月 GA 版本發布之前,我們經歷了兩個里程碑版本和兩個候選版本。1.1 版本的首批程式碼早在 2004 年末就由 Aleks Seovic 撰寫,他開始從事 ASP.NET framework 的工作。簡而言之,這項工作已經進行了很長時間。由於現在是年底,自然是反思過去和現在的時候,我想感謝該專案的其他成員以及 Spring.NET 社群的所有貢獻和支持。 我期待著美好的 2008 年!

Spring.NET 1.1 的功能集非常廣泛。用於依賴注入的 IoC 容器、AOP、ASP.NET framework、宣告式交易管理和更多。但是,您可以獲得的最大收益,以改善程式碼的結構和可測試性,就是將依賴注入和 AOP 添加到您眾所周知的開發人員工具箱中。 依賴注入是更基礎的…

獲取 Spring 電子報

訂閱 Spring 電子報,保持聯繫

訂閱

領先一步

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

了解更多

獲取支援

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

了解更多

即將到來的活動

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

查看全部