`

osgi spring hibernate =

    博客分类:
  • OSGI
阅读更多
接上文,为了测试已经搭好的架子,创建了一个注册实体的Bundle(wanged_security_entity),这个里面包含了两个实体类(Role、User)和它们的Hibernate映射文件(Role.hbm.xml、User.hbm.xml),以及一个实现了EntityRegister接口的类(SecurityEntityRegisterImpl)以提供注册实体的服务。这里仅将SecurityEntityRegisterImpl的代码列出如下:

java 代码
 
package wanged.security.entity;   
   
import java.util.ArrayList;   
   
import wanged.core.persistent.entity.EntityRegister;   
   
   
@SuppressWarnings("unchecked")   
public class SecurityEntityRegisterImpl implements EntityRegister{   
   
    public Class[] register() {   
        ArrayList<class> cList = new ArrayList<class>();  </class></class> 
          
        cList.add(Role.class);   
        cList.add(User.class);   
           
        return cList.toArray(new Class[cList.size()]);   
    }   
   
}   
下面来声明该服务:

xml 代码
 
<osgi:service interface="wanged.core.persistent.entity.EntityRegister">       
  <bean class="wanged.security.entity.SecurityEntityRegisterImpl" />       
</osgi:service>   
 这个服务就是上篇中,"wanged_core_persistent" Bundle中引用的服务,完成了实体类的注册。
       现在有了实体类,就需要有对实体类进行CURD操作的Bundle(wanged_security_service),这个Bundle中采用了常见的Service-DAO模式,以对Role的操作为例,包括RoleService:

java 代码
 
package wanged.security.service;   
   
import java.util.List;   
   
import wanged.security.dao.RoleDao;   
import wanged.security.entity.Role;   
   
public interface RoleService {   
   
    void setRoleDao(RoleDao rdao);   
       
    void saveRole(Role r);   
       
    List<role> findAll();  </role> 
}   
和其实现RoleServiceImpl:

java 代码
 
package wanged.security.service.impl;   
   
import java.util.List;   
   
import org.springframework.transaction.annotation.Propagation;   
import org.springframework.transaction.annotation.Transactional;   
   
import wanged.security.dao.RoleDao;   
import wanged.security.entity.Role;   
import wanged.security.service.RoleService;   
   
@Transactional(readOnly = true)   
public class RoleServiceImpl implements RoleService {   
   
    private RoleDao rdao;   
   
    public void setRoleDao(RoleDao rdao) {   
        this.rdao = rdao;   
    }   
       
    @Transactional(readOnly = false, propagation = Propagation.REQUIRED)   
    public void saveRole(Role r) {   
        this.rdao.save(r);   
    }   
   
    @Transactional()   
    public List<role> findAll() {  </role> 
        List<role> l =  this.rdao.find();  </role> 
        return l;   
    }   
       
}   
以及DAO的接口RoleDao:

java 代码
 
package wanged.security.dao;   
   
import java.util.List;   
   
import org.hibernate.SessionFactory;   
   
import wanged.security.entity.Role;   
   
public interface RoleDao {   
   
    void setSessionFactory(SessionFactory sessionFactory);   
   
    void save(Role r);   
   
    List<role> find();  </role> 
}   
及其实现RoleDaoImpl:

java 代码
 
package wanged.security.dao.impl;   
   
import java.util.List;   
   
import org.hibernate.SessionFactory;   
   
import wanged.security.dao.RoleDao;   
import wanged.security.entity.Role;   
   
public class RoleDaoImpl implements RoleDao {   
    private SessionFactory sessionFactory;   
   
    public void setSessionFactory(SessionFactory sessionFactory) {   
        this.sessionFactory = sessionFactory;   
    }   
   
    public void save(Role r) {   
        sessionFactory.getCurrentSession().save(r);   
    }   
       
    @SuppressWarnings("unchecked")   
    public List<role> find(){  </role> 
        return sessionFactory.getCurrentSession().createQuery("from " + Role.class.getName()).list();   
    }   
}   
这些都是最常见的没什么可注意的,下面主要说说配置。
配置文件还是Bean初始化使用bean.xml:

xml 代码
 
<!-- 数据持久化 -->   
<bean id="roleDao" class="wanged.security.dao.impl.RoleDaoImpl">   
  <property name="sessionFactory" ref="sessionFactory" />   
</bean>   
   
<bean id="roleService" class="wanged.security.service.impl.RoleServiceImpl">   
  <property name="roleDao" ref="roleDao" />   
</bean>   
   
<!-- 事务处理 -->   
<tx:annotation-driven transaction-manager="txManager" />   
   
<!--  Test  -->   
<bean id="test" class="wanged.RoleServiceTest" init-method="init">   
  <property name="roleService" ref="roleService" />   
</bean>   

这里引用了上文中在"wanged_core_persistent" Bundle中声明的服务sessionFactory和txManager,这个txManager是一个默认的事务管理方案,如果不合适可以在这个xml文件中自定义,这就为新扩展的数据库操作提供了方便。另外这里有一个测试类RoleServiceTest,是用来测试这个Bundle是否能正常工作的,可以自己编写其中的代码。
服务的声明和引用定义在osgi-service.xml文件中:

xml 代码
 
<osgi:reference id="sessionFactory" interface="org.hibernate.SessionFactory" />     
   
<osgi:reference interface="org.springframework.transaction.PlatformTransactionManager" id="txManager" />     
   
<osgi:service interface="wanged.security.service.RoleService" ref="roleService" />   
这里声明了一个RoleService的服务供其它的Bundle使用。
       到目前为止,OSGi、Spring、Hibernate已经成功整合在一起。经运行测试,一切正常。但还没有对SessionFactory的重新初始化进行处理,不过这已经不是重点了。

 

分享到:
评论
2 楼 liuqiao_0702 2012-06-15  
1 楼 earls 2010-07-29  
博主私转我的贴子,又不标明转帖,不厚道呀

相关推荐

    OSGi、Spring、Hibernate集成:动态注册实体类

    平台依赖度低的解决方案 ...测试环境:equinox3.5.2。其它用到的Bundle包括hibernate、hibernate-annotation、hsqldb、 spring、spring-osgi等。请到http://www.springsource.com/repository/下载。

    OSGI&spring;&hibernate;

    "表明我们将探讨三个关键的Java技术:OSGI(Open Services Gateway Initiative)、Spring框架以及Hibernate ORM(Object-Relational Mapping)工具。这三个技术在现代Java应用开发中占据着重要的地位。 OSGI是Java...

    OSGi+SpringMVC+Spring+Hibernate企业应用框架

    辛苦研究了一个多月,终于搭建成了一个可用于实际应用开发的OSGI-WEB框架,采用OSGi+SpringMVC+Spring+Hibernate+Virgo技术,鉴于此类技术架构甚少,特提供出来供大家参考。 使用步骤: 一、下载STS搭建Osgi开发...

    spring osgi相关资源

    Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的一种技术,它允许在OSGi容器中运行和管理Spring应用。OSGi是一种模块化系统,为Java应用程序提供了动态部署、版本控制和依赖管理的...

    解决osgi spring 事务配置问题

    - 首先,我们需要确保引入了Spring OSGi相关的库,如`spring-osgi-core`, `spring-osgi-io`, `spring-osgi-extender`, `spring-osgi-aop`等。这些库提供了在OSGi环境中的Spring支持。 - 将Spring应用上下文作为...

    spring-osgi-1.2.0.zip

    Spring OSGi是Spring框架与OSGi(Open Service Gateway Initiative)规范相结合的产物,它允许在OSGi容器中使用和管理Spring应用。Spring框架是一个强大的轻量级Java应用程序框架,而OSGi则是一种模块化系统,用于...

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

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

    SpringMVC+Spring+SpringDataJPA+Hibernate整合登录的效果

    这是整合SpringMVC+Spring+SpringDataJPA+Hibernate简单的实现登录的功能,用的是mysql数据库,这是一个web Project 如果你用的是JavaEE6那么你要注意bean-validator.jar和weld-osgi-bundle.jar与slf4j的jar包冲突。...

    基于virgo环境的OSGI+Maven的web开发代码下载(spring+hibernate+GWT)

    这个示例项目是一个综合性的学习资源,涵盖了现代Java Web开发的多个重要方面,包括OSGi的模块化、Maven的构建管理、Spring的依赖注入、Hibernate的ORM以及GWT的前端开发。对于想了解这些技术如何协同工作的开发者来...

    spring_jar包源码包

    6. **Spring ORM**:集成了各种ORM框架,如Hibernate、JPA等,帮助开发者在Spring应用中无缝地使用ORM技术。 源码包的存在,使我们有机会查看Spring的内部实现,了解其实现策略和设计模式。通过阅读源码,开发者...

    osgi 资料 总结 实践

    OSGi(Open Services Gateway Initiative)是一种开放标准的Java模块化系统,它允许开发人员将应用程序分解为一组可独立更新和管理的...在与Spring和Hibernate等流行框架的集成中,OSGi同样展示了其广泛的应用价值。

    osgi_spring_hibernate_book:我关于将spring4和hibernate 4 java应用程序迁移到osgi环境的书

    将基于Hibernate 4和Spring 4的旧代码迁移到OSGi友好版本 当我听说OSGi Enterprise规范方法以及Spring团队使用其Spring DM服务器进入OSGi世界时,我真的以为OSGi很快将成为Java企业领域的标准。 但是随后,...

    OSGI-in action

    《OSGI实战:结合Spring DM》 OSGI(Open Service Gateway Initiative)是一种模块化系统和服务平台,它允许软件以模块化的方式进行构建、部署和管理。OSGI在Java世界中扮演着重要的角色,因为它提供了动态性、可...

    osgi资料

    - 框架集成:讲解如何将OSGi与Spring、Hibernate等流行框架结合,构建复杂应用。 - 性能优化:提供关于提高OSGi应用性能的策略和技巧,如缓存管理和并发控制。 4. **Spring动态模型参考指南1.0.1.pdf**: 虽然...

    OSGi进阶源代码

    本资源集成了OSGi与SSH(Struts、Spring、Hibernate)三大主流框架的结合,使得基于OSGi的应用能够充分利用这些框架的功能,构建出更加灵活且强大的企业级应用。 **OSGi与SSH集成** 1. **Struts**:Struts是MVC...

    osgi进阶(中文)

    具体而言,它介绍了如何解决与Spring和Hibernate的集成问题,如何在Spring bean.xml文件中发布和引用OSGi服务,以及如何重构留言板列表模块。这些集成实践对于想要把现有应用迁移到OSGi平台的开发者来说至关重要。 ...

    OSGi原理与最佳实践(完整版)&OSGi_in_action

    3. **工具与框架**:介绍常用的OSGi开发工具和框架,如Apache Felix、Eclipse Equinox,以及如何与Spring、Hibernate等流行框架集成。 4. **案例研究**:提供真实世界中的OSGi应用案例,帮助读者理解OSGi在实际问题...

Global site tag (gtag.js) - Google Analytics