查询了很多网上的帖子,主流的整合方式大体为4种。前两种不必说了,没什么扩展性,不予考虑。第三种采用Eclipse-RegisterBuddy方式(官方的整合方式)和第四种则采用Eclipse插件的扩展点,这样种都不能脱离Equinox实现,最后还是决定用自己的一套方式。
先来说说整合Hibernate的关键之处。其实用OSGi整合Hibernate很简单,但要通过Bundle方式做到可以扩展新的持久化层面的东西(比如添加新的表和操作)就比较费事了。因为Hibernate在初始化时根据注册的实体类创建SessionFactory,这样当有新的实体类添加进来时就要创建新的SessionFactory,这样系统中出现两个甚至多个SessionFatory会导致一系列的问题。显然整合Hibernate关键就是解决实体类注册与SessionFactory创建的问题。
我的具体思路如下。
首先将Hibernate单独多为一个Bundle(wanged_commons_hibernate)以便提供其他Bundle所需类包。
然后建立一个用于提供实体注册接口的Bundle(wanged_core_persistent_entity_register),代码如下:
java 代码
- package wanged.core.persistent.entity;
-
- @SuppressWarnings("unchecked")
- public interface EntityRegister {
-
-
-
-
-
- Class[] register();
-
- }
建一个用来初始化SessionFactory和事务管理的Bundle(wanged_core_persistent),由于使用Spring提供的LocalSessionFactoryBean会有问题,所以我单独写了两个类。
类
LocalSessionFactoryBean的代码:
java 代码
类
LocalDataSourceConnectionProvider的代码:
java 代码
- package wanged.core.persistent;
-
- import java.sql.Connection;
- import java.sql.SQLException;
- import java.util.Properties;
-
- import javax.sql.DataSource;
-
- import org.hibernate.HibernateException;
- import org.hibernate.connection.ConnectionProvider;
- import org.hibernate.util.JDBCExceptionReporter;
-
- public class LocalDataSourceConnectionProvider implements ConnectionProvider {
-
- private DataSource dataSource;
-
- private DataSource dataSourceToUse;
-
-
- public void configure(Properties props) throws HibernateException {
- this.dataSource = LocalSessionFactoryBean.getConfigTimeDataSource();
- if (this.dataSource == null) {
- throw new HibernateException("No local DataSource found for configuration - " +
- "dataSource property must be set on LocalSessionFactoryBean");
- }
- this.dataSourceToUse = getDataSourceToUse(this.dataSource);
- }
-
- protected DataSource getDataSourceToUse(DataSource originalDataSource) {
- return originalDataSource;
- }
-
- public DataSource getDataSource() {
- return dataSource;
- }
-
- public Connection getConnection() throws SQLException {
- try {
- return this.dataSourceToUse.getConnection();
- }
- catch (SQLException ex) {
- JDBCExceptionReporter.logExceptions(ex);
- throw ex;
- }
- }
-
- public void closeConnection(Connection con) throws SQLException {
- try {
- con.close();
- }
- catch (SQLException ex) {
- JDBCExceptionReporter.logExceptions(ex);
- throw ex;
- }
- }
-
- public void close() {
- }
-
- public boolean supportsAggressiveRelease() {
- return false;
- }
-
- }
如果你对比其与Spring提供的同名类中的代码,相差不大。
下面来看看配置文件,我把Bean的初始化放在bean.xml中:
xml 代码
-
- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
- <property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
- <property name="url" value="jdbc:mysql://localhost:3306/cms" />
- <property name="username" value="root" />
- <property name="password" value="root" />
- <property name="connectionProperties">
- <props>
- <prop key="useUnicode">true</prop>
- <prop key="characterEncoding">GBK</prop>
- </props>
- </property>
- </bean>
-
-
- <bean id="sessionFactory" class="wanged.core.persistent.LocalSessionFactoryBean">
- <property name="hibernateProperties">
- <props>
- <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
- <prop key="hibernate.show_sql">false</prop>
- <prop key="hibernate.cache.use_query_cache">true</prop>
- <prop key="hibernate.jdbc.batch_size">20</prop>
- </props>
- </property>
- <property name="dataSource" ref="dataSource" />
- <property name="entityRegister" ref="entityRegister" />
- </bean>
-
- <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
- <property name="sessionFactory" ref="sessionFactory" />
- </bean>
而服务与引用的声明放在osgi-service.xml中:
xml 代码
- <osgi:reference id="entityRegister" interface="wanged.core.persistent.entity.EntityRegister" cardinality="1..n"/>
-
- <osgi:service interface="org.hibernate.SessionFactory" ref="sessionFactory" />
-
- <osgi:service interface="org.springframework.transaction.PlatformTransactionManager" ref="txManager" />
这里的
分享到:
相关推荐
《Eclipse RCP与Spring OSGi:技术详解与最佳实践》由资源的Eclipse专家亲自...实战篇(第13-15章)详细讲解了Eclipse RCP与Spring OSGi框架、Hibernate ORM框架、JPA规范、Maven工具的整合,以及它与Java的模块化设计
3. Hibernate在OSGI中的整合:阐述如何将Hibernate集成到OSGI环境中,包括SessionFactory和Session的管理。 4. 模块化设计:如何将应用拆分为OSGI模块,每个模块对应特定的功能或服务。 5. 动态服务注册与发现:利用...
这是整合SpringMVC+Spring+SpringDataJPA+Hibernate简单的实现登录的功能,用的是mysql数据库,这是一个web Project 如果你用的是JavaEE6那么你要注意bean-validator.jar和weld-osgi-bundle.jar与slf4j的jar包冲突。...
整合Hibernate则能让我们在OSGi系统中轻松地处理数据存储。 首先,整合的关键在于让Hibernate适应OSGi的动态特性。通常,Hibernate的SessionFactory是静态配置的,但在OSGi中,我们希望能够在运行时添加或移除实体...
- Spring与OSGi的整合:介绍如何在OSGi环境中使用Spring,如使用Declarative Services或Blueprint API。 - 微服务架构:讨论如何利用OSGi的模块化特性构建微服务,实现松耦合和独立部署。 - AOP在OSGi中的应用:...
在这个项目中,Spring可能被用于管理对象的生命周期,配置事务管理,以及整合其他库(如Hibernate)。`com.yishang.helper.service`和`com.yishang.helper.service.impl`目录下的类可能代表了Spring的服务层接口和...
OSGi可以与Spring框架整合,利用Spring的强大功能进行依赖注入和配置管理。 **步骤**: 1. 添加Spring DM支持库。 2. 配置Spring Bean。 3. 注册服务。 #### 十、OSGi与Hibernate框架的整合 OSGi也可以与...
org.springframework.orm-3.0.0.M4.jar: 整合第三方的ORM框架,如hibernate,ibatis,jdo,以及spring的JPA实现 org.springframework.transaction-3.0.0.M4.jar: 为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和...
在Java中整合SSH(Spring + Struts2 + Hibernate)框架时,需要引入相应的jar包。以下是一些基本的jar包和它们的用途: Spring基本和IOC的jar包: org.springframework.web-x.x.x.RELEASE.jar:在web.xml中配置...
第1章 Spring简介 1 1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用...
第1章 Spring简介 1 1.1 实例化Spring IoC容器 1 1.1.1 问题 1 1.1.2 解决方案 1 1.1.3 工作原理 3 1.2 配置Spring IoC容器中的Bean 4 1.2.1 问题 4 1.2.2 解决方案 4 1.2.3 工作原理 4 1.3 调用...
- 开发框架:Struts, Spring, Hibernate, OSGi等。 - 测试与自动化:了解自动化测试工具和方法,如JMS、Webservices等。 - 项目管理:熟悉敏捷开发流程,如Scrum或Kanban。 3. **项目经验实例** - **中科曙光云...
Eclipse插件是为Eclipse IDE添加特定功能的小型软件组件,可以是用于语法高亮、代码自动完成、调试工具,或者是针对特定技术或框架的支持,如Spring、Hibernate或是Android开发工具。它们让开发者能够定制自己的工作...
5. **集成工具链**:Eclipse插件1可能整合了编译器、构建工具(如Maven、Gradle)、部署工具等,为开发者提供一站式开发解决方案。 6. **第三方库支持**:插件可能包含对常用第三方库的管理,如Spring、Hibernate等...
Jersey 可以与 Spring、Guice 等流行的依赖注入框架集成,也可以与 Hibernate、MyBatis 等 ORM 工具结合,方便开发复杂的 Web 应用。 7. **测试支持**: `jersey-test-framework-provider-grizzly2.jar` 和 `...
了解如何在Eclipse中集成其他开发工具和框架,如Spring,Hibernate,或者使用Eclipse for RCP and RAP进行富客户端应用开发。 总之,"eclipse从入门到精通源码"的学习涵盖了Eclipse的基础使用、进阶技巧、源码分析...
Struts是Apache软件基金会(ASF)旗下的一个开源项目,它是一个用于构建企业级Java ...开发人员需熟练掌握Struts的配置、Action编写、视图渲染以及与其他技术(如Hibernate、Spring等)的整合,以确保系统的高效运行。
"java"表明Camel是用Java编写的,这意味着它能很好地融入Java生态系统,并且可以与其他Java技术(如Spring、Hibernate等)无缝配合。 "库"意味着Camel是一个可以被其他Java项目引用的库,它为开发者提供了大量的...
3. **框架整合**:如Struts2、Hibernate和Spring的集成,了解它们的工作原理和配置,这是企业级Java开发中的常见组合。 4. **反射操作**:熟练使用反射API,能够动态地创建对象、调用方法和访问字段,这对于理解和...