基於Equinox的OSGI4的單獨部署與基本應用

    大家如果關注eclipse的話應該會注意到,目前eclipse的底層插件體系架構已經改成了OSGI的插件結構。OSGI就是“開放服務網關協議”,OSGI官方稱是面向服務的系統架構,也可以理解爲面向組件的架構,系統中每一個組件或者一個模塊稱之爲bundle,這也是OSGI裏的概念模型。更多的OSGI的介紹,大家可以Google一下或baidu一下。

 

    本人接觸OSGI時間不長,沒有過多的深入,也是初涉OSGI,不過也是非常看好目前這一架構的,相信應該是後期軟件開發的潮流吧。今天主要是記錄下如何部署一個單獨的OSGI系統,一來便於自己以後速查,二來也希望可以給初學者一個Best Practice。

 

    我這裏以eclipse3.4的plugin目錄下的org.eclipse.osgi_3.4.0.v20080605-1900.jar爲例,其實這個jar包就是OSGI4的完整實現,eclipse官方稱爲Equinox,我們將其複製並改名爲equinox.jar,呵呵。或者你也可以到equinox的官方網站下載最新的jar包。隨後我們在同目錄下建立一個bat文件,如下:

 

java -jar equinox.jar -console -Declipse.ignoreApp=true -Dosgi.noShutdown=true

 

    保存然後雙擊該bat文件,會出現:osgi>的提示符,這表示OSGI已經啓動成功了。接着輸入:

 

osgi>ss

 

    會出現如下內容:


Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900

 

    我們可以看到有一個bundle已經啓動了。然後我們就可以很方便的部署和卸載(完全動態)一個個bundle了。我們隨便從eclipse的plugin目錄中copy一個bundle到該目錄,比如org.eclipse.osgi.services_3.1.200.v20071203.jar,然後在OSGI的控制模式下輸入如下命令:

 

osgi>install reference:file:org.eclipse.osgi.services_3.1.200.v20071203.jar

 

    會看到系統提示如下:

 

Bundle id is 1

 

    表示OSGI框架自動爲該bundle分配了一個唯一的ID,然後再輸入ss命令查看如下:

 

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
1       INSTALLED   org.eclipse.osgi.services_3.1.200.v20071203

 

    結果列表中的State表示bundle的狀態,我們可以看到剛剛部署的services爲INSTALLED,表示該bundle處於已經被安裝的狀態,但是還沒有啓動,接着我們來啓動該bundle。

 

osgi>start 1

 

    使用start命令來啓動剛安裝的bundle,其後的1參數表示該bundle的唯一ID,如果沒有出現錯誤(因爲啓動bundle時OSGI框架會校驗該bundle的相關信息),接着輸入ss再次查看,會出現如下結果:

 

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
1       ACTIVE      org.eclipse.osgi.services_3.1.200.v20071203

 

    這樣,我們的bundle就已經正式運行了。同樣,我們也可以動態的停止或卸載某一個bundle,使用stop命令停止bundle,如下:

 

osgi>stop 1

 

    然後再ss查看結果:

 

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
1       RESOLVED    org.eclipse.osgi.services_3.1.200.v20071203

 

    這時我們看到剛剛的bundle處於RESOLVED狀態,該狀態表示bundle已經處於被解析完畢狀態,可以啓動或已經停止了。被停止的bundle是處於非服務狀態的,然後我們也可以卸載該bundle,卸載後該bundle將不能夠再使用和管理了,必須重新安裝。如下:

 

osgi>uninstall 1

 

    然後,再ss查看如下:

 

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900

 

    發現已經沒有了剛纔的bundle,即完全從OSGI中被移除了,除非我們重新安裝,重新安裝後,其ID將會被重新分配,而不是之前的1了,比如我們再次安裝。

 

osgi> install reference:file:org.eclipse.osgi.services_3.1.200.v20071203.jar

 

    然後再ss查看狀態如下:

 

Framework is launched.

id      State       Bundle
0       ACTIVE      org.eclipse.osgi_3.4.0.v20080605-1900
2       INSTALLED   org.eclipse.osgi.services_3.1.200.v20071203

 

    可以看到其ID已經變成了2,而不是之前的1了。

 

    這基本上就是OSGI的bundle的基本管理命令,更多的命令可以輸入help來獲取幫助。當然,看懂這必須得熟悉OSGI框架的基本結構和應用模式。希望以後也可以和大家一起探討OSGI的開發和部署等各個方面:-)

發佈了2 篇原創文章 · 獲贊 0 · 訪問量 3409
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章