精华帖 (1) :: 良好帖 (4) :: 新手帖 (1) :: 隐藏帖 (5)
|
|
---|---|
作者 | 正文 |
发表时间:2011-01-17
最后修改:2011-02-01
最近在做个项目,JPA使用了hibernate3.6.后来觉得JPA单独使用不是很给力,于是就想到了和spring集成.刚开始,我是用spring2.5.6和hibernate3.6集成的,屡次不成功.后来研究发现,hibernate3.6的JPA是2.0的.狂晕.下面是spring3.0.5(支持JPA2.0)和hibernate3.6集成,其中源代码在附件里, 只有spring3.0.5的官方标准包,需要大家自己下载了,然后添加到WEB-INF/lib下,因为附件大小限制在了10M,所以除spring3.0.5官方包外其他所有的包以及数据库的SQL语句,都在本例中,若有需要,可以留言. 二 实验环境及公共环境配置 1.准备工具 eclipse3.6.1_javaee jdk1.6.0.23 tomcat6.0.30 mysql5.1.54 包 1)mysql mysql-connector-java-5.1.14-bin.jar 2)log4j log4j-1.2.16.jar 3)spring3.0.5 org.springframework.aop-3.0.5.RELEASE.jar org.springframework.asm-3.0.5.RELEASE.jar org.springframework.beans-3.0.5.RELEASE.jar org.springframework.context-3.0.5.RELEASE.jar org.springframework.core-3.0.5.RELEASE.jar org.springframework.expression-3.0.5.RELEASE.jar org.springframework.jdbc-3.0.5.RELEASE.jar org.springframework.orm-3.0.5.RELEASE.jar org.springframework.transaction-3.0.5.RELEASE.jar org.springframework.web-3.0.5.RELEASE.jar 自己下载的spring相关包,AOP时候用的 aopalliance.jar aspectjrt.jar aspectjweaver.jar cglib-nodep-2.2.jar commons-logging-1.1.1.jar 4)hibernate3.6 antlr-2.7.6.jar commons-collections-3.2.1.jar dom4j-1.6.1.jar hibernate-jpa-2.0-api-1.0.0.Final.jar hibernate3.jar javassist.jar jta-1.1.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar 2.tomcat数据源 文件位置:WebContent/META-INF/context.xml <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/test" type="javax.sql.DataSource" username="root" password="147258369" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.l:3306/test?autoReconnect=true" initialSize="1" maxActive="5" minIdle="1" maxIdle="5" validationQuery="select count(*) from dual" testOnBorrow="true" testOnReturnw="true" testWhileIdlew="true" minEvictableIdleTimeMillis="1800000" timeBetweenEvictionRunsMillis="300000" maxWait="1000" removeAbandoned="true" removeAbandonedTimeout="180" /> </Context> 3.log4j配置 文件位置:src/log4j.properties log4j.rootLogger=DEBUG,appender1 # org.springframework包下面所有的日志输出的级别设为INFO log4j.logger.org.springframework=INFO # 控制台输出 log4j.appender.appender1=org.apache.log4j.ConsoleAppender log4j.appender.appender1.layout=org.apache.log4j.PatternLayout log4j.appender.appender1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss:SSS}[%p]: %m%n # 立即输出 log4j.appender.appender1.immediateFlush=true 三 搭建hibernate3.6(JPA)环境 利用MySQL5.1.54的test库,前提是test库的编码要是UTF8 test有3个字段 id,name,age src/META-INF/persistence.xml <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="sh" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.ejb.HibernatePersistence</provider> <non-jta-data-source>java:comp/env/jdbc/test</non-jta-data-source> <class>com.phl.entity.User</class> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> <property name="hibernate.connection.autocommit" value="true" /> </properties> </persistence-unit> </persistence> 四 搭建spring3.0.5环境 1.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>sh</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- log4j 必须要在最前面 --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <context-param> <param-name>webAppRootKey</param-name> <param-value>webApp.root</param-value> </context-param> <!-- Spring初始化 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> </web-app> 2.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <bean id="user" class="com.phl.entity.manager.UserImpl" /> </beans> 五 搭建hibernate3.6与spring3.0.5集成环境 1.applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <bean id="user" class="com.phl.entity.manager.UserImpl" /> <bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <!-- 此种方式不推荐,对jpa的侵入性太强,除非数据库连接池也在spring中配置 <property name="dataSource" ref="dataSource" /> --> <property name="persistenceUnitName" value="sh" /> </bean> <!-- 自动装载EntityManager --> <context:annotation-config /> <!-- 配置事务管理器 --> <bean id="myTxManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="myEmf" /> </bean> <!-- 配置切面 --> <aop:config> <aop:pointcut expression="execution(* com.phl.entity.manager.*.*(..))" id="myTx1"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="myTx1"/> </aop:config> <!-- 配制具体方法及事务参数 --> <tx:advice id="txAdvice" transaction-manager="myTxManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <!-- 事务传播行为类型 REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。 REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。 NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。 NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 --> </beans> 六 总结 集成的过程看着很乱,其实很简单,初始化环境是首先要配置好log4j和tomcat数据源,如果没有特殊要求,我们一般配在工程下面context,而不是tomcat的全局数据源 1。首先可以独立使用hibernate3.6 2。可以独立使用spring3.0.5 3。可以由spring管理hibernate3.6的EntityManager:好处是不用关闭EntityManager,获得像在ejb3下面使用JPA一样的快感 4。可以由spring来管理事务:好处是不用每提提交事务,由spring帮助完成提交 最后祝大家开发愉快,如果有任何问题,都可以留言,我会第一时间给大家解答.本文也并不是什么高端的文章,只是给自己当个笔记记录下来.如有不当之处,请各位同仁理解. 版权所有-转载请说明出处. 补充: 1.spring3.0.5的下载地址 http://s3.amazonaws.com/dist.springframework.org/release/SPR/spring-framework-3.0.5.RELEASE-with-docs.zip 2.若干别错字进行了修正 3.标题改了一下,因为只是与jpa2.0集成,没有用到hibernate的专用接口 4.精简spring3.0.5包,同时附件上传必须的spring3.0.5包 作者简介 昵称:澳洲鸟 姓名:朴海林 QQ:85977328 MSN:6301655@163.com 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-01-18
个人比较懒,嘿嘿…可以整体打包压缩发出来不?
|
|
返回顶楼 | |
发表时间:2011-01-18
两位的头像真是形成鲜明的对比!!!
|
|
返回顶楼 | |
发表时间:2011-01-18
onlylau 写道 两位的头像真是形成鲜明的对比!!!
加上你这个表情,太有喜感了@@ |
|
返回顶楼 | |
发表时间:2011-01-18
其实楼上的头像也挺high的
|
|
返回顶楼 | |
发表时间:2011-01-18
最后修改:2011-01-18
引用 <context-param>
<param-name>webAppRootKey</param-name> <param-value>webApp.root</param-value> </context-param> 这样写? |
|
返回顶楼 | |
发表时间:2011-01-18
嗯,各位的头像都很high啊...
|
|
返回顶楼 | |
发表时间:2011-01-18
你们头像都很high!
|
|
返回顶楼 | |
发表时间:2011-01-19
多个楼主的 帖子 说两句啊! 这么给力的东东!!!
|
|
返回顶楼 | |
发表时间:2011-01-19
如果你使用maven,就不至于这么痛苦的引包了
|
|
返回顶楼 | |