您的軟件已經就位,但您仍然需要一種更有效的方法來使您的技術用戶能夠擴展平台。
儘管 OSGi 為大多數 Java 開發人員所熟知,但將其集成到您的產品中似乎是一項艱鉅的任務。 對 OSGi 的精確工作缺乏明確性進一步混淆了前進的道路。
與他們想嘗試的任何東西相比,OSGi 對許多 Java 開發人員來說更像是試圖在廣闊的海洋中航行。
本文將使用簡單的程序向您介紹 OSGi Felix spring 教程,並通過它的優點和其他重要細節。
那麼什麼是 OSGi?
稱為 OSGi(開放服務網關倡議)的 Java 框架使創建和分發模塊和組件成為可能。
它強調功能封裝和鬆散耦合,這為開發人員提供了幾個優點,包括易於在源代碼之間轉移的模塊化功能和不需要無休止依賴的測試。
OSGi 是如何工作的?
Java 的動態組件系統由一組稱為 OSGi 的規範定義。 這些規範支持一種開發方法,其中應用程序由多個部分構建,然後打包成捆綁包。
這些組件使用本地和基於網絡的服務進行通信。 目標是使程序的核心代碼盡可能緊湊。 此代碼與多個組件之間的高度耦合是可能的。
應用程序的可重用構建元素稱為組件。 想想諸如電子商務網站的購物車或員工管理系統的工資單應用程序之類的功能。
組件可以使用 OSGi 向其他組件隱藏它們的實現,並且只通過服務向它們提供必要的數據。
這可以防止組件無意中更改它們不應訪問的數據並管理依賴項。
OSGi 應用程序中組件之間的所有連接都是通過理想世界中的服務建立的。 Java 包包含為服務指定的 API。
服務提供商和客戶之間的協作需要使用構成 API 的類和/或接口。
所有的 OSGi 組件都打包在包中,每個包都包含它們運行所需的資源。 Bundles 非常清楚它們需要從環境中得到什麼以及它們的能力。
優點
- OSGi 應用程序可以訪問外部包存儲庫。
- 該框架允許在模塊級別進行面向服務的設計。
- 除了標準化和更容易集成第三方庫之外,它還可以管理應用程序包的版本和依賴項。
- 應用程序更能適應不斷變化的需求,更便攜,並且可以更快地重新設計。
- A Web應用程序 由於框架與 Java EE 編程模型的集成,可以將其部署為一組具有動態生命週期的版本化 OSGi 包。
- 該框架不是作為應用程序的一部分安裝為第三方庫,而是以作為應用程序服務器運行時的一部分提供的標準化形式提供 Spring Framework 的聲明性組裝和簡化的單元測試。
- 對於由幾個具有動態生命週期的版本捆綁包組成的企業應用程序,該框架提供了隔離。
- 它包含一個集成的包存儲庫,可以存儲多個應用程序使用的共享通用包和版本化包,防止每個應用程序部署每個共享庫的單獨副本。
OSGi Felix 春季入門
獲取資源
通過從以下位置下載 Apache Karaf 的最新版本 本網站,我們可以開始我們的 OSGi 冒險了。
基於 Apache Felix(OSGi 規範的 Apache 實現),Apache Karaf 為基於 OSGi 的應用程序提供了一個平台。
Karaf 在 Felix 之上提供了各種有用的功能,可以幫助我們熟悉 OSGi,例如使我們能夠與平台通信的命令行界面。
捆綁包的入口點
應用程序必須先打包為 OSGi 包,然後才能在 OSGi 環境中運行。 此外,必須指定應用程序入口點; 它不是標準的 public static void main(String[] args) 函數。
所以讓我們從創建一個“你好世界” 基於 OSGi 的應用程序。
我們首先建立一個基本的 OSGi API 依賴:
OSGi 運行時將有權訪問依賴項,因此包不需要包含它。 因此,它被標記為已提供。
現在讓我們創建簡單的 HelloWorld 類:
充當捆綁包入口點的類必須實現 OSGi 提供的 BundleActivator 接口。
當包含此類的包啟動時,OSGi 平台調用 start() 函數。 另一方面,在捆綁包停止前不久,調用了函數 stop()。
我們不要忘記每個捆綁軟件只能有一個 BundleActivator。 兩種方式都可以使用給定的 BundleContext 對象與 OSGi 運行時通信。
創建捆綁包
通過進行必要的更改,使 pom.xml 成為真正的 OSGi 包。
我們必須首先明確表示我們的目標是生產一個捆綁包。
然後,我們使用 maven-bundle-plugin 將 HelloWorld 類打包為 OSGi 包,由 Apache Felix 社區提供:
我們希望包含在包的清單文件中的 OSGi 標頭的值在說明部分中指定。
Bundle-Activator 確實是用於啟動和停止捆綁的 BundleActivator 解決方案的正確限定名稱。 它與剛剛創建的類兼容。
雖然它不是 OSGi 標頭,但 Private-Package 標頭指示插件將包添加到包中,但不能讓其他插件訪問它。 應該使用 mvn install 命令來創建包。
安裝和運行捆綁包
讓我們通過運行以下命令開始 Karaf:
其中“KARAF HOME”是指設置 Karaf 的文件夾。 當出現 Karaf 控制台提示時,我們可以使用以下命令安裝 bundle:
使用本地 Maven 存儲庫是告訴 Karaf 加載包的方式。
返回捆綁包的數字 ID,Karaf 將其寫出。 此 ID 可能會有所不同,具體取決於之前安裝的捆綁包數量。 捆綁包現在已經成功安裝,啟動它的命令如下:
啟動包的那一刻,會顯示“Hello World by Jay”。 我們現在可以使用以下命令停止並刪除捆綁包:
控制台顯示“Jay 的再見世界”。
結論
通過使用 OSGi,開發人員可以輕鬆地向現有 Web 應用程序添加新功能,同時保持其安全並與主程序的其他組件隔離。
我們在這篇文章中了解了 OSGi,包括它的功能、優勢和簡單的程序。 將 OSGi 合併到您自己的應用程序中並不困難。
編碼愉快!
發表評論