yangbutao

           

          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ō)是OSGIsca的部署策略上的一種很好的參考實(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ò)bundlebundlecontext把這些服務(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


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 孟津县| 易门县| 陈巴尔虎旗| 常山县| 大悟县| 寻甸| 和顺县| 靖西县| 台中县| 明水县| 潢川县| 保亭| 香港 | 恩平市| 新乡县| 阳东县| 大荔县| 华亭县| 云林县| 年辖:市辖区| 阿拉善盟| 白山市| 嘉峪关市| 从化市| 桐乡市| 望都县| 高台县| 祁阳县| 凌源市| 林周县| 洪泽县| 伊宁市| 连州市| 图片| 黄浦区| 邯郸市| 济源市| 秦安县| 沿河| 南开区| 托克托县|