1. 開發(fā)環(huán)境的準備
現(xiàn)在的eclipse都已經(jīng)包含了Equinox,無需單獨下載。
2. 開發(fā)OSGi的HelloWorld應用程序
在這一節(jié),我們將開發(fā)一個OSGi bundle,演示如何利用Equinox進行OSGi bundle的開發(fā)、運行及調(diào)試,為之后的示例做準備。
首先,新建一個Plug-in工程,如下圖所示:

下一步,注意選擇目標平臺,默認為Eclipse version *,將其改成Equinox,如下圖所示:
之后按默認下一步即可,到最后一步時,無需根據(jù)模板創(chuàng)建工程,去掉默認的勾,如下圖:
點擊完成,創(chuàng)建的工程目錄如下圖所示:
從圖中,可以看到,eclipse為工程自動生成了一個Activator類,如下所示:
package helloworld;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class Activator implements BundleActivator
{

/**//*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/

public void start(BundleContext context) throws Exception
{
System.out.println("Hello World!");
}

/**//*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/

public void stop(BundleContext context) throws Exception
{
}
}
有過eclipse插件開發(fā)經(jīng)驗的人應該很快就能明白,這就是該工程——實際上就是上一篇文章中所稱的bundle在Equinox平臺中的啟動入口,相當于我們的熟悉的main函數(shù),如果將該bundle運行到Equinox中,首先進入該bundle的是Activator的start方法,你可以將相關(guān)的服務、資源在該方法內(nèi)完成向bundleContext的注冊——文章后面會具體講到相關(guān)內(nèi)容。在運行期,如果想要該bundle停止運行,Equinox平臺將調(diào)用Activator的stop方法,你可以在該方法內(nèi)完成資源的注銷等工作。
下面我們將要完成首次的Equinox運行,將向大家展現(xiàn)bundle到底是如何運行起來的。為helloworld選擇運行方式,如下圖所示:

彈出如下對話框:
在彈出的對話框中,新建一個OSGi Framework運行環(huán)境(雙擊OSGi Framework即可,這里為其取名Equinox),選中helloworld(1.0.0),然后點擊右邊的Add Required Bundles按鈕,eclipse將自動選中運行helloworld的依賴bundle,如果有必要,可以點擊右下的Validate Bundles驗證按鈕,驗證程序正常運行所需的bundle是否都被選中,最后點擊運行,回到控制臺:
osgi> Hello World!
可以看到,之前在Activator的start方法中的輸出語句已經(jīng)被輸出到控制臺,我們可以通過命令ss查看Equinox的運行情況,可以看到一共運行了兩個bundle,如下:
ss
Framework is launched.
id State Bundle
0 ACTIVE org.eclipse.osgi_3.4.3.R34x_v20081215-1030
1 ACTIVE helloworld_1.0.0
還記得之前講到過的bundle的幾種狀態(tài)吧?helloworld已經(jīng)運行起來了。
那么Equinox具體支持哪些命令呢?下表列出了主要的一些命令,如需查看更詳細的命令清單,則可以在控制臺鍵入help。
類別
|
命令
|
含義
|
控制框架
|
launch
|
啟動框架
|
shutdown
|
停止框架
|
close
|
關(guān)閉、退出框架
|
exit
|
立即退出,相當于 System.exit
|
init
|
卸載所有 bundle(前提是已經(jīng) shutdown)
|
setprop
|
設(shè)置屬性,在運行時進行
|
控制 bundle
|
install
|
安裝
|
uninstall
|
卸載
|
start
|
啟動
|
stop
|
停止
|
refresh
|
刷新
|
update
|
更新
|
展示狀態(tài)
|
status
|
展示安裝的 bundle 和注冊的服務
|
ss
|
展示所有 bundle 的簡單狀態(tài)
|
services
|
展示注冊服務的詳細信息
|
packages
|
展示導入、導出包的狀態(tài)
|
bundles
|
展示所有已經(jīng)安裝的 bundles 的狀態(tài)
|
headers
|
展示 bundles 的頭信息,即 MANIFEST.MF 中的內(nèi)容
|
log
|
展示 LOG 入口信息
|
其它
|
exec
|
在另外一個進程中執(zhí)行一個命令(阻塞狀態(tài))
|
fork
|
和 EXEC 不同的是不會引起阻塞
|
gc
|
促使垃圾回收
|
getprop
|
得到屬性,或者某個屬性
|
控制啟動級別
|
sl
|
得到某個 bundle 或者整個框架的 start level 信息
|
setfwsl
|
設(shè)置框架的 start level
|
setbsl
|
設(shè)置 bundle 的 start level
|
setibsl
|
設(shè)置初始化 bundle 的 start level
|
至此,我們已經(jīng)成功的演示了helloworld,初步了解了OSGi的bundle是如何開發(fā)并運行的。
posted on 2010-03-28 16:58
Dreava 閱讀(2204)
評論(0) 編輯 收藏 所屬分類:
OSGi