OSGI服務(wù)層探究
前段時(shí)間公司產(chǎn)品在apache的孵化項(xiàng)目tuscany的基礎(chǔ)上,做了一些擴(kuò)展了自己的一些實(shí)現(xiàn)。在項(xiàng)目中發(fā)現(xiàn)模塊的動(dòng)態(tài)更新帶來(lái)的模型之間的依賴關(guān)系處理比較復(fù)雜;沒(méi)有一套好的機(jī)智處理這種模塊動(dòng)態(tài)的更新,部署,以及解決他們之間的關(guān)系。
Osgi的框架很好的解決了上面的問(wèn)題,更夠搭建動(dòng)態(tài)化的系統(tǒng)可以說(shuō)是OSGI在sca的部署策略上的一種很好的參考實(shí)現(xiàn)。
OSGI規(guī)范中包括很多層,安全層,Module 層,生命周期層,服務(wù)層等等
這里主要對(duì)服務(wù)層(service layer)做一下介紹
服務(wù)層定義了一個(gè)動(dòng)態(tài)的協(xié)作模型,服務(wù)模型是定義在模塊(bundle)的基礎(chǔ)上的。
Bundle可以動(dòng)態(tài)的發(fā)布,查找service,并且當(dāng)該服務(wù)的狀態(tài)(生命周期)改變時(shí),更夠發(fā)出通知,這樣所有對(duì)該service關(guān)心的bundle,可以通過(guò)注冊(cè)監(jiān)聽(tīng)器的方式,接收消息,做后續(xù)的處理。
下面是它的模型
下面簡(jiǎn)單的加以說(shuō)明:
在osgi平臺(tái)中,各個(gè)模塊(bundle)可以提供服務(wù),并且可以引用其他的服務(wù),而這些服務(wù)都有統(tǒng)一的管理注冊(cè)中心(ServiceRegistry),該注冊(cè)中心由框架提供,運(yùn)行在框架之上的。
這樣的一些服務(wù)都是歸bundle所有并且運(yùn)行在它的bundle上的;所以可以通過(guò)bundle的bundlecontext把這些服務(wù)注冊(cè)在ServiceRegistry中,以便能夠由框架統(tǒng)一管理,并且能夠被其他的bundle所引用。這樣當(dāng)bundle的生命周期發(fā)生變化的時(shí)候,如stop,那么就能夠通過(guò)框架,來(lái)自動(dòng)的卸載提供的服務(wù),并且解決好bundle之間的服務(wù)引用依賴關(guān)系。
服務(wù)對(duì)象serviceobject,類似與pojo,調(diào)用它的接口,可以提供服務(wù)。這樣的一個(gè)serviceobject可以實(shí)現(xiàn)ServiceFactory接口,也可以實(shí)現(xiàn)其他的接口。如果實(shí)現(xiàn)了ServiceFactory,那么對(duì)于每一個(gè)bundle對(duì)服務(wù)的引用來(lái)說(shuō),都是一個(gè)通過(guò)ServiceFactory創(chuàng)建新的實(shí)例。否則所引用的服務(wù)對(duì)象就是通過(guò)bundlecontext注冊(cè)的綁定在ServiceRegistration 的原始對(duì)象。
ServiceReference類似于服務(wù)對(duì)象的句柄,通過(guò)它可以查找到真實(shí)的服務(wù)對(duì)象。其實(shí)它只是包含了對(duì)對(duì)象的描述,如該服務(wù)是位于哪一個(gè)bundle上的,該服務(wù)的bundle是否已經(jīng)停 止,以及服務(wù)的描述等等。
對(duì)于引用該服務(wù)的bundle來(lái)說(shuō),只是保存的service的句柄,真實(shí)的service對(duì)象可以不存在,這樣的模式被廣泛應(yīng)用在動(dòng)態(tài)的環(huán)境中。
ServiceListener可以通過(guò)BundleContext注冊(cè)在框價(jià)ServiceRegistry中,這樣在服務(wù)的生命周期改變時(shí)候,可以接收消息,每個(gè)bundle可以在自己的lisitener里,做出相應(yīng)的處理,如釋放響應(yīng)的資源等等。
BundleContext提供了注冊(cè)服務(wù),注冊(cè)服務(wù),框架,bundle的監(jiān)聽(tīng)器,查找服務(wù)的統(tǒng)一入口。
暫時(shí)寫這么多,待敘
posted on 2007-08-14 11:44 阿不 閱讀(265) 評(píng)論(0) 編輯 收藏 所屬分類: OSGI