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()方法.
具体各事务管理器的使用配置方式,还需查看相关的资料