1 Bundle 是OSGI中的模塊,其生命週期是被OSGI框架所管理。形式上講是一個jar包。META-INF目錄下的 MANIFEST.MF文件中是對Bundle的特定描述。
Budle 的狀態:INSTALLED、RESOLVED、UNINSTALLED、STARTING、ACTIVE、STOPPING。
Bundle 是服務(Service) 和 組件 (component)的載體。
每個Bundle都有自己獨立於其他Bundle 的 ClassLoader,正因爲如此,各個Bundle內部的類是隔離的。
2 Bundle 直接交互的實現方式:
a:通過Package 的 Export 和 Imoprt 進行。提供類的Bundle對外暴露(Exprot)自己的一個或者多個Package,或者導入(Import)一個或者多個Package
b:通過Service的方式進行。一個Bundle作爲Servivce的提供方,對外提供Service,使用者可以找到並且使用其他Bundle提供的Service。
3 一個OSGI Service 就是註冊到OSGI框架中的一個Java對象。在註冊的時候可以Service的屬性。在獲取時可以根據屬性過濾。提供/使用Service的兩種方式:a 通過BundleContext(Bundle上下文)。b:通過DeclarativeService實現。
4 面向服務的組件模型(SOCM)。Component 是服務(Service)的載體,它對外提供服務或者使用外部提供的服務。任何一個普通的java對象都可以通過配置文件中的定義而變爲一個Component,生命週期是由OSGI框架管理。
5 Declarative Service(DS) 是 OSGI Core Framework 的一個標準服務。將服務的方式由編碼 變爲 配置。更加靈活
沒有DS之前,採用的是Module + Service 的方式,需要通過 Bundle 的 BundleActivator 註冊服務,通過BundleContext來獲取服務。而DS通過在Bundle中定義Component 來通過配置獲取、發佈服務,實現Component + Service 方式進行系統開發
6 引用org.eclipse.equinox.ds_*.jar時,必須引用org.eclipse.equinox.util_*.jar 否則不能正常啓動