基于Spring-DM实现分布式服务框架(DSF)(二)

基于Spring-DM实现分布式服务框架(DSF)(二)

在上篇分析完了在V 0.7需要干的活后,开始细化其中的实现细节,由于技术细节和之前想的有点不同,在细化的同时也稍做了调整,系统的架构仍然保持不变,在这篇blog中来看看实现每项任务的技术细节,之后就可以进入编码实现阶段了。
1、服务模型
      采用OSGi的服务模型,在Spring中使用此服务模型时和Spring-DM中的osgi:service、osgi:reference基本一致,示例如下:
      发布服务(将bulletinListAction以jndi的方式发布为dsf服务): 

< 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的方式对外发布 -->  
      
< dsf:jndi />
  
</ dsf:service >

     引用服务(引用dsf服务):

< 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的方式调用远程服务-->
           <dsf:jndi/>
     
</ dsf:reference >

    关于服务模型所支持的所有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)。

4、调用服务
      这个部分之前分析错误,之前忽略了服务应用端是不知道目标服务的地址的,需要通过分布式缓存查询才可得知,因此不是直接采用Spring的JNDIObjectFactoryBean就可以实现的,需要编写自己的DSFObjectFactoryBean,具体实现步骤为:
      提供扩展的spring xml namespace的支持;
      编写DSFObjectFactoryBean class,由这个bean来负责调用分布式缓存,查询目标服务地址,由于目前只有JNDI方式,在获取到目标服务地址后仍然通过Spring的JNDIObjectFactoryBean完成剩余工作。
经过上面四步技术实现细节的分析,可以来编码完成V 0.7的实现了。

你可能感兴趣的:(基于Spring-DM实现分布式服务框架(DSF)(二))