研究OSGI也有一段時間了,總的感覺網(wǎng)上相關(guān)資料還是太少(有參考價值的,因為大部分都是拷貝的同一篇文章),到目前為止對OSGI算是有了一定的了解,我把這段時間來找到的資料和個人體會總結(jié)一下和大家分享,為開源盡一點綿薄之力.
1.classic框架: 設(shè)計時依賴
OSGI框架: 運行時依賴
2.OSGI柄承職責(zé)單一的原則,面向服務(wù)的組件模型設(shè)計,強制面向接口編程,支持熱插拔.
OSGI提供一個強大的,嚴格規(guī)范的類加載模型,為每個模塊提供各自ClassLoader提供動態(tài)協(xié)作模型(服務(wù)注冊),模塊隔離,版本加載,屬性過濾. 即使Bundle已經(jīng)stop,其Export的Packages依然可用.
Bundle ClassLoader:控制模塊內(nèi)業(yè)務(wù)類加載
System ClassLoader: 控制Bundle的生命周期
SOCM: 面向服務(wù)組件模型
3.OSGI框架的兩個設(shè)計方向:
(1).將WEB容器內(nèi)嵌到OSGI環(huán)境中;
(2).將OSGI以WAR的方式發(fā)布到獨立的WEB容器中.
4.Bundle的生命周期(LifeCycle):
安裝, 啟動, 更新, 停止, 卸載. (其實一個Bundle就是一個含有元文件的jar)
5.OSGI的兩種監(jiān)聽實現(xiàn)方式:
(1).BundelContext:自已主動監(jiān)聽事件的變化;
(2).DS(Declarative Service):服務(wù)動態(tài)變化時主動調(diào)用.
資源不主動調(diào)用容器來實現(xiàn)自身生命周期的管理,這是我們所希望的,所以,DS更可取.
6.Bundle生成工具:
Bnd.jar可以根據(jù)傳統(tǒng)工程的虛擬路徑生成符合R4的bundle,下邊是BluyDavy關(guān)于該工具的介紹:
http://www.blogjava.net/BlueDavy/archive/2007/07/27/132809.html
7.Bundle的WEB操作界面:TPF(腳手架)
當TPF的Bundle啟動后,完全接管Equniox控制的其它應(yīng)用Bundle生命周期,可以監(jiān)聽遠程的TPF,它是 一 個基于Eclipse-Equniox的插件框架:
http://www.blogjava.net/BlueDavy/archive/2006/08/18/64440.html
8.Bundle的默認WEB根目錄:MODULE-INF
如:MODULE-INF/WEB-INF/page/index.jsp
Spring-OSGI默認配置文件路徑:META-INF/spring,默認這個文件夾下的配置文件都會被加載,當然也可以更改路徑;
9.Equniox把以java.開頭的類包交給parent ClassLoader去加載,意味著沒有必要在系統(tǒng)中提供對外export java開頭的package.
10.我不想把別人的代碼再弄來貼一遍,以下列出我所收集的OSGI參考實例及資料:
(1).Spring DM server開發(fā)實例(日文)
(2)Spring MVC-OSGI WEB開發(fā)實例
(7)闖蕩在移動互聯(lián)網(wǎng)的世界中的博客
(9)羅明的博客
(11)OpenCore:基于OSGi開發(fā)純插件體系結(jié)構(gòu)的WEB應(yīng)用程序