[插件化開發] 1. 初識OSGI

初識 OSGI

背景

當前product是以solution的方式進行售賣,可是隨着公司業務規模的快速誇張,隨之而來的是新客戶的產品開發,老客戶的產品維護,升級以及修改bug,團隊的效能明顯降低,爲了解決此類問題,必須站在公司戰略的統一高度來重構系統。php

榮幸的是,本人在此時加入團隊並負責系統架構的升級與重構工做。由於公司在全世界都有客戶,並且客戶又來自於各行各業,帶來的問題就是如何抽離公共業務的同時,又能不影響客戶的定製化需求開發?產品團隊專一於系統的核心邏輯開發,而一些定製化需求交付給global team 去開發?html

選型

技術沒有銀彈,目前沒有徹底肯定要使用OSGI的方式來實現,由於本人以前使用Spring Cloud & Spring Cloud Alibaba各實現了一種demo, 固然也能夠實現咱們的服務化,高可用以及動態擴展。可是在解決插件定製化這塊,相對來講仍是不太熟悉,而後OSGI進入眼簾了。shell

OSGI 簡介

OSGIOpen Service Gateway Initiative(開發服務網關協議)。apache

  • 指維護OSGI規範的官方聯盟架構

    OSGi Alliance是一個由Sun Microsystems、IBM、愛立信等於1999年3月成立的開放的標準化組織,最初名爲Connected Alliance。框架

  • 官方聯盟維護的基於JAVA語言的服務規範eclipse

    該規範和核心部分是一個框架,其中定義了應用程序的生命週期模式和服務註冊。基於這個框架定義了大量的OSGi服務:日誌、配置管理、偏好,HTTP(運行servlet)、XML分析、設備訪問、軟件包管理、許可管理、星級、用戶管理、IO鏈接、連線管理、Jini和UPnP。ide

osgi.org 官方描述:函數

The Dynamic Module System for JAVA工具

通俗講:使用OSGI實現的程序(Bundle)就是一個插件,能夠動態的安裝,卸載,啓動,中止等等而不須要啓動容器。

目前使用最廣的兩款OSGI 框架:

  • Apache Felix

    Apache Felix是Apache旗下的一個OSGi框架,項目自己很是成熟,已經被用到了不少其餘的項目中,例如Apache Servicemix。它自己提供的服務也是最全的,幾乎涵蓋了所有的OSGi 4.2的標準。除此以外還提供了一些非標準的功能,例如iPOJO。框架自己很是緊湊,你只須要3個包加一個shell就能夠運行了,不管是開發仍是Debug都很是簡便。除了Felix,還有兩個項目是和OSGi相關的。一個是Apache Felix Karaf,它自己是Felix的一個子項目,但他實際上是封裝了Felix提供更高一層的Runtime,例如提供了JAAS。另外一個是Apache Aries,目前還處於起步階段,它做爲Felix的補充,提供OSGi企業級規範,包括JPA、JDBC、JTA、JNDI等等。

  • Equinox

    Equinox是Eclipse旗下的OSGi框架,自己也被Eclipse採用,是Eclipse註明的PDE開發環境的底層。Equinox自己也是至關的全面的框架,提供的功能不比Felix少多少。可是它功能的分類就稍顯混亂,文檔和Sample也組織的不是很好。事實上至關Equinox仍是被當作開發Eclipse Plugin的應用較多,若是你要開發一個Web程序,你就會感到它自己的功能和文檔不夠全面。Equinox最大的優點在於它和Eclipse結合緊密,只要你安裝了PDE,你就已經有了Equinox,能夠方便的在Eclipse裏設置你開發的Bundle,啓動、部署等操做也異常簡單,並且有專門的Debug界面,你還能要求什麼呢?

    若是你想基於Eclipse開發,Equinox無疑是好選擇。但對於新手而言,有時候會搞混Eclipse Plugin與OSGi的關係。

Talk is cheap, Show me the code.

環境安裝

Eclipse 版本

因本人好幾年沒使用Eclipse, 所以帶上安裝再熟悉一下哈。。。

選擇企業版以後,下一步

點擊INSTALL,等待安裝完成。

建立項目
  • File => New => Project

  • 選擇Plug-in Development => Plug-in Project

  • 填寫項目屬性(OSGI framework 選擇 standard)

  • 點擊Next(關注Activator,這個會處理OSGI的start() 和 stop()時調用,至關於咱們的main函數)

  • 點擊Next(選擇Hello OSGI)

  • 點擊 Finish

配置環境
  • 選擇 Run => Run Configurations

  • 選擇OSGI Framework,右鍵點擊New Configration

  • 選擇Bundles(由於默認建立會選擇所有Target Platform,在Eclipse IDE 2019‑09版本下,直接啓動會報錯。因此取消全部的選項,只勾選如下就個必須的bundle就足夠。)

  • 點擊Validate Bundles 驗證咱們的配置項是否正確。

    若是顯示如上消息,恭喜你,能夠點擊Run啓動OSGI console 啦!!!

OSGI Console 啓動

IDEA 版本

IDEA也帶有OSGI 開發工具包,let's do it.

配置Framework

這裏我選擇的是Eclipse Equinox 4.13,download傳送門 ,點擊下載[equinox-SDK-4.13.zip],下載完成以後開始配置。

  • IDEA(version: ULTIMATE 2019.2) => File => Settings (搜索OSGI,以下圖)

  • 點擊 + 添加,選中上一步下載的SDK解壓目錄

  • 添加成功後,選擇OSGI 標籤,選擇OSGI framework 爲咱們配置的Equinox.

    import Bnd/Bndtools projects automatically 指的是將普通的jar包 打包 爲OSGI 可用的jar.

建立項目
  • 點擊File => New => Project, 選擇Java標籤下的OSGI

  • 選擇Use Library,點擊Create

    找到org.eclipse.osgi_3.15.0.v20190830-1434.jar,選中,效果以下,點擊下一步。

  • 填寫項目屬性

    點擊Finish。

    如上圖所示,IDEA 建立的不會幫助咱們生成Activator以及Manifest.mf文件。

OSGI Console 啓動
  • 點擊Run => Edit Configurations

  • 點擊 + ,選擇OSGI Bundles,添加核心bundles

  • 運行(ss 爲查看OSGI運行狀態命令)

Eclipse與IDEA開發OSGI,主要是manifast文件的生成過程存在比較大的差別。

至此,咱們使用兩種開發工具配置OSGI環境工做就已經完成了,下一節會開發一個基於實戰應用的示例。

相關文章
相關標籤/搜索