论坛登陆 用户名:  密 码:
设为首页  加入收藏
08年北京名校秋季招生
名牌院校免试入学宽进严出,突破考分限制,名校与你零距离,以下院校按报名先后顺序录取,24小时网上报名覆盖全国
  您现在的位置: 中国教育招生在线 >> IT >> JAVA认证 >> IT正文
Spring开发基础之Spring事务管理
 作者:佚名     2007-3-14 17:34:56        来源:不详  浏览次数:

 

 

 

 

 

 

 

 

spring提供的事务管理 
 
      spring提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。
 
传统使用JDBC的事务管理
================ 
以往使用JDBC进行数据操作,使用DataSource,从数据源中得到Connection,我们知道数据源是线程安全的,而连接不是线程安全的,所以对每个请求都是从数据源中重新取出一个连接。一般的数据源由容器进行管理,包括连接池。例如TOMCAT,WEBSPHERE,WEBLOGIC等这些J2EE商业容器都提供了这个功能。
 
以往的我们使用JDBC在写代码时,事务管理可能会是这样:
Connection conn = null;
try
{
     conn  = DBConnectionFactory.getConnection;
     conn.setAutoCommit(false);
     //do something
     conn.commit(); //commit transcation
}
catch(Exception e)
{
    conn.rollback();
    //do sth
}
finally
{
     try
     {
         conn.close();
     }
     catch(SQLException se){ //do sth.}
     //close ResultSet,PreparedStatement,Connection 
    //notice:Maybe ocurr Exception when u close rs,pstmt,conn
}
 
按照以往的思路来写代码,代码量比较长,而且容易疏忽,忘掉一些try/catch,引发一些异常无法catch,虽然有时候我们会写DBTool类,来关闭这些资源,并且保证在关闭这些资源时,不向外抛异常。
 
spring提供的编程式的事务处理
 ==================
spring提供了几个关于事务处理的类: TransactionDefinition //事务属性定义
TranscationStatus //代表了当前的事务,可以提交,回滚。
PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。
 
我们使用编程式的事务管理流程可能如下:
1 声明数据源
2 声明一个事务管理类,例如DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等
3 在我们的代码中加入事务处理代码:
TransactionDefinition td = new TransactionDefinition();
TransactionStatus ts = transactionManager.getTransaction(td);
try
{ //do sth
  transactionManager.commit(ts);
}
catch(Exception e){transactionManager.rollback(ts);}
 
使用spring提供的事务模板TransactionTemplate
void add()
{
    transactionTemplate.execute( new TransactionCallback(){
        pulic Object doInTransaction(TransactionStatus ts)
       { //do sth}
    }
}
TransactionTemplate也是为我们省去了部分事务提交、回滚代码;定义事务模板时,需注入事务管理对象.
 
spring声明式事务处理
=============
spring声明式事务处理也主要使用了ioc,aop思想,提供了TransactionInterceptor拦截器和常用的代理类TransactionProxyFactoryBean,可以直接对组件进行事务代理。
 
使用TransactionInterceptor步骤
1.定义数据源,事务管理类
2.定义事务拦截器,such as:

  
  
   
        com.test.UserManager.*r=PROPAGATION_REQUIRED
    

  

3.为组件声明一个代理类:ProxyFactoryBean

      com.test.UserManager
      
         
            
         

      
 
 
使用TransactionProxyFactoryBean:

  
  
  
   
    PROPAGATION_REQUIRED
    PROPAGATION_REQUIRED
    PROPAGATION_REQUIRED,readOnly
   

  
 
 
TransactionProxyFactoryBean只是为组件的事务代理,如果我们要给组件添加一些业务方面的验证等,可以使用TransactionTemplate加拦截器方式,为组件添加多个拦截器,spring AOP中提供了三类Advice,即前增强,后增强,抛出异常时的增强,可以灵活使用。


责任编辑:lss
  相关新闻
Spring MVC framework总体分析
Spring MVC framework总体分析
2005年9月全国计算机等级考试二级Visual FoxPro笔试试
Spring VS. HiveMind
Jsp中的Application使用
Visual FoxPro 中的错误处理
快速上手Spring--4.安装和使用IDE
思科认证心得:OSPF经验总结
快速上手Spring--5.Bean的标志符
CISCO最新CCSP认证介绍
2005年9月全国计算机等级考试二级Visual FoxPro笔试试
CISCO最新CCSP认证介绍
思科认证心得:OSPF经验总结
微软新推Dynamics社区 打造Myspace商务版
快速上手Spring--5.Bean的标志符
快速上手Spring--4.安装和使用IDE
快速上手Spring--6.Singleton的使用
快速上手Spring--10.任意方法的替换
快速上手Spring--9.Lookup方法注入
快速上手Spring--8.集合对象注入
  评论
现在有100人对本文发表评论
查看所有评论
 
推  荐
 
100本成功必读热销书
热门招生
  北京文理研修学院   前进大学
  北京明园大学   北京建设大学
  北京邮电大学世纪学院   北方工商管理学院
  联想软件定向委培班   香港数码动画学院
  青年企业管理研修学院   北京华夏管理学院
热门培训
网络化办公专家培训认证 电子科技大学软件学院
软件测试工程师培训认证 北大青鸟十大授权培训
IT硬件工程师培训认证班 北京环球雅思荷兰预科
JAVA开发工程师培训 潜能时代IT服务管理培训
网络信息化工程师培训 清华大学继续教育学院
论坛精选
 
有些细节是男人也该注意的风度!最容易读错的字
某强人手机里保存的30条短信 中国十大高薪职业
最感人的十大韩剧经典台词 嫁给工程师的N个理由
爆强!只有一句话的鬼故事 转贴教你如何做妖精
 女人一定要記住的話 女人最好别嫁给最爱的男人
城市联盟
 大连 上海 天津 广州 西安 深圳  天津  青岛  大连  福州  沈阳  青海  连云港  南京  吉林  厦门  威海  辽宁  呼和浩特
Copyright © 2006   www.edu999.com   All rights reserved. 中国教育招生在线  版权所有
北京市通信管理局[2004]字第552号函    京ICP证040442号