基于Spring-DM實(shí)現(xiàn)分布式服務(wù)框架(DSF)(二)

          在上篇分析完了在V 0.7需要干的活后,開始細(xì)化其中的實(shí)現(xiàn)細(xì)節(jié),由于技術(shù)細(xì)節(jié)和之前想的有點(diǎn)不同,在細(xì)化的同時(shí)也稍做了調(diào)整,系統(tǒng)的架構(gòu)仍然保持不變,在這篇blog中來看看實(shí)現(xiàn)每項(xiàng)任務(wù)的技術(shù)細(xì)節(jié),之后就可以進(jìn)入編碼實(shí)現(xiàn)階段了。
          1、服務(wù)模型
                采用OSGi的服務(wù)模型,在Spring中使用此服務(wù)模型時(shí)和Spring-DM中的osgi:service、osgi:reference基本一致,示例如下:
                發(fā)布服務(wù)(將bulletinListAction以jndi的方式發(fā)布為dsf服務(wù)): 

          <dsf:service id="BulletinListCommandService" version="1.0" ref="bulletinListAction" 
            interface
          ="cn.org.osgi.xwork.action.IAction">
             
          <dsf:service-properties>
              
          <prop key="command">LIST</prop>
             
          </dsf:service-properties>
                
          <!--以jndi的方式對外發(fā)布--> 
                
          <dsf:jndi/>
            
          </dsf:service>

               引用服務(wù)(引用dsf服務(wù)):

          <dsf:reference id="extensionRegistry" interface="org.eclipse.core.runtime.IExtensionRegistry" version="[1.0,2,0)" cardinality="1..x" retries="3" timeout="5000">
                  
          <dsf:service-properties>
                   
          <prop key="command">LIST</prop>
                 
          </dsf:service-properties>
                     <!--以jndi的方式調(diào)用遠(yuǎn)程服務(wù)-->
                     <dsf:jndi/>
               
          </dsf:reference>

              關(guān)于服務(wù)模型所支持的所有spring的配置在之后我會(huì)公布相應(yīng)的xsd文件。
          2、服務(wù)中心
                在查詢了memcachedb的相關(guān)資料后,感覺目前它的java接口好像還不太好用,決定直接采用memcached,自己來實(shí)現(xiàn)存儲(chǔ),由于服務(wù)模型信息的數(shù)據(jù)其實(shí)非常的小,而且維護(hù)改動(dòng)的頻率并不是那么的高,暫時(shí)采用文件方式直接存儲(chǔ),服務(wù)中心在注冊時(shí)將文件存儲(chǔ)在共享的空間中,之后將文件解析為服務(wù)模型對象,放入memcached,當(dāng)有更新、刪除動(dòng)作時(shí)同樣做相應(yīng)的處理,文件存儲(chǔ)以及memcached交互都是比較容易的事,將文件解析為服務(wù)模型對象采用xstream完成。
                服務(wù)中心基于Spring-DM、Webwork-OSGi簡單實(shí)現(xiàn)。  
          3、發(fā)布服務(wù)
                使用方法已經(jīng)在上面示例了,具體實(shí)現(xiàn)步驟則為:
                提供擴(kuò)展的spring xml namespace的支持;
                編寫DSFJNDIExporter class,基于Spring的JNDITemplate實(shí)現(xiàn)將spring bean注冊到JNDI的過程(要求為在本地啟動(dòng)jndi server,默認(rèn)采用jboss jnp)。

          4、調(diào)用服務(wù)
                這個(gè)部分之前分析錯(cuò)誤,之前忽略了服務(wù)應(yīng)用端是不知道目標(biāo)服務(wù)的地址的,需要通過分布式緩存查詢才可得知,因此不是直接采用Spring的JNDIObjectFactoryBean就可以實(shí)現(xiàn)的,需要編寫自己的DSFObjectFactoryBean,具體實(shí)現(xiàn)步驟為:
                提供擴(kuò)展的spring xml namespace的支持;
                編寫DSFObjectFactoryBean class,由這個(gè)bean來負(fù)責(zé)調(diào)用分布式緩存,查詢目標(biāo)服務(wù)地址,由于目前只有JNDI方式,在獲取到目標(biāo)服務(wù)地址后仍然通過Spring的JNDIObjectFactoryBean完成剩余工作。
          經(jīng)過上面四步技術(shù)實(shí)現(xiàn)細(xì)節(jié)的分析,可以來編碼完成V 0.7的實(shí)現(xiàn)了。

          posted on 2008-01-29 23:12 BlueDavy 閱讀(5181) 評論(0)  編輯  收藏 所屬分類: OSGi、SOA、SCA

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導(dǎo)航

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

          統(tǒng)計(jì)

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 班玛县| 宁都县| 曲水县| 岚皋县| 洛宁县| 瑞昌市| 柘城县| 商水县| 大丰市| 汪清县| 拉萨市| 永丰县| 临猗县| 武隆县| 镇江市| 潮州市| 霍州市| 无为县| 大化| 淅川县| 荥经县| 蛟河市| 淮北市| 廉江市| 中卫市| 长春市| 林甸县| 大新县| 雷山县| 镇原县| 德钦县| 普兰县| 陕西省| 兴安盟| 澜沧| 迭部县| 宾阳县| 通许县| 定兴县| 张掖市| 郓城县|