`

osgi spring dm

    博客分类:
  • esb
 
阅读更多

转自:http://blog.csdn.net/ferry_passion/article/details/7607402

Spring-OSGi默认加载解析META-INF/spring目录下的xml文件作为spring bean配置文件,也可通过在MANIFEST.MF中增加Spring-Context来指定spring bean配置文件。

 

把一个Spring bean发布为OSGi Service,只需在spring bean的xml中这么配置就行了:

<osgi:service id=”OSGi服务ID” ref=”需要发布为OSGi服务的spring bean” interface=”服务的接口”/>

 

要在Spring bean中引用OSGi Service,只需在spring bean的xml中这么配置:

<osgi:reference ref=”需要发布为OSGi服务的spring bean” interface=”服务接口” />

 

可以看出和ds中的配置基本是一致的,不过目前尚缺少对于policy这样的属性的配置,另外如要实现bind和unbind的设置,需要在osgi:reference的元素下增加osgi:listener的节点,例如:

<osgi:reference>

<osgi:listener ref=”引用了此service的spring bean”

bind-method=”服务可用时调用的方法”

unbind-method=”服务不可用时的调用的方法”/>

</osgi:reference>

 

这里bind-method和unbind-method的方法签名和在使用DS时稍有不同,这里bind-method和unbind-method的方法签名如下所示:

public void onBind(服务接口,Dictionary)

 

在上面ds的demo里把com.ferry.client bundle稍做改动,修改部分如下

增加一个类Tiny

 

[java] view plaincopy
 
  1. public class Tiny implements CommandProvider{  
  2.       
  3.     private IAbility ability;  
  4.   
  5.     public void setAbility(IAbility ability) {  
  6.         this.ability = ability;  
  7.     }  
  8.       
  9.     public void onBind(IAbility ability,Map properties){  
  10.         this.ability = ability;  
  11.     }  
  12.       
  13.     public void onUnbind(IAbility ability,Map properties){  
  14.         this.ability = null;  
  15.     }  
  16.   
  17.     public void _countTinyDamage(CommandInterpreter ci){  
  18.         if(ability!=null){  
  19.             ci.println(ability.getName()+":"+ability.ability(4));  
  20.         }else {  
  21.             ci.println("ability is null!");  
  22.         }  
  23.     }  
  24.   
  25.     @Override  
  26.     public String getHelp() {  
  27.         return "\tcountDamage - Count the damage\n";  
  28.     }  
  29. }  


对应的spring配置文件如下

 

 

[html] view plaincopy
 
  1. <?xml version="1.0" encoding="UTF-8"?>     
  2. <beans xmlns="http://www.springframework.org/schema/beans"    
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      
  4.     xmlns:osgi="http://www.springframework.org/schema/osgi"    
  5.     xsi:schemaLocation="  
  6.         http://www.springframework.org/schema/beans                           
  7.         http://www.springframework.org/schema/beans/spring-beans.xsd     
  8.         http://www.springframework.org/schema/osgi  
  9.         http://www.springframework.org/schema/osgi/spring-osgi.xsd">     
  10.       
  11.     <bean id="tiny" class="com.ferry.hero.Tiny">  
  12.         <property name="ability" ref="ability"/>  
  13.     </bean>  
  14.       
  15.     <osgi:reference id="ability" interface="com.ferry.ability.IAbility">  
  16.         <osgi:listener ref="tiny" bind-method="onBind" unbind-method="onUnbind"></osgi:listener>  
  17.     </osgi:reference>  
  18.       
  19.     <osgi:service ref="tiny" interface="org.eclipse.osgi.framework.console.CommandProvider">  
  20.    </osgi:service>  
  21. </beans>  

 

 

spring-dm也支持多服务提供,有list和set两种,配置如下

<osgi:list id="引用了此service的spring bean " interface="服务接口"/>

<osgi:setid="引用了此service的spring bean " interface="服务接口“/>

 

Hero改成spring-dm 多服务提供的list方式,代码如下

 

[java] view plaincopy
 
  1. public class Hero implements CommandProvider{  
  2.       
  3.     private List<IAbility> abilityList;  
  4.       
  5.     public void setAbilityList(List<IAbility> abilityList) {  
  6.         this.abilityList = abilityList;  
  7.     }  
  8.   
  9.     public void addAbility(IAbility ability) {  
  10.         abilityList.add(ability);  
  11.         System.out.println(ability.getName());  
  12.     }  
  13.       
  14.     public void removeAbility(IAbility ability) {  
  15.         abilityList.remove(ability);  
  16.         System.out.println(ability.getName());  
  17.     }  
  18.   
  19.     public void _countDamage(CommandInterpreter ci){  
  20.         if (abilityList!=null&&abilityList.size()!=0) {  
  21.             for (IAbility ability : abilityList) {  
  22.                 ci.println(ability.getName()+":"+ability.ability(4));  
  23.             }  
  24.         }  
  25.     }  
  26.   
  27.     @Override  
  28.     public String getHelp() {  
  29.         return "\tcountDamage - Count the damage\n";  
  30.     }  
  31. }  

 

 

Hero对应的spring配置文件如下

 

[html] view plaincopy
 
  1. <bean id="hero" class="com.ferry.hero.Hero">     
  2.         <property name="abilityList" ref="abilitys"></property>  
  3. </bean>     
  4.        
  5. <osgi:list id="abilitys" interface="com.ferry.ability.IAbility"></osgi:list>  
  6.       
  7. <osgi:service ref="hero" interface="org.eclipse.osgi.framework.console.CommandProvider">  
  8. </osgi:service>  

 

 

代码运行结果大家可以通过我提供的代码自己运行,这里就不截图了

 

[html] view plaincopy
 
  1.   

用到的jar包

com.springsource.org.aopalliance-1.0.0.jar

jcl-over-slf4j-1.6.4.jar

logback-classic-1.0.0.jar

logback-core-1.0.0.jar

org.eclipse.equinox.ds_1.3.1.R37x_v20110701.jar

org.eclipse.equinox.util_1.0.300.v20110502.jar

org.eclipse.osgi.services_3.3.0.v20110513.jar

org.eclipse.osgi_3.7.2.v20120110-1415.jar

org.springframework.aop-2.5.6.SEC03.jar

org.springframework.beans-2.5.6.SEC03.jar

org.springframework.context-2.5.6.SEC03.jar

org.springframework.core-2.5.6.SEC03.jar

slf4j-api-1.6.4.jar

spring-osgi-core-1.2.1.jar

spring-osgi-extender-1.2.1.jar

spring-osgi-io-1.2.1.jar

spring-osgi-mock-1.2.1.jar

点击下载demo代码

 

分享到:
评论

相关推荐

    osgi spring实例

    标签"osgi springDM"进一步明确了关键技术和关注点。Spring DM是Spring针对OSGi环境的一个扩展,它提供了在OSGi容器中管理和部署Spring应用的能力。然而,需要注意的是,Spring DM在Spring 3.0之后被弃用,取而代之...

    SpringDM笔记31-Testing with OSGi and SpringDM

    标题 "SpringDM笔记31-Testing with OSGi and SpringDM" 涉及到的是在OSGi环境中使用SpringDM进行测试的相关知识。OSGi(Open Service Gateway Initiative)是一种Java模块化系统,允许动态地发现、加载和卸载服务。...

    OSGi与Spring:Spring DM开发

    - 启动Eclipse IDE,选择一个用于存放项目的空文件夹作为工作空间,例如`C:\sample\springdm`。 - Eclipse 3.3版本内嵌了Equinox 3.3 OSGi容器,这为开发和调试OSGi模块提供了便利。 **4. 导入Spring DM JAR文件*...

    osgi+maven+springdm文档集

    **OSGI MAVEN SPRINGDM 文档集** 这个文档集主要涵盖了三个关键的Java开发技术:OSGI(Open Service Gateway Initiative)、Maven以及Spring Dynamic Modules(Spring DM)。这些技术都是现代Java开发中的重要组成...

    学习SpringDM+OSGI的总结

    ### SpringDM与OSGI概述 #### OSGI概念解析 OSGI(Open Service Gateway Initiative),直译为“开放的服务网关初始化”,它是一系列针对Java动态化模块化系统的规范。OSGI不仅指代一个官方联盟,还代表着由该联盟...

    基于spring dm server 的osgi 例子

    【标题】:“基于Spring DM Server的OSGi实例” 在IT领域,OSGi(Open Services Gateway Initiative)是一种模块化系统和Java服务平台,它允许开发者创建可热插拔的组件,从而提高了软件的可维护性和可扩展性。...

    SpringDM笔记7-开发SpringDM Bundle

    SpringDM(Spring Dynamic Modules)是Spring框架的一个扩展,专门用于OSGi(Open Service Gateway Initiative)环境中的应用程序开发。OSGi是一种Java模块化系统,它允许开发者将应用程序拆分成独立的、可热插拔的...

    OSGI+SpringDM+Hessian

    标题 "OSGI+SpringDM+Hessian" 涉及到三个重要的技术概念,它们分别是OSGI(Open Services Gateway Initiative)、SpringDM(Spring Dynamic Modules)和Hessian。这些技术在Java开发领域中都有其独特的应用和价值。...

    spring-dm-osgi整合jar包

    标题“spring-dm-osgi整合jar包”和描述“spring-dm整合osgi所需所有jar包”提及的核心知识点是Spring Dynamic Modules(简称Spring DM)与OSGi(Open Service Gateway Initiative)框架的集成。这两个技术在Java...

    osgi-SpringDM

    Spring-DM指的是 Spring ...Spring-DM 的主要目的是能够方便地将 Spring 框架和OSGi框架结合在一起,使得使用Spring的应用程序可以方便简单地部署在OSGi环境中,利用OSGi框架提供的服务,将应用变得 更加模块化。

    基于OSGi和Spring开发Web应用.doc

    3. Spring-DM:Spring-DM 是 Spring 开发组织在 2008 年发布的,将 OSGi 和 Spring 结合的第一个版本。 4. dm Server:dm Server 是一个完全模块化部署的基于 OSGi 的 Java 服务器,为运行企业 Java 应用和 Spring ...

    spring DM英文版

    Spring DM,全称为Spring Dynamic Modules,是Spring框架的一个扩展,主要设计用于开发在OSGi(Open Service Gateway Initiative)环境下的应用程序。OSGi是一种模块化系统,允许Java应用程序以组件的形式进行构建、...

    SpringDM开发文档

    《SpringDM开发文档》是关于SpringDM框架的详细技术指南,该框架是在OSGi环境中运行Spring应用程序的关键组件。SpringDM,全称为Spring Dynamic Modules,是Spring框架针对OSGi(Open Service Gateway Initiative)...

    osgi_spring_dm_jr

    标题中的"osgi_spring_dm_jr"可能是指OSGi(Open Service Gateway Initiative)框架下,Spring Dynamic Modules(Spring DM)的Java Runtime环境相关的知识。OSGi是一种模块化系统,用于构建可升级、可扩展和可配置...

    未来10年:OSGi、Spring-DM.docx

    未来10年:OSGi、Spring-DM OSGi(Open Service Gateway Initiative)是一种基于Java的动态模块化框架,旨在解决Java EE开发及部署模型的局限性。该框架可以提供模块化、动态性和灵活性,解决研发、部署和维护等...

    基于OSGi和Spring开发Web应用教程

    Spring-DM(现在称为Spring OSGi)是Spring框架的一个扩展,旨在将Spring的功能与OSGi的模块化特性相结合,使开发者能够在OSGi环境中利用Spring的优势。 在本文中,作者通过一个简单的Web应用实例来展示如何利用...

    基于SpringDM的WEB应用开发

    Spring DM 1.1.x最大特性便...在多个Spring DM支持OSGi平台上运行)并且Spring DM Server并没有提供更多企业应用支持 不过对于刚 使用Spring DM进行WEB应用开发人来说成功地配置却不是件容易事,文档详细讲解了相关配置

    springDM开发指南(英文)

    Spring Dynamic Modules (Spring DM),作为Spring框架的扩展,旨在为OSGi环境下的应用开发提供强大的支持。它将Spring的依赖注入和面向切面编程能力与OSGi的模块化特性相结合,为开发者在构建动态、可扩展的企业级...

Global site tag (gtag.js) - Google Analytics