基于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ù)):








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




<!--以jndi的方式調(diào)用遠(yuǎn)程服務(wù)-->
<dsf:jndi/>

關(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)。
這個(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