实战记录:从EclipseLink迁移到Hibernate上(1)替换
2016-06-03 17:29
579 查看
前言
正在做的项目因为用了比较老,所以JTA居然还用老古董的EclipseLink,这玩意曾经把我坑惨,比如:JBoss会莫名其妙的偶现’eclipseLink Module not found’而导致PU无法persistence,从而导致整个EAR无法deploy的问题(虽然我不确定是不是和EclipseLink有关)。又比如:
系统中集成了jBpm之后,由于jbpm用的是另外一个datasource,jta用的是hibernate,整个软件同时存在两个datasource,两个jta,多个persistence.xml,这个导致复杂的transaction控制问题,不得不用web api封装jbpm才算是workaround过去。
所以我就一直想把eclipseLink换成hibernate,无奈一开始评估工作量太多,一直没有开始。昨天闲来无事,把这个事情做了,花了一天半的时间,系统终于迁移到了hibernate上,算是功德一件,在这里给大家share一下。不过因为每个软件的设计不一样,这篇文章只是我个人的记录,对大家不一定会起到很多帮助作用,看客们权当看着玩玩吧。
persistence.xml
首先来改一下persistence.xml,主要是改jta的provider和properties.(以下改动是针对所有包含了eclispelink的persistence.xml)old persistence.xml
src:<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>jdbc/aswuDS</jta-data-source> <properties> </properties>
test:
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>jdbc/aswuDS</jta-data-source> <properties> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value="sa"/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test_db;DB_CLOSE_DELAY=-1"/> <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> <property name="eclipselink.ddl-generation.output-mode" value="database"/> <property name="eclipselink.logging.level.sql" value="FINE"/> <property name="eclipselink.logging.parameters" value="true"/> </properties>
new persistence.xml
src:<provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>jdbc/aswuDS</jta-data-source> <properties> </properties>
test:
<provider>org.hibernate.ejb.HibernatePersistence</provider> <jta-data-source>jdbc/aswuDS</jta-data-source> <properties> <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value="sa"/> <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test_db;DB_CLOSE_DELAY=-1"/> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> <property name="hibernate.max_fetch_depth" value="3"/> <property name="hibernate.show_sql" value="false"/> <property name="hibernate.id.new_generator_mappings" value="false"/> <property name="hibernate.flushMode" value="FLUSH_AUTO" /> <property name="hibernate.hbm2ddl.auto" value="create-drop" /> </properties>
POM.xml
去掉eclipseLink,引入hibernate, .(以下改动是针对所有包含了eclispelink的pom.xml):寻找之前pom所有有”< artifactId>eclipselink< /artifactId>”的地方,替换为了hibernate-core和hibernate-entitymanager两个包;而所有有eclipse.javax.persistence的地方,替换为hibernate-jpa-2.1-api。这里我特意exclusion了antlr,否则hibernate会要求增加更多的dependency,在这里对我来说是不必要的。old pom.xml
<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>${eclipselink.version}</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>${javax.persistence.version}</version> </dependency> <dependency>
new pom.xml
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>${hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> <exclusions> <exclusion> <groupId>antlr</groupId> <artifactId>antlr</artifactId> </exclusion> </exclusions> <dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>${hibernate.jpa.api.version}</version> </dependency>
修改完了以上这些算是完成了第一步,接下来的调试才是重头戏,因为虽然eclipselink和hibernate都实现了javax.persistence的接口,但实际上他们还是有区别的,之前的代码都是按照eclipselink的实现来写的,现在转到hibernate上,必然有代码的改动
相关文章推荐
- jenkins------部署项目到jboss eap下
- Jboss 5启动后只能从本机访问,不能从远程访问的解决办法
- Hibernate Oracle sequence的使用技巧
- jsp Hibernate批量更新和批量删除处理代码
- jsp hibernate的分页代码第1/3页
- Struts2+Hibernate实现数据分页的方法
- Hibernate环境搭建与配置方法(Hello world配置文件版)
- JAVA+Hibernate 无限级分类
- SSH整合中 hibernate托管给Spring得到SessionFactory
- jsp hibernate 数据保存操作的原理
- hibernate中的增删改查实现代码
- 解决hibernate+mysql写入数据库乱码
- java优化hibernate性能的几点建议
- java Hibernate延迟加载
- hibernate 常用方法介绍
- 详解Java的Hibernate框架中的注解与缓存
- 浅析Java的Hibernate框架中的继承关系设计
- Hibernate实现批量添加数据的方法
- Hibernate4在MySQL5.1以上版本创建表出错 type=InnDB
- JQuery+Ajax+Struts2+Hibernate框架整合实现完整的登录注册