Spring并不直接管理事务,事实上,它是提供事务的多方选择。你能委托事务的职责给一个特定的平台实现,比如用JTA或者是别的持久机制。Spring的事务管理器可以用下表表示:
事务管理器的实例
目标
Org.springframwork.jdbc.datasource.DataSourceTransactionManager
用JDBC的 DataSource 去管理事务
Org.springframwork.orm.hibernate.HibernateTransactionManager
当持久机制是Hibernate时的事务管理器
Org.springframework.orm.jdoTransactionManager
当持久机制是JDO时的事务管理器
Org.springframework.transaction.jta.JtaTransactionManager
用JTA管理事务
Org.springframwork.orm.ojb.PersistenceBrokerTransactionManager
当持久机制是apache的OJB时的事务管理器
3.1 JDBC事务
如果你直接使用JDBC作为持久方案,DataSourceTransactionManager将会为你管理事务的边界。为了能使用DataSourceTransactionManager,我们把下面的XML加到上下文的定义中:
<bean
id="transactionManager" class="org.springframework.jdbc.
Datasource.DataSourceTransactionManager">
<property
name="dataSource">
<ref bean="dataSource"/>

</property>
</bean>
注意:dataSource的属性设置引用一个叫dataSource的BEAN,dataSource可能是一个javax.sql.DataSource
bean,它在上下文中已经定义好了。
3.2 Hibernate事务
如果你使用Hibernate作为持久层,你将会使用HibernateTransactionManager,请在应用的上下文申明如下:
<bean
id="transactionManaager"
class="org.springframework.
Orm.hibernate.HibernateTransactionManager">

<property name="sessionFactory">
<ref
bean="sessionFactory"/>

</property>
</bean>
sessionFacoty
的属性和Hibernate的SessionFactory组合在一块儿。HibernateTransactionManager委托事务管理给一个
net.sf.hibernate.Transactioin事例,它从Hibernate的会话中获得。当一个事务成功结束时,
HibernateTransactionManager会调用Transaction的commit()方法。相似的,一个失败的事务将会调用
rollback()去回滚。
3.3 JDO事务
可能你不喜欢JDBC
和Hibernate,你可以选择JDO去实现你的持久层。如果是这样的话,你可以用JdoTransctionManager,你可以在你的上下文中如下申明:
<bean
id="transactionManager"
Class="org.springframework.orm.jdo.JdoTransactioinManager:>

<property name="persistenceManagerFactory">
<ref
bean="persistenceManagerFactory"/>

</property>
</bean>
为了使用JdoTransctionManager,你需要组合一个具有persistenceManagerFactory
属性的javax.jdo.PersistenceManagerFactory。
其实,JdoTransactionManager和事务对象一起工作,它是从JDO的持久管理器中获得。一个成功的事务会调用commit()方法,而一个失败的事务会调用rollback()方法。
3.4 JTA事务:
如果你上面所有的事务管理器都不符合你的需要,,或者你的应用是多资源交错的事务,那么.你可以使用JTA的事务管理器
JTA事务(Java Transaction
API)是J2EE规范中有关事务的标准。它是容器级别的事务,只能运行在J2EE服务器中。它的最大优势是可以支持分布式的事务,如果系统采用的是分布式的数据库,那么只能选择JTA管理EntityManager事务。
<bean
id="transactionManager" class="org.springframewrok..
Transaction.jtaTransactionmanager">
<property
name="transactionManager">

<value>java:/TransactionManager</valure>

</property>
</bean>
JtaTransactionManager
委托事务管理给JTA的实现.JTA定义了一系列的标准接口;能协调事务,应用和一个或多个数据源. 在这之中,
transactioinManageName属性指向JTA事务管理器. 这个事务管理器能在JNDI中找到. JtaTransactionManager,
javax.transaction.UserTransaction和javax.transaction.TransactionManager对象在一起工作.
所有的事务管理委托给它们完成.
一个成功的事务将会被提交,通过调用UserTransaction.commit()方法,相反,一个失败的事务会调用UserTransaction
的rollback()方法.
 
本文转自:http://blog.csdn.net/xiancaifu/article/details/6639290

