前言
openJPA1.2.2与spring2.5.6的整合,确实费了我很大功夫才搞定。深夜整理成教程与大家分享。本文主要介绍思路,具体实现有很多中,希望朋友们自己探索,同时我也给出了我的代码,大家仔细阅读,一定可以的。openJPA与Hibernate都是JPA规范的实现,但目前使用来看,除了3种实现的扩展功能有差异以外,最主要的是通过中间件来决定使用哪种实现。
下面是业界内比较流行的搭配
JBoss -- Hibernate
SUN Oracle -- TopLink
BEA IBM – OpenJPA
试验环境:
JDK6.0.21
Tomcat6.0.29
Eclipse_3.6_javaee
整合主要分2个部分
JAR包清单
aspectjrt.jar
aspectjweaver.jar
cglib-nodep-2.1_3.jar
commons-collections-3.2.1.jar
commons-dbcp-1.4.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
commons-pool-1.5.4.jar
geronimo-jpa_3.0_spec-1.0.jar
geronimo-jta_1.1_spec-1.1.jar
log4j-1.2.16.jar
mysql-connector-java-5.1.13-bin.jar
openjpa-1.2.2.jar
serp-1.13.1.jar
spring.jar
1 简单整合----spring管理EntityManagerFactory
首先,要对web.xml进行spring的初始化配置。
先配置log4j,后配置spring管理。
其次,配置log4j.properties
第三,配置OpenJPA的/META-INF/persistence.xml
最后,把EntityManagerFactory配制到applicationContext.xml中,如果使用的是tomcat作为WEB容器则推荐配合spring-tomcat-weaver.jar使用。
2 高级整合----spring管理Transaction
首先,配置自动装载EntityManager
其次,配置事务管理器
第三,配置切面
第四,配置具体方法及事务参数
3 关于java代码的调用
有2种,在spring文档里都有说明,本文只给一个提醒。这么调用的原因很简单,必须要拿到Spring管理的对象,否则事务将不能被spring控制。
方法一(推荐)
@PersistenceContext
private EntityManager em;
方法二
EntityManagerFactory emf;
@PersistenceUnit
public void setEntityManagerFactory(EntityManagerFactory emf) {
this.emf = emf;
}
4entity
如果单纯使用OpenJPA或者只是与Spring简单整合,直接使用Entity即刻.若整合了Transaction,则EntityBean需要实现接口java.io.Serializable才可以使用.
5项目结构图