论坛首页 Java版 Spring

jdbc和hibernate事务管理问题

浏览 1840 次
精华帖 (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>

   
最后更新时间:2007-08-06
SessionFactory的配置呢?
SessionFactory用同一个DataSource就OK了。同一个数据源。
但是事务管理,还是Jdbc和Hibernate分开的。
   
0 请登录后投票
最后更新时间: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>
   
0 请登录后投票
最后更新时间:2007-08-06
OK了,那你还有什么问题?
   
0 请登录后投票
最后更新时间: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)


   
0 请登录后投票
最后更新时间:2007-08-06
测试的是testService
跟下面的那个jdbcService没关系
   
0 请登录后投票
最后更新时间:2007-08-06
而且异常是:
NoClassDefFoundError: org/hibernate/HibernateException
   
0 请登录后投票
最后更新时间:2007-08-06
这个异常解决了,少了个jar
extends了JdbcDaoSupport,注入这里有点问题
   
0 请登录后投票
论坛首页 Java版 Spring

跳转论坛:
JavaEye推荐