Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口PlatformTransactionManager,从而能支持各种数据访问框架的事务管理,

PlatformTransactionManager接口定义如下:

public interface PlatformTransactionManager {  TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;  void commit(TransactionStatus status) throws TransactionException;  void rollback(TransactionStatus status) throws TransactionException;
}
  • getTransaction():返回一个已经激活的事务或创建一个新的事务(根据给定的TransactionDefinition类型参数定义的事务属性),返回的是TransactionStatus对象代表了当前事务的状态,其中该方法抛出TransactionException(未检查异常)表示事务由于某种原因失败。
  • commit():用于提交TransactionStatus参数代表的事务,具体语义请参考Spring Javadoc;
  • rollback():用于回滚TransactionStatus参数代表的事务,具体语义请参考Spring Javadoc。

TransactionDefinition接口定义如下:

public interface TransactionDefinition {  int getPropagationBehavior();  int getIsolationLevel();  int getTimeout();  boolean isReadOnly();  String getName();
} 
  • getPropagationBehavior():返回定义的事务传播行为;
  • getIsolationLevel():返回定义的事务隔离级别;
  • getTimeout():返回定义的事务超时时间;
  • isReadOnly():返回定义的事务是否是只读的;
  • getName():返回定义的事务名字。

TransactionStatus接口定义如下:

    public interface TransactionStatus extends SavepointManager {  boolean isNewTransaction();  boolean hasSavepoint();  void setRollbackOnly();  boolean isRollbackOnly();  void flush();  boolean isCompleted();  }  
  • isNewTransaction():返回当前事务状态是否是新事务
  • hasSavepoint():返回当前事务是否有保存点
  • setRollbackOnly():设置当前事务应该回滚;
  • isRollbackOnly(():返回当前事务是否应该回滚;
  • flush():用于刷新底层会话中的修改到数据库,一般用于刷新如Hibernate/JPA的会话,可能对如JDBC类型的事务无任何影响;
  • isCompleted():当前事务否已经完成。

内置事务管理器实现

Spring提供了许多内置事务管理器实现:

  • DataSourceTransactionManager:位于org.springframework.jdbc.datasource包中,数据源事务管理器,提供对单个javax.sql.DataSource事务管理,用于Spring JDBC抽象框架、iBATIS或MyBatis框架的事务管理;
  • JdoTransactionManager:位于org.springframework.orm.jdo包中,提供对单个javax.jdo.PersistenceManagerFactory事务管理,用于集成JDO框架时的事务管理;
  • JpaTransactionManager:位于org.springframework.orm.jpa包中,提供对单个javax.persistence.EntityManagerFactory事务支持,用于集成JPA实现框架时的事务管理;
  • HibernateTransactionManager:位于org.springframework.orm.hibernate3包中,提供对单个org.hibernate.SessionFactory事务支持,用于集成Hibernate框架时的事务管理;该事务管理器只支持Hibernate3+版本,且Spring3.0+版本只支持Hibernate 3.2+版本;
  • JtaTransactionManager:位于org.springframework.transaction.jta包中,提供对分布式事务管理的支持,并将事务管理委托给Java EE应用服务器事务管理器;
  • OC4JjtaTransactionManager:位于org.springframework.transaction.jta包中,Spring提供的对OC4J10.1.3+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持;
  • WebSphereUowTransactionManager:位于org.springframework.transaction.jta包中,Spring提供的对WebSphere 6.0+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持;
  • WebLogicJtaTransactionManager:位于org.springframework.transaction.jta包中,Spring提供的对WebLogic 8.1+应用服务器事务管理器的适配器,此适配器用于对应用服务器提供的高级事务的支持。

Spring不仅提供这些事务管理器,还提供对如JMS事务管理的管理器等,Spring提供一致的事务抽象如图9-1所示。

                                                                                                                 图9-1 Spring事务管理器

在Spring配置文件中定义事务管理器:

一、声明对本地事务的支持:

a)JDBC及iBATIS、MyBatis框架事务管理器

    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  <property name="dataSource" ref="dataSource"/>  </bean>  

通过dataSource属性指定需要事务管理的单个javax.sql.DataSource对象。

b)Jdo事务管理器

    <bean id="txManager" class="org.springframework.orm.jdo.JdoTransactionManager">  <property name="persistenceManagerFactory" ref="persistenceManagerFactory"/>  </bean>  

通过persistenceManagerFactory属性指定需要事务管理的javax.jdo.PersistenceManagerFactory对象。

c)Jpa事务管理器

<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">  <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean> 
通过entityManagerFactory属性指定需要事务管理的javax.persistence.EntityManagerFactory对象。还需要为entityManagerFactory对象指定jpaDialect属性,该属性所对应的对象指定了如何获取连接对象、开启事务、关闭事务等事务管理相关的行为。
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">  ……  <property name="jpaDialect" ref="jpaDialect"/>  </bean>  <bean id="jpaDialect" class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>  

d)Hibernate事务管理器

    <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  <property name="sessionFactory" ref="sessionFactory"/>  </bean>  

通过entityManagerFactory属性指定需要事务管理的org.hibernate.SessionFactory对象。

本文转载自开涛的博客,转载请注明出处【http://sishuok.com/forum/blogPost/list/0/2503.html】

Spring事物管理器TransactionManager解析相关推荐

  1. spring事物管理--声明式(AspectJ)注解实现 (推荐使用)

    1.表结构及数据 2.使用的jar包 3.service.Dao层接口与实现类: Dao接口: //转账案例持久层接口 public interface AccountDao {/*** @param ...

  2. spring事务管理器的作用_【面试必问】Spring中的事务管理详解

    在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...

  3. Spring事物管理(二)

    Spring事物处理规则: 运行时异常,默认回滚. 编译异常,默认提交. 事物案例:购买股票 数据库脚本 /* SQLyog v10.2 MySQL - 5.6.24 : Database - y21 ...

  4. MyBatis6:MyBatis集成Spring事物管理(下篇)

    前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...

  5. spring事物管理

    一)spring的事务管理      事务管理并非spring独有,用过JDBC hibernate的朋友都知道,这些api和框架都提供了自己的事务管理机制.那么spring的事务管理又有些什么与众不 ...

  6. 5.3 Spring事物管理详解 我的程序猿之路:第四十二章

    目录 1.事务介绍 2.事务的四个特性(ACID) 3.Spring 事务管理的核心接口 4. PlatformTransactionManager  事务管理器 5.TransactionStatu ...

  7. Spring事务管理器的配置和使用

    Spring事务管理器的配置和使用 1.为什么要配置spring事务管理器. 在将spring和hibernate结合之后,我们需要将事务管理交给spring管理.以保证数据的安全型,避免脏数据的出现 ...

  8. 自定义事务管理器TransactionManager对象

    自定义事务管理器TransactionManager对象 以aop思想,实现事务管理切面 1. DataSource注册容器 <?xml version="1.0" enco ...

  9. Spring AOP事务实现原理之事务管理器TransactionManager

    流程图 该图介绍了事务的传播行为 该流通图展示的是TransactionManager具体如何结合事务的传播行为进行事务获取 该流通图展示的是TransactionManager具体如何结合事务的传播 ...

最新文章

  1. switch case in protected scope 异常解决
  2. 【计算机网络】第五章 数据链路层(3)
  3. 为Process.waitFor设置超时
  4. 如何生成安全的密码 Hash:MD5, SHA, PBKDF2, BCrypt
  5. 深度linux_深度:图文带你走进Linux系统结构
  6. slf4j和log4j的使用
  7. java 正则表达式 替换 html,java 正则表达式 替换 html
  8. Windows开发之——局域网内搭建论坛
  9. android studio定位gps
  10. AD9361 介绍 (上)
  11. 非确定有限自动机转换为确定有限自动机
  12. html5 视频字幕制作工具,短视频如何添加字幕?10分钟学习5款视频字幕制作工具,干货!...
  13. 老java程序员告诉你要不要选择外包,外包公司的好处你知道吗
  14. linux texlive 卸载,[linux-018] ubuntu安装texlive 2020用xelatex编译一个简单tex示
  15. 如何用美剧真正提升你的英语水平
  16. 开源项目之电驴emule
  17. Windows复制文件提示指定的文件名无效或太长
  18. Linux内核源代码获取教程
  19. 数据化管理为什么对企业那么重要?
  20. PVE虚拟化平台之创建虚拟机流程

热门文章

  1. 北大深圳研究生院智慧科学计划田永鸿/余珂联合博士后招聘启事
  2. 茧数SCRM营销自动化的短链接
  3. resnet,retinanet,fpn网络结构及pytorch实现代码
  4. android浏览器中 MUI 点击事件不触发的解决方法
  5. c语言程序的类型文件是什么,C语言中的文件结构类型FILE
  6. 最小外接矩形(RotatedRect返回角度angle、width、height问题)
  7. svg js动态生成svg标签
  8. APIO2016 Fireworks
  9. oracle 查询磁盘读写,监控磁盘读写状况
  10. TI RM57 如何配置RTI作为定时器使用