<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    OSGi的CM介紹和問(wèn)題、模塊的耦合

    OSGi的CM就是Configuration Admin Service,是用于管理Bundle屬性、并在屬性發(fā)生變更時(shí)通知相應(yīng)的Service,可以看出,這是保持OSGi動(dòng)態(tài)性的很關(guān)鍵的一個(gè)服務(wù),畢竟配置屬性的修改是會(huì)發(fā)生的,象修改了Http的端口呀等,但又不希望修改這些屬性后需要重啟才能生效,那么CM是一個(gè)不錯(cuò)的選擇,使用CM時(shí)無(wú)需關(guān)心屬性具體怎么存儲(chǔ)這些問(wèn)題,而在屬性修改后CM也會(huì)自動(dòng)通知相關(guān)的service。
    通常在系統(tǒng)的屬性管理上,我們的需求通常是在一個(gè)統(tǒng)一的界面上對(duì)系統(tǒng)的相關(guān)屬性進(jìn)行統(tǒng)一的配置,保存后則希望能通知相應(yīng)的服務(wù),這里面的屬性自然有些是公用的,有些是某些模塊專用的,既然基于CM來(lái)實(shí)現(xiàn)這樣的需求,首先來(lái)看看基于CM需要怎么去做,這是基于CM的統(tǒng)一管理系統(tǒng)屬性的典型的序列圖:
    cm.PNG
    其中ConfigurationAdminService、ManagedService均為CM中定義的規(guī)范的服務(wù)接口,而ConfigManageAction就是用于實(shí)現(xiàn)統(tǒng)一管理屬性配置的web響應(yīng)接口了,根據(jù)上圖可以看出,通過(guò)調(diào)用ConfigurationAdminService的getConfiguration方法可以獲取到Configuration對(duì)象,通過(guò)這個(gè)對(duì)象可以獲取到配置的屬性集合,而通過(guò)Configuration對(duì)象的update方法就可以更新屬性了,ConfigurationAdminService在更新屬性時(shí)將異步的調(diào)用系統(tǒng)中對(duì)外提供了ManagedService的服務(wù)的update方法,該方法的參數(shù)即為更新的屬性的集合。
    首先要說(shuō)明下CM對(duì)于屬性是怎么進(jìn)行存儲(chǔ)的,CM對(duì)于屬性的存儲(chǔ)是根據(jù)服務(wù)注冊(cè)時(shí)提供的service.pid的值(必須是唯一的)以及Bundle Location(Bundle的地址)構(gòu)成key來(lái)存儲(chǔ)其屬性的,按照這樣的過(guò)程,在維護(hù)屬性時(shí)自然也要以這個(gè)為Key來(lái)進(jìn)行操作,同樣的,在通知屬性更新時(shí)CM也是根據(jù)這個(gè)key的值來(lái)決定的,但實(shí)現(xiàn)ManagedService的服務(wù)只能傳入service.pid這個(gè)值,Bundle Location的值CM將自動(dòng)的獲取該服務(wù)所屬的Bundle的Location,這看似設(shè)計(jì)的很好,但同時(shí)在應(yīng)用層面則帶來(lái)了一個(gè)問(wèn)題,后面將會(huì)講到。
    假設(shè)我們的需求是這樣的:
    1、A Bundle中的PortService的port屬性需要管理,BookService的bookcount屬性需要配置;
    2、B Bundle中的PortConfigService的port屬性需要管理,MenuService中的menucount屬性需要配置;
    3、其中A Bundle中的PortService所需的port和B Bundle中的PortConfigService所需的port屬性是相同的;
    4、屬性統(tǒng)一在C Bundle中通過(guò)提供web界面的管理方式來(lái)實(shí)現(xiàn),在屬性發(fā)生變化時(shí)要通知相應(yīng)Bundle的Service。
    那么根據(jù)上面對(duì)于CM的講解我們來(lái)實(shí)現(xiàn)這個(gè)需求:
    1、PortService、BookService、PortConfigService、MenuService均需實(shí)現(xiàn)ManagedService接口,ManagedService接口中只有一個(gè)方法update(Dictionary props),當(dāng)service關(guān)注的屬性被更新時(shí)CM將會(huì)自動(dòng)的通知,然后服務(wù)根據(jù)屬性自行的做出相應(yīng)的處理;
    2、PortService、BookService、PortConfigService、MenuService對(duì)外提供ManagedService接口,在注冊(cè)時(shí)提供service.pid屬性的值,這個(gè)值必須是唯一的,假設(shè)分別為a.port、a.bookservice、b.port、b.menuservice;
    3、實(shí)現(xiàn)ConfigManageAction,配置頁(yè)面上自然是只有port、bookcount和menucount三個(gè)屬性需要配置的了,由于CM是采用service.pid加上Bundle的Location來(lái)構(gòu)成key的,而在通知屬性更新上也是根據(jù)這個(gè)key來(lái)決定,那么這其實(shí)也就已經(jīng)意味著ConfigManageAction在管理這幾個(gè)屬性時(shí)必須帶上相應(yīng)的Bundle的Location了,這是不太合理的地方,首先要獲取Bundle的Location是比較麻煩的事,其次是這樣也就意味著ConfigManageAction是必須知道當(dāng)屬性變更時(shí)需要通知到哪些Bundle的,如果將來(lái)增加一個(gè)Bundle的服務(wù)需要監(jiān)聽(tīng)某已經(jīng)存在的屬性的話,就必須要修改ConfigManageAction的代碼,當(dāng)然,這和注冊(cè)的服務(wù)監(jiān)聽(tīng)的server.pid的屬性必須唯一也有關(guān),也就是說(shuō)CM其實(shí)只是一個(gè)基于Event的一對(duì)一的訂閱/發(fā)布模型,這就導(dǎo)致了在維護(hù)一個(gè)port這樣的公共屬性的時(shí)候竟然要在A Bundle的PortService和B Bundle的PortConfigService中各存一份,OSGi聯(lián)盟對(duì)于此的解釋是出于安全問(wèn)題的考慮,所以在CM的設(shè)計(jì)上采取了加上Bundle Location做為Key的原因。
    在這樣的情況下,也就導(dǎo)致了ConfigManageAction變得復(fù)雜了......
    CM在這塊設(shè)計(jì)上欠缺對(duì)于應(yīng)用級(jí)屬性(共享配置屬性)上的考慮絕對(duì)是有待商討的,現(xiàn)在只能是在各個(gè)Bundle中各自維護(hù)一套,同時(shí)在各自Bundle中提供一個(gè)ConfigManageService這樣的服務(wù)來(lái)更新當(dāng)前Bundle中的屬性,這樣才能解決Bundle Location的那個(gè)問(wèn)題,在目前的情況下就沒(méi)法構(gòu)成共有屬性的維護(hù)方式了,如果是公有屬性變化的話也就只有在ConfigManageAction中調(diào)用相關(guān)的多個(gè)Bundle的ConfigManageService來(lái)完成屬性的修改了,這樣的話存儲(chǔ)和動(dòng)態(tài)的通知仍然交由CM去完成了。

    關(guān)于模塊的耦合上只有個(gè)小小的想法討論下,就是做為設(shè)計(jì)師你能否很快的告訴別人搭建你其中的一個(gè)模塊的工程需要哪幾個(gè)模塊的支撐,或者最好就是運(yùn)行檢驗(yàn)?zāi)闫渲械囊粋€(gè)模塊的功能需要哪幾個(gè)模塊來(lái)支撐,當(dāng)然,這個(gè)在基于OSGi的系統(tǒng)更容易來(lái)做到,不過(guò)這個(gè)確實(shí)是設(shè)計(jì)時(shí)很關(guān)鍵的一個(gè)地方,這既反映了系統(tǒng)中模塊的耦合性,更體現(xiàn)了系統(tǒng)的擴(kuò)展性以及系統(tǒng)的組裝耦合上是否合理。

    posted on 2006-09-28 20:40 BlueDavy 閱讀(2684) 評(píng)論(4)  編輯  收藏 所屬分類: OSGi、SOA、SCA

    評(píng)論

    # re: OSGi的CM的小問(wèn)題、模塊的耦合 2006-09-28 20:53 XiangDF

    如果能有個(gè)圖就好了。  回復(fù)  更多評(píng)論   

    # re: OSGi的CM介紹和問(wèn)題、模塊的耦合 2006-09-28 23:39 BlueDavy

    @XiangDF
    呵呵,重新組織了一下這篇文章.....

    ps:剛在修改完這篇blog點(diǎn)發(fā)布時(shí)報(bào)出service unusable,嚇了一大跳,還好竟然還是發(fā)布成功了.....強(qiáng)烈建議加上自動(dòng)保存的功能,就像gmail一樣,否則完全有可能一篇文章就這么毀了。  回復(fù)  更多評(píng)論   

    # re: OSGi的CM介紹和問(wèn)題、模塊的耦合 2006-10-04 22:59 差沙

    Davy什么時(shí)候有時(shí)間看看spring+OSGi的規(guī)范。
    http://www.springframework.org/osgi/specification

    官方規(guī)范看得太暈,期待你能寫一個(gè)心得,我們好能理解的快一點(diǎn),謝謝哦。;-)  回復(fù)  更多評(píng)論   

    # re: OSGi的CM介紹和問(wèn)題、模塊的耦合 2006-10-05 09:42 BlueDavy

    @差沙
    ....呵呵,說(shuō)中了,我準(zhǔn)備找個(gè)時(shí)間翻譯下spring+OSGi的規(guī)范,不過(guò)現(xiàn)在還是0.7版,可以稍微等等,我近期會(huì)試用下spring+OSGi,試用后會(huì)寫點(diǎn)感受...  回復(fù)  更多評(píng)論   

    公告

     









    feedsky
    抓蝦
    google reader
    鮮果

    導(dǎo)航

    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    統(tǒng)計(jì)

    隨筆分類

    隨筆檔案

    文章檔案

    Blogger's

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 成人免费视频软件网站| 日韩免费人妻AV无码专区蜜桃 | 又爽又高潮的BB视频免费看 | 美女露100%胸无遮挡免费观看| 在线精品免费视频| 亚洲hairy多毛pics大全| 国外成人免费高清激情视频| 亚洲精品国产首次亮相| 免费在线观看a级毛片| 日本永久免费a∨在线视频| 亚洲中文字幕无码专区| 13小箩利洗澡无码视频网站免费| 亚洲国产a∨无码中文777| 久久精品国产大片免费观看| 18gay台湾男同亚洲男同| 国产乱子精品免费视观看片| 亚洲中文字幕久久精品蜜桃| 可以免费观看一级毛片黄a| 一级做受视频免费是看美女| 亚洲日韩精品A∨片无码| 8x8×在线永久免费视频| 亚洲最大的成人网站| 亚洲精品无码日韩国产不卡?V| 中文字幕在线免费视频| 亚洲日本在线观看网址| 日韩视频在线免费观看| 一级一级一级毛片免费毛片| 亚洲免费视频网站| 大地资源二在线观看免费高清| 无码免费又爽又高潮喷水的视频| 亚洲成AV人片一区二区密柚| 性做久久久久久免费观看| 特黄特色的大片观看免费视频| 亚洲日本中文字幕| 国产男女猛烈无遮档免费视频网站 | 最近新韩国日本免费观看| 亚洲精品无码国产片| 国产成A人亚洲精V品无码| 四虎成人免费网站在线| 精品亚洲永久免费精品| 国产亚洲美女精品久久|