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








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




<!--以jndi的方式調用遠程服務-->
<dsf:jndi/>

關于服務模型所支持的所有spring的配置在之后我會公布相應的xsd文件。
2、服務中心
在查詢了memcachedb的相關資料后,感覺目前它的java接口好像還不太好用,決定直接采用memcached,自己來實現存儲,由于服務模型信息的數據其實非常的小,而且維護改動的頻率并不是那么的高,暫時采用文件方式直接存儲,服務中心在注冊時將文件存儲在共享的空間中,之后將文件解析為服務模型對象,放入memcached,當有更新、刪除動作時同樣做相應的處理,文件存儲以及memcached交互都是比較容易的事,將文件解析為服務模型對象采用xstream完成。
服務中心基于Spring-DM、Webwork-OSGi簡單實現。
3、發布服務
使用方法已經在上面示例了,具體實現步驟則為:
提供擴展的spring xml namespace的支持;
編寫DSFJNDIExporter class,基于Spring的JNDITemplate實現將spring bean注冊到JNDI的過程(要求為在本地啟動jndi server,默認采用jboss jnp)。
這個部分之前分析錯誤,之前忽略了服務應用端是不知道目標服務的地址的,需要通過分布式緩存查詢才可得知,因此不是直接采用Spring的JNDIObjectFactoryBean就可以實現的,需要編寫自己的DSFObjectFactoryBean,具體實現步驟為:
提供擴展的spring xml namespace的支持;
編寫DSFObjectFactoryBean class,由這個bean來負責調用分布式緩存,查詢目標服務地址,由于目前只有JNDI方式,在獲取到目標服務地址后仍然通過Spring的JNDIObjectFactoryBean完成剩余工作。
經過上面四步技術實現細節的分析,可以來編碼完成V 0.7的實現了。
posted on 2008-01-29 23:12 BlueDavy 閱讀(5181) 評論(0) 編輯 收藏 所屬分類: OSGi、SOA、SCA