论坛首页 入门技术论坛

Spring 事务管理,请指教

浏览 3237 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-24  
Spring 事务管理,请指教
我最近要做框架设计, 在对框架进行分析的时候,被 Spring的事务管理机制给迷惑了,
请对Spring的事务管理 熟悉的人给与帮助, 恳请指教; 谢谢

另外,在网络中看到的关于 Spring的事务管理,都是从Spring的帮助文档中照搬的东西,毫无意义,我想结合实际如果能够给与帮助提示是最好不过的了,

针对Spring的 编程式和声明式,两种事务管理方式

我一直在线,谢谢大家的帮助
   发表时间:2007-07-24  
请高手留言,帮我看一下Spring 在管理事务的问题,
我这里有一个系统,是用 Struts+Spring+JDBC 写的,但是关于事务处理这一块,我没有搞明白,希望 高手进来,一同探讨

谢谢大家
0 请登录后投票
   发表时间:2007-07-24  
今天看了两篇Spring事务处理的文章,收获不少,希望大家能够在此帖中多交流,感谢关注
0 请登录后投票
   发表时间:2007-07-26  
我来试着帮你回答:
先看看这个配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
	 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	   <property name="driverClassName">
	      <value>oracle.jdbc.driver.OracleDriver</value>	      
	   </property>
	   <property name="url">
	      <value>jdbc:oracle:thin:@localhost:1521:qqwjz</value>	   
	   </property>
	   <property name="username">
	      <value>wjz</value>
	   </property>
	   <property name="password">
	      <value>wjz</value>
	   </property>
	 
	</bean>	
	
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
	   <property  name="dataSource">
	     <ref local="dataSource"/>
	   </property>
	   <property name="mappingResources">
	      <list>
	         <value>com/wjz/po/Father.hbm.xml</value>
	         <value>com/wjz/po/KwmisSubject.hbm.xml</value>	    	      
	      </list>
	   </property>
	</bean>
	
	<bean id="testServer" class="com.wjz.service.impl.TestServerImpl">
	  <property name="testDao">
	     <bean id="testDao" class="com.wjz.dao.impl.TestDaoImpl">
	        <property name="sessionFactory">
	           <ref local="sessionFactory"/>
	        </property>
	     </bean>	     
	  </property>
	  <property name="kwmisSubjectDao">
	   <bean id="kwmisSubjectDao" class="com.wjz.dao.impl.KwmisSubjectDaoImp">
	        <property name="sessionFactory">
	           <ref local="sessionFactory"/>
	        </property>
	     </bean>		
	  </property>
	</bean>
	
   <bean id="testSpringService" parent="txProxyTemplate">
      <property name="target">
       <ref local="testServer"/>
      </property>
   </bean>
	
   <bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>

	<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="myTransactionManager" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="find*">PROPAGATION_REQUIRED, readOnly</prop>
				<prop key="get*">PROPAGATION_REQUIRED, readOnly</prop>
				<prop key="*">PROPAGATION_REQUIRED,-Exception</prop>
			</props>
		</property>
	</bean>
</beans>


我使用的是Strut+Spring+Hibernate框架,事务管理的数据库连接是Session。你用的是JDBC,配置方面不同,但大同小异
<bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>


把这个事务管理器换成JDBC方式即可。其他的地方都不变。
我想强调的是
<prop key="*">PROPAGATION_REQUIRED[b],-Exception[/b]


Spring中对异常回滚,默认是在抛出运行时异常时才回滚,对非运行时异常无回滚。这里使用了-Exception,意思是对所以的异常(运行时,非运行时)异常都回滚。

另外要想用Spring的事务管理机制,就需要把数据库的连接交给Spring来管理,(JDBC,SESSION道理一样),如果使用Hibernate框架,要把Session交给Spring管理。在整个Service方法调用中,虽然Sevice调用了多个Dao,但是整个过程中Session只有一个。也就是说你对数据库的DML操作,都会先保存在这个Session中,包括update,insert,delete。当发生异常(这个异常可以时数据库的,也可以时程序的),Spring会把这个Session中对应的DML操作回滚。切记在Service中只有一个Session。否则无法回滚。

这是我在使用Spring事务管理机制时候印象很深的地方。虽然没有说的很全,我相信会给你一些帮助的。
要是有问题,可以和我联系QQ:545585662。我们一起研究
0 请登录后投票
   发表时间:2007-07-30  
TO:qqwjz
很高兴认识你啊,老兄,看了一下你的讲解,可是,我工作时间无法上qq的,我们公司管理比较严格,能不能给我msn的联系方式;
我的msn:roundlight@hotmail.com
希望能和你交流, 加我的时候注上 qqwjz ,谢谢帮助!
0 请登录后投票
   发表时间:2007-07-31  
TO: qqwjz

   老兄,怎么没有加我呢? 我确实无法登陆qq,有时间加我,等待和你交流阿
0 请登录后投票
   发表时间:2007-08-09  
spring 事务管理,提出的实际比较早,但是最近在忙框架整合的工作,所以就放下了,没有继续;

进行经过了实例进行测试,终于了重大突破,发现Spring框架的事务管理能力,真是不错, 今天也终于进行了实际的验证测试;

收获多于付出阿,哈哈
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics