`
earls
  • 浏览: 69882 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

OSGi与Spring的整合 - 拨云现日

    博客分类:
  • OSGi
阅读更多
       最困难的时期已经过去,配置好环境之后下一步就是写一个测试程序跑一下。由于我主要是为了整合Hibernate,所以测试程序就以此为前提了。
       Hibernate整合本身比较简单,但如果想把框架设计得更加灵活、耦合性更低,支持以插件方式添加新的数据库表映射以及数据库操作将会比较麻烦,会涉 及到SessionFactory的生成,这些问题后续文章会陆续谈到。我们这里采用的例子是一个典型的基于角色的权限校验系统,简化后我们不再关心持久 层,只来讨论与Spring结合是如何配置的问题。
       首先建一个用来注册实体类的接口,可以动态监控数据库实体类的注册与销毁。接口相当简单,代码如下:
java 代码
 
  1. package wanged.core.persistent.entity;    
  2.   
  3. @SuppressWarnings("unchecked")    
  4. public interface EntityRegister {    
  5.     Class[] register(); // 返回需要注册的实体类的数组    
  6. }  
这个接口单独作为一个Bundle(命名为wanged_core_persistent_entity_register),MANIFEST.MF中只需要导出该接口所在的包供其他Bundle引用即可。
       现在需要实现接口了,这个接口会被用来声明一类服务,这样就可以利用OSGi的服务来达到动态添加数据库表映射的目的。
       建一个包含实体类的Bundle(命名为wanged_security_entity),其实就是一个插件工程,为简单起见就叫Bundle,下同。新建一个类实现EntityRegister接口,代码如下:
java 代码
 
  1. package wanged.security.entity;    
  2.     
  3. import java.util.ArrayList;    
  4. import wanged.core.persistent.entity.EntityRegister;    
  5.    
  6. @SuppressWarnings("unchecked")    
  7. public class SecurityEntityRegisterImpl implements EntityRegister{    
  8.   
  9.     public Class[] register() {    
  10.         ArrayList cList = new ArrayList();    
  11.   
  12.         cList.add(Role.class); // 用户角色实体类Role    
  13.         cList.add(User.class); // 用户信息实体类User    
  14.   
  15.         return cList.toArray(new Class[cList.size()]);    
  16.     }    
  17. }    

MANIFEST.MF 中需要引入EntityRegister接口所在的包,否则会找不到该接口。另外还需要导出Role和User所在的包,以便其他Bundle调用。现在 类建好了,需要声明我们的服务了。Spring和OSGi结合可以省去DS的配置文件,这也是上一篇文章在导入所需Bundle时没有引入DS相关的 Bundle的原因。Spring可以在META-INF/spring目录下查找所有的xml文件,并自动解析生成其中定义的Bean。下面我们建一个 bean.xml的文件来声明服务,内容如下:
xml 代码
 
  1. <osgi:service interface="wanged.core.persistent.entity.EntityRegister">                  
  2.   <bean class="wanged.security.entity.SecurityEntityRegister">                  
  3. </osgi:service> 

在这个xml文件中,我们声明了一个服务,用来注册权限管理中使用的实体类User和Role。
    现在是万事俱备只欠东风,服务已经声明,唯独缺少使用该服务的Bundle。建一个Bundle(命名为wanged_core_persistent),新建一个测试类TestEntityRegister,代码如下:
java 代码
 
  1. package test.core.persistent;  
  2.   
  3. import wanged.core.persistent.entity.EntityRegister;  
  4.   
  5. public class TestEntityRegister{  
  6.               
  7.     // 由于要注册多个这样的服务,所以参数为数组格式  
  8.     @SuppressWarnings("unchecked")  
  9.     public void setEntityRegister(EntityRegister[] erArr) {  
  10.         for(EntityRegister er: erArr) {  
  11.             System.out.println("EntityRegister class : " + er.getName());  
  12.             for(Class c : er.register()) {  
  13.                 System.out.println(c.getName());  
  14.             }  
  15.         }  
  16.     }  
  17. }  

MANIFEST.MF中引入wanged.core.persistent.entity。在META-INF中添加spring/bean.xml,并定义该测试类:
xml 代码
 
  1. <osgi:reference id="entityRegister"            
  2.     interface="wanged.core.persistent.entity.EntityRegister" cardinality="1..n" />            
  3.   
  4. <bean id="testEntityRegister" class="test.core.persistent.TestEntityRegister">            
  5.   <property name="entityRegister" ref="entityRegister" />          
  6. </bean>   

   注意上面的cardinality设置正是和setEntityRegister()方法的数组参数对应。现在已经全部搞定,所需要的就是运行一下,看是否如期输出类的信息。
分享到:
评论

相关推荐

    spring-dm-osgi整合jar包

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

    OSGI整合Spring、Mybatis、Spring MVC实现一个登录应用案例

    在这个案例中,我们将探讨如何整合OSGI、Spring、Mybatis以及Spring MVC来实现一个登录应用。这个教程旨在帮助开发者理解如何在OSGI环境中集成这些流行的Java技术,以构建灵活且可扩展的应用程序。 首先,我们需要...

    Spring与OSGI整合 计算器例子(转) +附整合代码和spring-osgi核心jar

    标题中的“Spring与OSGI整合 计算器例子(转) +附整合代码和spring-osgi核心jar”表明我们将探讨如何将Spring框架与OSGi(Open Services Gateway Initiative)模块化系统进行集成,并通过一个计算器的例子来说明这个...

    RAP 整合 Spring (基于 Spring-osgi )

    标题 "RAP 整合 Spring(基于 Spring-osgi)" 暗示了本文将探讨如何在 RAP(Remote Application Platform)框架中集成 Spring 框架,并利用 Spring-osgi 进行服务管理和依赖注入。RAP 是一个用于构建富客户端应用...

    OSGI入门和整合Spring

    将OSGI与Spring整合,可以充分利用两者的优点,构建更加灵活、可扩展且易于维护的系统。整合OSGI和Spring的主要目的是实现服务的动态发现和管理,以及在运行时动态装配和更新组件。 整合过程通常包括以下步骤: 1....

    OSGISpring OSGISpring

    标题 "OSGISpring OSGISpring" 暗示了我们即将探讨的是关于OSGI(Open Service Gateway Initiative)框架与Spring框架的集成。OSGI是一种模块化系统和Java应用程序执行环境,它允许开发者将应用程序分解为独立的服务...

    OSGI应用中整合Spring、Mybatis、Spring MVC案例

    在OSGI(Open Service Gateway Initiative)应用环境中,整合Spring、Mybatis和Spring MVC可以实现模块化、可热更新和高效的企业级应用开发。OSGI是一个Java框架,它允许动态地安装、卸载和升级服务,提供了强大的...

    OSGI资料,OSGI进阶,OSGI实战,OSGI入门和整合Spring

    本资料集合涵盖了OSGI的入门、进阶以及实战应用,特别是与Spring框架的整合。 《OSGI进阶》着重介绍了OSGI的核心概念和技术细节,包括: 1. **模块系统**:OSGI基于JAR文件作为模块的基本单位,每个模块都有自己的...

    osgi spring实例

    然而,需要注意的是,Spring DM在Spring 3.0之后被弃用,取而代之的是Spring OSGi,所以这个实例可能较旧,或者需要更新到现代的Spring Boot与OSGi结合的方式。 至于压缩包内的"整合代码原版",这可能是一个完整的...

    Spring OSGi 入门.pdf

    Spring OSGi 与 Spring 框架的整合 - **Bean 容器**: Spring OSGi 使用 OSGi 服务作为 Spring Bean,实现服务的动态发现和依赖注入。 - **配置管理**: OSGi 服务注册表可以被 Spring 配置,允许 Spring 配置动态...

    Eclipse RCP与Spring OSGi技术详解与最佳实践

    《Eclipse RCP与Spring OSGi:技术详解与最佳实践》由资源的Eclipse专家亲自...实战篇(第13-15章)详细讲解了Eclipse RCP与Spring OSGi框架、Hibernate ORM框架、JPA规范、Maven工具的整合,以及它与Java的模块化设计

    Spring-OSGI 1.0 M3 中文手册

    对于企业级应用,Spring动态模块与OSGI平台的整合能提供以下功能: 模块内部更好的应用逻辑分离 同时部署同一模块的多个版本 在系统中动态发现和使用模块提供的服务 在系统运行时动态安装,更新和卸载模块 ...

    osgi-tutorial.zip

    3. **使用Spring DM(Declarative Services)或Blueprint API**: Spring DM是Spring与OSGi集成的早期解决方案,现在已经由Blueprint API取代。这些API允许我们声明OSGi服务,并将它们注册为Spring beans,反之亦然。...

    OSGI&spring;&hibernate;

    Spring与OSGI结合使用,可以实现更灵活的模块化部署和管理。 Hibernate是Java领域最流行的ORM框架之一,它简化了Java应用与关系数据库之间的交互。通过使用Hibernate,开发者可以使用对象模型来操作数据库,而无需...

    学习SpringDM+OSGI的总结

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

    Pro Spring Dynamic Modules for OSGi Service Platforms

    ### Spring-DM框架与OSGi服务平台整合应用详解 #### 一、Spring-DM框架概述 Spring-DM(Dynamic Modules)框架是Spring框架的一个扩展,它主要为在OSGi环境中运行Spring应用程序提供支持。该框架使得开发人员能够...

    OSGI 入门资料PDF

    4. OSGI与Spring整合: Spring是一个流行的Java应用框架,OSGI与Spring的结合可以提供更强大的模块化能力。Spring Dynamic Modules(Spring-DM)是用于OSGI的Spring扩展,它使得Spring应用可以无缝地在OSGI环境中...

Global site tag (gtag.js) - Google Analytics