zoukankan      html  css  js  c++  java
  • Spring事务管理器分类

    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

  • 相关阅读:
    SpringMVC使用ResponseEntity实现文件下载,及图片base64的字节数组上传于下载
    File类的createNewFile()和mkdirs() mkdir()
    为什么Java里的Arrays.asList不能用add和remove方法?
    java如何向数组里添加元素
    java里getPath、 getAbsolutePath、getCanonicalPath的区别
    MultipartFile 类
    File类的createNewFile()与createTempFile()的区别
    IntelliJ Idea解决Could not autowire. No beans of 'xxxx' type found的错误提示
    FileInputStream读取的两种方法:逐字节读;以字节数组读取
    JCE cannot authenticate the provider BC
  • 原文地址:https://www.cnblogs.com/I-will-be-different/p/3589989.html
Copyright © 2011-2022 走看看