OSGi.NET

OSGi.NET是OSGi R4.2規範移植到.NET平台的實現,是一個動態模組化框架的規範。OSGi.NET規範定義了面向組件、面向服務的編程方法。

基本介紹

  • 外文名:OSGI.NET
  • 含義:國際IT巨頭組成的OSGi聯盟組織
  • 含義:OSGi服務平台
  • 作用:解決軟體復用問題等
  • 功能:模組化與外掛程式化、面向服務架構
  • 適用:控制台、Windows服務等
平台簡介,功能,外掛程式框架原理,外掛程式運行時,面向服務,外掛程式擴展,片段外掛程式,規範原理,

平台簡介

什麼是OSGi.NET
OSGi全稱為Open Service Gateway Initiative,它一方面指由IBM、Oracle、BEA、SAP等國際IT巨頭組成的OSGi聯盟組織;另一方面指該組織制定的一個基於Java語言的服務規範——OSGi服務平台。
基於OSGi.NET的外掛程式框架提供了模組化與外掛程式化、面向服務架構和模組擴展三大功能,適用於控制台、WinForm、Windows服務、WPF、ASP.NET和移動平台等任意.NET套用環境。

功能

為什麼使用OSGi.NET
OSGi.NET為企業解決以下問題:
(1)解決軟體復用問題。在OSGi.NET規範里,外掛程式具有熱插拔、物理隔離和動態特性,完全重用。
(2)解決團隊協作問題。基於OSGi.NET框架,一個軟體一般可以按照功能和抽象層次,劃分為界面框架外掛程式、通用服務外掛程式和業務功能外掛程式,團隊有詳細的分工和不同的關注點。開發業務功能的團隊可以僅關注於實際的業務邏輯,並且多個團隊可以並行、獨立開發,最終快速組裝。
(3)解決軟體可維護性問題。基於OSGi.NET框架,組件是互相隔離,並且其依賴是通過可管理的服務來實現的,依賴粒度小。不同的組件可以有不同的版本,獨立開發、部署和測試。對組件的更改不會影響到其他組件的行為。
(4)快速回響市場變化。OSGi.NET框架實現了一個微核心,使得我們可以根據用戶需求,快速定製一個組件,然後進行快速發布。
(5)易管理、易部署、易更新。OSGi.NET的外掛程式具備物理隔離、熱插拔和動態,使持續部署、更新變為可能,並且讓您可以非常方便的管理核心。
(6)開放性。OSGi.NET是一個開放的平台,在此構建的應用程式,天生就具備了開放性。你可以通過服務向開發者提供API,通過擴展點向開發者提供功能擴展,並且可以構建私有的外掛程式倉庫。

外掛程式框架原理

外掛程式運行時

OSGi.NET
在OSGi.NET外掛程式框架中,外掛程式即Bundle,它具備物理隔離、熱插拔和動態特性。每一個外掛程式都是完全可復用的,可以被動態的安裝、啟動、停止、卸載或更新。
外掛程式運行時即BundleRuntime,則是外掛程式的運行容器,它負責從外掛程式目錄中載入和啟動外掛程式。

面向服務

在OSGi.NET外掛程式框架中,外掛程式具備高內聚、低耦合特性,也就是說外掛程式間耦合度非常低。服務即Service,是外掛程式通訊的方式。在這裡,“服務=接口 + 實現”。接口是服務的契約,服務提供商實現了服務的接口並將服務註冊到服務匯流排,服務消費者則通過服務契約從服務匯流排搜尋服務並綁定使用。這裡,服務是動態,可以被動態註冊、卸載和更新,一個服務契約也可能有多個服務實現。
OSGi.NET

外掛程式擴展

在OSGi.NET外掛程式框架,外掛程式具備可擴展性,可以在不變更外掛程式代碼情況下,更改或者擴展外掛程式的行為。這個擴展機制是通過一對基於XML格式的“擴展點 + 擴展”來實現的。一個外掛程式可以通過定義“擴展點”來實現可擴展,而其它外掛程式則通過定義對應的“擴展”來註冊/更新功能。擴展/擴展點在外掛程式啟動時註冊到外掛程式運行時,相反,在卸載時,則從外掛程式運行時卸載。
OSGi.NET

片段外掛程式

在OSGi.NET,有一種特殊的外掛程式,稱為片段外掛程式,即Fragment Bundle。片段外掛程式相當於子外掛程式,其作用是為了擴充其它外掛程式的類型空間、擴展信息。除了片段外掛程式的外掛程式,都是宿主外掛程式(Host Bundle)。與宿主外掛程式不同的是,片段外掛程式不能被啟動、停止,沒有類載入器,不允許從片段外掛程式載入類型。當宿主外掛程式被啟動後,片段外掛程式會自動附加到宿主外掛程式,即將片段外掛程式的類型空間、擴展信息合併到宿主外掛程式。
OSGi.NET

規範原理

OSGi.NET體系結構如下所示,從功能層次上劃分為模組層、生命周期層、服務層、安全層、基礎服務層和輔助設計工具層。
OSGi.NET體系結構OSGi.NET體系結構
模組層定義了模組的結構、宿主模組和片段模組、模組的配置清單、模組類型依賴與解析、模組類型載入和模組本地化。模組層僅通過IBundlse向用戶暴露了LoadClass和LoadResource兩個方法,分別用於從模組載入一個類型和載入資源。基於UIOSP定義模組時,類載入必須使用這兩個方法來載入類型和資源。
生命周期層提供了模組生命周期狀態定義、狀態遷移以及狀態遷移相關的接口。它實現了模組的動態安裝、解析、啟動、停止和卸載操作。生命周期相關接口由IBundleContext和IBundle提供。IBundleContext提供了InstallBundle方法,用於在一個模組中動態安裝另一個模組。IBundle提供了Start、Stop、Uninstall生命周期操作方法,分別用於動態的啟動、停止和卸載當前模組。
服務層提供了面向服務支持。該層提供了一個服務匯流排,每一個用戶模組都可以向匯流排註冊服務和查詢與綁定需要的服務。註冊到服務匯流排的服務也是動態的,註冊服務的模組可以在必要的時候直接卸載。服務層相關的接口由IBundleContext提供,這些接口包括GetFirstOrDefaultService、GetService、AddService和RemoveService,分別用於獲取默認服務、獲取指定服務契約的所有服務、添加一個指定服務契約的服務和刪除指定服務契約的服務。
安全層提供了模組安全沙箱。它實現了對模組數字簽名以實現模組完整性、提供了基於代碼訪問安全的訪問許可權檢測以阻止模組對其它資源進行非法訪問和實現了模組間的隔離性以避免一個模組對其它模組產生影響。
基礎服務層提供了系統服務,包括服務匯流排管理服務、外掛程式管理服務、啟動級別服務、日誌服務、擴展點管理服務、Web服務包裝器服務等服務。
輔助設計工具提供了該框架需要的工具,包括模組配置管理工具、遠程管理工具、項目模板等。

相關詞條

熱門詞條

聯絡我們