Spring事务管理器分类

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时的事务管理器

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,它在上下文中已经定义好了。

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 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()方法。

4  JTA事务:
如果你上面所有的事务管理器都不符合你的需要,,或者你的应用是多资源交错的事务,那么.你可以使用JTA的事务管理器

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" />

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

具体各事务管理器的使用配置方式,还需查看相关的资料

猜你喜欢

转载自miaoxianjie.iteye.com/blog/2062073