本文為《你好,OSGi》系列第二部分。承接 OSGi 基礎概念,詳細示範簡單 OSGi Bundle:Hello World 開發全流程。
OSGi 軟體以 Bundle 形式發布:由 Java 類別與資源構成,可提供服務、導入套件、為裝置提供功能。Eclipse 提供優秀支援:建立向導、內建 Equinox 容器執行除錯。每個 Eclipse 外掛本質皆為 OSGi Bundle(含 Eclipse 專用代碼)。
com.javaworld.sample.HelloWorldEclipse 產生兩檔案:Activator.java、MANIFEST.MF。
package com.javaworld.sample.helloworld;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out.println("Helloworld");
}
public void stop(BundleContext context) throws Exception {
System.out.println("GoodbyeWorld");
}
}
實作 BundleActivator 介面的類別需符合:
Class.newInstance() 建立實例)start():容器啟動 Bundle 時調用,執行資源初始化(如取得資料庫連線),參數 BundleContext 用於與框架通訊;拋出異常則標記為 stopped 狀態stop():容器關閉 Bundle 時調用,執行資源清理(如釋放連線)完成後在 MANIFEST.MF 設定 Bundle-Activator 指定監聽類別。
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: HelloWorld Plug-in
Bundle-SymbolicName: com.javaworld.sample.HelloWorld
Bundle-Version: 1.0.0
Bundle-Activator: com.javaworld.sample.helloworld.Activator
Bundle-Vendor: JavaWORLD
Bundle-Localization: plugin
Import-Package: org.osgi.framework;version="1.3.0"
屬性說明:
使用 Eclipse 內建 Equinox 容器:
HelloWorld Bundlecom.javaworld.sample.HelloWorld,Target Platform 確保 org.eclipse.osgi 勾選(圖 1)
圖 1. HelloWorld Bundle 運行配置
HelloWorld(實為開啟 OSGi 主控台)取得焦點按 Enter 顯示 osgi> 提示符(Eclipse 3.3 需在 Arguments 標籤 Program Arguments 加入 -console,圖 2)。

圖 2. OSGi 主控台與 HelloWorld Activator
核心指令(OSGi 規範標準,適用所有容器):
ss:列出所有已安裝 Bundle 狀態(ID、名稱、狀態)start <bundleid>:啟動 Bundlestop <bundleid>:停止 Bundleupdate <bundleid>:用新 JAR 更新 Bundleinstall <bundleid>:安裝新 Bundleuninstall <bundleid>:卸載 Bundle