基于OSGi實(shí)現(xiàn)分布式服務(wù)框架歷程(三)

          上篇說到,經(jīng)過分析后決定選用JNDI來實(shí)現(xiàn)服務(wù)的遠(yuǎn)程注冊、查找和路由,在這篇blog中就來詳細(xì)分析下基于JNDI怎么和OSGi結(jié)合來實(shí)現(xiàn)服務(wù)的遠(yuǎn)程注冊、查找和路由。
          1、遠(yuǎn)程注冊
                目前OSGi DS注冊時(shí)是直接在本地注冊服務(wù)實(shí)例的,要支持遠(yuǎn)程注冊的話首先需要修改DS注冊服務(wù)部分的代碼,在ds的描述中需要增加一個(gè)配置項(xiàng),以支持將服務(wù)注冊到遠(yuǎn)程服務(wù)中心,例如:
                 <service>
                       <provide interface="cn.org.osgi.opendoc.bulletin.service.WebCommand"/>
                       <server>jnp://10.100.100.100:1099,jnp://10.100.100.101:3099</server>
                 </service>
                 在注冊時(shí)直接采用InitialContext進(jìn)行注冊,不過這里要采取個(gè)不同的策略,就是通常jndi注冊時(shí)綁定的都是實(shí)際對象的實(shí)例,但要注意,其實(shí)在分布式的服務(wù)框架體系中,服務(wù)是分布式部署的,服務(wù)中心僅僅是個(gè)注冊、路由的地方而已,那么這種情況下只需要把服務(wù)的相關(guān)元信息注冊到服務(wù)中心即可,所以這個(gè)時(shí)候我們會提供一個(gè)服務(wù)元信息對象,然后把這個(gè)元信息對象綁定到j(luò)ndi上去,這里涉及到的一個(gè)問題是jndi的名稱怎么取,這個(gè)名稱要便于查找服務(wù),同時(shí)還得保證唯一性。
                 可以看出,在這個(gè)實(shí)現(xiàn)方案中,最重要的就是這個(gè)服務(wù)元信息對象了,這個(gè)元信息對象中應(yīng)該包含和OSGi服務(wù)模型同樣的所有的信息,同時(shí)還需要包括服務(wù)的狀態(tài)信息,由于包含了狀態(tài)信息,叫元信息對象的話有點(diǎn)不正確,要么干脆就叫Service或ServiceInfo得了。
          2、遠(yuǎn)程調(diào)用
                遠(yuǎn)程調(diào)用準(zhǔn)確來講應(yīng)該分為引用遠(yuǎn)程服務(wù)和調(diào)用遠(yuǎn)程服務(wù)兩個(gè)環(huán)節(jié),因?yàn)閷τ趌azy init的服務(wù)而言首先是遠(yuǎn)程查找服務(wù),但并不發(fā)生調(diào)用,所以在這里也分為兩步來描述下。
                引用遠(yuǎn)程服務(wù)
                引用遠(yuǎn)程服務(wù)這塊的話JNDI目前的實(shí)現(xiàn)肯定是很難滿足需求的,按照OSGi的服務(wù)模型,在引用服務(wù)是只提供了服務(wù)的接口名,頂多就是增加了一些服務(wù)的特定屬性來限定服務(wù)的范圍,而JNDI在查找綁定的對象時(shí)是直接指定名稱查找的,一對一的方式,但在OSGi的服務(wù)模型中獲取到的服務(wù)有可能會是多個(gè)的,來看看怎么樣修改實(shí)現(xiàn)這個(gè)需求。
                 首先仍然是修改DS描述,以支持引用遠(yuǎn)程服務(wù),例如:
                 <reference name="CommonDaoService" interface="cn.org.osgi.module.hibernate.service.CommonDaoService" bind="setCommonDaoService" unbind="unsetCommonDaoService" policy="dynamic" server="jnp://10.100.100.100:1099"/>
                 在查找遠(yuǎn)程服務(wù)中心的服務(wù)時(shí),通過jndi將需要查找的服務(wù)的接口、屬性等過濾條件傳遞給服務(wù)器端,這個(gè)應(yīng)該可以通過擴(kuò)展JNDI的lookup來實(shí)現(xiàn),JNDI服務(wù)中心接到請求后根據(jù)過濾條件從注冊的服務(wù)中查找到符合條件的服務(wù)元信息對象,并返回服務(wù)元信息對象集合至調(diào)用端,之后由生命周期管理對象決定后續(xù)的動作,關(guān)于生命周期管理對象在后一個(gè)篇章中來詳細(xì)的分析。
                  調(diào)用遠(yuǎn)程服務(wù)
                  當(dāng)遠(yuǎn)程服務(wù)被調(diào)用時(shí),此時(shí)應(yīng)該提供的一個(gè)配置是是否可跳過服務(wù)中心直接向另一端的服務(wù)發(fā)起調(diào)用(某些情況下可能會有這樣的需求),另外就是同步調(diào)用和異步調(diào)用的配置的支持。
                  當(dāng)調(diào)用時(shí),可以走某種通訊機(jī)制對請求的服務(wù)的接口、方法以及參數(shù)傳遞至服務(wù)中心或相應(yīng)的服務(wù)提供端,當(dāng)服務(wù)提供端處理完畢后繼續(xù)走這個(gè)通訊機(jī)制把處理的結(jié)果返回至調(diào)用端。

          經(jīng)過上面的分析后,可以看出,基于JNDI實(shí)現(xiàn)服務(wù)的注冊、查找不會是難點(diǎn),在后面一個(gè)篇章中開始來分析生命周期的管理的問題,就會比較的復(fù)雜了,進(jìn)入分布式環(huán)境后,生命周期的管理就比之前OSGi DS的生命周期管理復(fù)雜了很多。

          << 基于OSGi實(shí)現(xiàn)分布式服務(wù)框架歷程(二)
          << 基于OSGi實(shí)現(xiàn)分布式服務(wù)框架歷程(一)

          >> 基于OSGi實(shí)現(xiàn)分布式服務(wù)框架歷程(四)

          posted on 2008-01-21 15:09 BlueDavy 閱讀(5629) 評論(2)  編輯  收藏 所屬分類: OSGi、SOA、SCA

          評論

          # re: 基于OSGi實(shí)現(xiàn)分布式服務(wù)框架歷程(三) 2008-01-22 08:15 布衣郎

          不錯的文章,期待下一篇。不知道在web應(yīng)用中,能否直接調(diào)用web服務(wù)器的jndi環(huán)境, 就像servlet一樣,通過wrapper和bridge的方式來直接使用。  回復(fù)  更多評論   

          # re: 基于OSGi實(shí)現(xiàn)分布式服務(wù)框架歷程(三)[未登錄] 2008-01-22 09:21 BlueDavy

          @布衣郎
          Web應(yīng)用中N多都是調(diào)jndi的...
          就像DataSource之類的東西...  回復(fù)  更多評論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導(dǎo)航

          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統(tǒng)計(jì)

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 普宁市| 沈阳市| 新化县| 黄梅县| 肃宁县| 邢台市| 四川省| 龙游县| 宾阳县| 牙克石市| 蒙自县| 靖远县| 余干县| 太康县| 诸城市| 疏附县| 灵石县| 龙泉市| 宣武区| 宁陕县| 兴安县| 宁化县| 湖州市| 东源县| 剑河县| 双流县| 佛教| 玉门市| 墨竹工卡县| 铜鼓县| 眉山市| 邳州市| 青海省| 旬阳县| 航空| 临朐县| 凤台县| 辽源市| 卢湾区| 宁波市| 华坪县|