OSGi誕生初期,其目的主要是能夠靈活方便并遠(yuǎn)程管理互聯(lián)的網(wǎng)絡(luò)嵌入設(shè)備,OSGi聯(lián)盟上對于OSGi service platform有這樣一句解釋:The OSGi service platform delivers an open, common architecture for service providers, developers, software vendors, gateway operators and equipment vendors to develop, deploy and manage services in a coordinated fashion.(OSGi service platform是一個開放并且提供通用接口標(biāo)準(zhǔn)的體系框架,基于這個體系框架,服務(wù)提供商,程序開發(fā)人員,軟件提供商,服務(wù)網(wǎng)管運營商,設(shè)備提供商能夠協(xié)調(diào)地聯(lián)合起來開發(fā),部署以及管理向用戶提供的各種服務(wù))。隨著OSGi的發(fā)展,逐漸被引入到企業(yè)應(yīng)用領(lǐng)域。
目前,OSGi規(guī)范的最新版本為R4.2,有關(guān)該規(guī)范的詳細(xì)情況請閱讀OSGi實戰(zhàn)的第7節(jié)——深入OSGi。OSGi框架主要分為四部分:運行環(huán)境(executionenvironment)、模塊(Modules)、生命周期管理(Life Cycle)、服務(wù)注冊(Service Registry)。運行在OSGi環(huán)境中的是一個個的Bundle,也就是Modules的具體實現(xiàn)。
對于每個bundle,都有各自的ClassLoader,在這一點上和傳統(tǒng)的Web應(yīng)用有相似之處,在傳統(tǒng)的Web應(yīng)用開發(fā)完成之后,都會將其部署在Tomcat、Jboss等服務(wù)器上,這些Web應(yīng)用都有著各自的ClassLoader環(huán)境,而兩者之間的區(qū)別在于,傳統(tǒng)的Web應(yīng)用無法做到資源的共享,因為它們是完全獨立、隔離的。OSGi框架為bundle之間的協(xié)作提供了底層支持,通過在bundle的MANIFEST.MF文件中Import-Package、Export-Package等項,bundle之間就能相互共享資源及服務(wù),在以后的博文中,我將給出一個具體的示例。
由于OSGi具有良好的模塊化結(jié)構(gòu),我個人認(rèn)為這將為將來的軟件開發(fā)方式帶來很大的沖擊,將更進一步推進模塊化開發(fā)。目前Web應(yīng)用的開發(fā)一般采用SSH框架,將整個應(yīng)用大致分為Web(負(fù)責(zé)前臺展現(xiàn))、Service(負(fù)責(zé)業(yè)務(wù)邏輯處理)、DAO(負(fù)責(zé)數(shù)據(jù)持久化)、Domain(全局實體類)幾個模塊,而發(fā)布的時候,將被一起打成WAR包,部署至服務(wù)器上。如果采取bundle的形式,每個模塊可以做為獨立的bundle進行開發(fā)和部署,bundle之間的協(xié)作可以通過上述的方式進行,而這樣帶來的好處就是,一旦需要對某個模塊進行更改,在保證依賴接口不變的前提下,就可以單獨更改相應(yīng)的bundle,再進行熱部署即可,這樣一來,好處是顯而易見的,有效的分離了各個模塊,減少了維護成本。
由于采用bundle的形式,也增強了模塊的復(fù)用性。這也是得益于OSGi良好的模塊化方式。
另外一個很重要的點就是OSGi具備熱拔插特性,bundle的安裝、啟動、停止、卸載都可以在運行時指定,并且可以隨時更改。這樣一來,我們就可以做到無需重啟整個應(yīng)用,而只對需要更改的部分進行升級或打補丁即可。Bundl的狀態(tài)圖轉(zhuǎn)換如下圖所示:
圖 1 OSGi bundle狀態(tài)轉(zhuǎn)換圖
以上將OSGi的一些基本的,但也是很重要的東西大概介紹了一下,在以后的博文中逐步深入吧。以上都是關(guān)于OSGi原理性的東西,那么實現(xiàn)該規(guī)范的有哪些產(chǎn)品呢?最有名的應(yīng)該要數(shù)Eclipse的Equinox框架了,在網(wǎng)上查資料見有人說過,Eclipse3.0的那一次升級把自身的構(gòu)架做了一次非常大的調(diào)整,其主要原因就是采用了OSGi框架,更好的支持了Eclipse的插件體系。另外還有Felix、knopflerfish等。
不過話說回來,盡管OSGi有很多好處,但是現(xiàn)在主要還是應(yīng)用在服務(wù)器端,如現(xiàn)在的應(yīng)用服務(wù)器基本上都采用OSGi的框架,而真正的應(yīng)用市場仍處理起步階段,這和OSGi的生態(tài)環(huán)境還不成熟,可喜的是Spring推出了其Spring DM和SpringSource DM Server,前者能夠很方便發(fā)布和引用服務(wù),并且與Spring Framework平臺相融合,將OSGi的bundle context與Spring applicationContext融合在一起,大大方便了OSGi的應(yīng)用。后者是OSGi bundle的運行環(huán)境,是一個將Equinox和Tomcat融合在一起的服務(wù)器。在以后的博文中將詳細(xì)介紹這些內(nèi)容。