Spring事务管理器分类的更多相关文章

  1. spring事务管理器设计思想(2)

    spring事务管理器设计思想(二) 上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当 ...

  2. spring事务管理器设计思想(二)

    上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...

  3. spring事务管理器设计思想(一)

    在最近做的一个项目里面,涉及到多数据源的操作,比较特殊的是,这多个数据库的表结构完全相同,由于我们使用的ibatis框架作为持久化层,为了防止每一个数据源都配置一套规则,所以重新实现了数据源,根据线程 ...

  4. Spring事务管理器的应对

    Spring抽象的DAO体系兼容多种数据访问技术,它们各有特色,各有千秋.像Hibernate是非常优秀的ORM实现方案,但对底层SQL的控制不太方便:而iBatis则通过模板化技术让你方便地控制SQ ...

  5. spring事务管理器的源码和理解

    原文出处: xieyu_zy 以前说了大多的原理,今天来说下spring的事务管理器的实现过程,顺带源码干货带上. 其实这个文章唯一的就是带着看看代码,但是前提你要懂得动态代理以及字节码增强方面的知识 ...

  6. Spring事务管理器

    1.创建实体和接口 public class Bank { private Integer id; private String name; private String manay; public ...

  7. 【面试】足够“忽悠”面试官的『Spring事务管理器』源码阅读梳理(建议珍藏)

    PS:文章内容涉及源码,请耐心阅读. 理论实践,相辅相成 伟大领袖毛主席告诉我们实践出真知.这是无比正确的.但是也会很辛苦. 就像淘金一样,从大量沙子中淘出金子一定是一个无比艰辛的过程.但如果真能淘出 ...

  8. 跟我学Spring3(9.2):Spring的事务之事务管理器

    原文出处: 张开涛9.2.1 概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口PlatformTransactionManage ...

  9. 事务管理(下) 配置spring事务管理的几种方式(声明式事务)

    配置spring事务管理的几种方式(声明式事务) 概要: Spring对编程式事务的支持与EJB有很大的区别.不像EJB和Java事务API(Java Transaction API, JTA)耦合在 ...

随机推荐

  1. 博客换了,比较少用这个博客(http://loid.cf)

    新博客地址: http://loid.cf/

  2. 转载:mybatis和hibernate 解析

    第一章     Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀 ...

  3. 基于live555的视频直播 DM368IPNC RTSP分析

    因需要,从个人的理解顺序和需求角度对live555的分析与开发整理,包含RTSP Server与RTSP Client.如何直播H.264流与JPEG流等,均进行了探讨,对live555的初学者有一定 ...

  4. android2.3 View视图框架源码分析之一:android是如何创建一个view的?

    View是所有控件的一个基类,无论是布局(Layout),还是控件(Widget)都是继承自View类.只不过layout是一个特殊的view,它里面创建一个view的数组可以包含其他的view而已. ...

  5. linux diff具体解释

    diff是Unix系统的一个非常重要的工具程序. 它用来比較两个文本文件的差异,是代码版本号管理的基石之中的一个.你在命令行下,输入: $ diff <变动前的文件> <变动后的文件 ...

  6. Android 属性动画(一)

    1.概述 Android提供了几种动画类型:View Animation .Drawable Animation .Property Animation .View Animation相当简单,不过只 ...

  7. 服务 远程服务 AIDL 进程间通讯 IPC 深化

    示例 aidl接口文件 package com.bqt.aidlservice.aidl; parcelable Person;  package com.bqt.aidlservice.aidl; ...

  8. 第一篇博客关于Log4net的配置记录

    说明:本程序演示如何利用log4net记录程序日志信息.log4net是一个功能著名的开源日志记录组件.利用log4net可以方便地将日志信息记录到文件.控制台.Windows事件日志和数据库(包括M ...

  9. C#。5 函数 类

    函数:能够独立完成某个功能的模块.          好处:1.结构更清析(编写.维护方便 ).2.代码重用.3.分工开发.          四要素:名称,输入(参数),输出(返回的类型),加工(函 ...

  10. Dom对象和jQuery包装集

    Dom对象 在传统的JavaScript开发中,我们经常都是首先获取Dom对象,比如: document.getElementById("dv1"); 我们经常使用getEleme ...