浏览 1840 次
|
锁定老贴子 主题:jdbc和hibernate事务管理问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-08-06 关键字: 事务
最近想把spring的jdbcTemplate和hibernateTemplate一起加入到工程里去,看了一些资料,说如果在同个数据源的情况下,可以使用HibernateTransactionManager。
我自己配了下,不知道下面怎么配置,他们的整合。配置文件在下面 <!-- transaction --> <bean id="TransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <!-- JdbcDaoSupport --> <bean id="jdbcDaoSupport" class=" org.springframework.jdbc.core.support.JdbcDaoSupport"> <property name="jdbcTemplate"> <ref bean="jdbcTemplate" /> </property> </bean> <!-- jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <!-- HibernateTemplate --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!-- BaseProxyTransction --> <bean id="baseTxProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 事务 --> <property name="transactionManager"> <ref local="transactionManager" /> </property> <!-- 拦截器 --> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="del*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="create*">PROPAGATION_REQUIRED</prop> <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2007-08-06
SessionFactory的配置呢?
SessionFactory用同一个DataSource就OK了。同一个数据源。 但是事务管理,还是Jdbc和Hibernate分开的。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-06
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="jdbcUrl"> <value>jdbc:oracle:thin:@192.168.1.56:1521:jmtdb</value> </property> <property name="user"> <value>jmtwww</value> </property> <property name="password"> <value>jmtwww</value> </property> <property name="initialPoolSize"> <value>10</value> </property> <property name="minPoolSize"> <value>5</value> </property> <property name="maxPoolSize"> <value>30</value> </property> <property name="acquireIncrement"> <value>5</value> </property> <property name="maxIdleTime"> <value>10</value> </property> <property name="maxStatements"> <value>0</value> </property> </bean> sessonfactory的配置 <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="lobHandler"> <ref bean="lobHandler" /> </property> <property name="mappingDirectoryLocations"> <list> <value>classpath:/cn/wy/framework/hbm</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.Oracle9Dialect </prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-06
OK了,那你还有什么问题?
|
|
| 返回顶楼 | |
|
最后更新时间:2007-08-06
<beans> <!-- c3p0���Դ --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass"> <value>oracle.jdbc.driver.OracleDriver</value> </property> <property name="jdbcUrl"> <value>jdbc:oracle:thin:@192.168.1.56:1521:jmtdb</value> </property> <property name="user"> <value>jmtwww</value> </property> <property name="password"> <value>jmtwww</value> </property> <property name="initialPoolSize"> <value>10</value> </property> <property name="minPoolSize"> <value>5</value> </property> <property name="maxPoolSize"> <value>30</value> </property> <property name="acquireIncrement"> <value>5</value> </property> <property name="maxIdleTime"> <value>10</value> </property> <property name="maxStatements"> <value>0</value> </property> </bean> <!-- clob,blob 处理 --> <bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" /> <!-- session factory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="lobHandler"> <ref bean="lobHandler" /> </property> <property name="mappingDirectoryLocations"> <list> <value>classpath:/cn/wy/framework/hbm</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.Oracle9Dialect </prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <!-- transaction --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <!-- JdbcDaoSupport --> <bean id="jdbcDaoSupport" class=" org.springframework.jdbc.core.support.JdbcDaoSupport"> <property name="jdbcTemplate"> <ref bean="jdbcTemplate" /> </property> </bean> <!-- jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <constructor-arg><ref bean="datasource"/></constructor-arg> </bean> <!-- HibernateTemplate --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!-- BaseProxyTransction --> <bean id="baseTxProxy" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <!-- 事务 --> <property name="transactionManager"> <ref local="transactionManager" /> </property> <!-- 拦截器 --> <property name="transactionAttributes"> <props> <prop key="save*">PROPAGATION_REQUIRED</prop> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="batch*">PROPAGATION_REQUIRED</prop> <prop key="add*">PROPAGATION_REQUIRED</prop> <prop key="remove*">PROPAGATION_REQUIRED</prop> <prop key="del*">PROPAGATION_REQUIRED</prop> <prop key="update*">PROPAGATION_REQUIRED</prop> <prop key="create*">PROPAGATION_REQUIRED</prop> <prop key="query*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="load*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean id="testService" parent="baseTxProxy"> <property name="target"> <bean class="cn.wy.framework.mvc.demo.jdbc.TestJdbcDAO" autowire="byName" /> </property> </bean> <!-- IOC --> <bean id="jdbcService" class="cn.wy.framework.mvc.demo.jdbc.DemoJdbcDAO" autowire="byType"> <property name="jdbcTemplate"> <ref bean="jdbcTemplate" /> </property> <property name="transactionManager"> <ref bean="transactionManager" /> </property> </bean> </beans> java代码:
import java.util.ArrayList;
import java.util.List;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import cn.wy.framework.comm.util.RequestToDTO;
public class TestJdbcDAO extends JdbcDaoSupport {
public void updateJson(String sql){
this.getJdbcTemplate().update(sql);
}
public List getListJson(String sql,Object obj){
List list = new ArrayList();
list = this.getJdbcTemplate().queryForList(sql);
List arryalist = RequestToDTO.getJdbcObject(list,obj);
return arryalist;
}
}
报错: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testService' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/HibernateException org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:408) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:350) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) root cause org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testService' defined in class path resource [applicationContext.xml]: Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/hibernate/HibernateException org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:254) org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:128) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:955) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156) cn.wy.framework.beanManager.BeanManager.getBean(BeanManager.java:43) cn.wy.framework.beanManager.DIFactory.getTestJdbcDAO(DIFactory.java:30) cn.wy.framework.mvc.demo.web.controller.TestController.testList(TestController.java:51) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:585) org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:434) org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:372) org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:45) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:806) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:736) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:350) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) root cause java.lang.NoClassDefFoundError: org/hibernate/HibernateException java.lang.Class.getDeclaredConstructors0(Native Method) java.lang.Class.privateGetDeclaredConstructors(Class.java:2328) java.lang.Class.getConstructor0(Class.java:2640) java.lang.Class.getDeclaredConstructor(Class.java:1953) org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:59) org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:52) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:639) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:625) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156) org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:246) org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:128) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:955) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729) org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416) org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245) org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242) org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156) cn.wy.framework.beanManager.BeanManager.getBean(BeanManager.java:43) cn.wy.framework.beanManager.DIFactory.getTestJdbcDAO(DIFactory.java:30) cn.wy.framework.mvc.demo.web.controller.TestController.testList(TestController.java:51) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) java.lang.reflect.Method.invoke(Method.java:585) org.springframework.web.servlet.mvc.multiaction.MultiActionController.invokeNamedMethod(MultiActionController.java:434) org.springframework.web.servlet.mvc.multiaction.MultiActionController.handleRequestInternal(MultiActionController.java:372) org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:45) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:806) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:736) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:396) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:350) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-06
测试的是testService
跟下面的那个jdbcService没关系 |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-06
而且异常是:
NoClassDefFoundError: org/hibernate/HibernateException |
|
| 返回顶楼 | |
|
最后更新时间:2007-08-06
这个异常解决了,少了个jar
extends了JdbcDaoSupport,注入这里有点问题 |
|
| 返回顶楼 | |




