Spring框架(JavaEE开发进阶Ⅲ)—选择事务管理器

一、主要内容

1、JDBC事务
2、Hibernate事务
3、Java持久化API事务
4、JTA(Java Transaction API)事务

二、前言

1、Spring并不直接管理事务,而是提供多种事务管理器,将事务管理的职责委托给它们。每个事务管理器充当特定平台的事务实现门面,使得用户在Spring中使用事务时几乎不用关心实际的事务实现细节

三、JDBC事务

1、要在应用中直接使用JDBC进行持久化,需要DataSourceTransactionManager

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
2、dataSource属性值配置成名为dataSource Bean的引用,该Bean定义在Spring上下文中,实现javax.sql.DataSource接口
3、DataSourceTransactionManager通过DataSource获取java.sql.Connection,继而通过Connection来管理事务:调用连接的commit()提交事务,事务失败时调用rollback()回滚事务

四、Hibernate事务

1、如果应用的持久化通过Hibernate实现,则需要HibernateTransactionManager,对于Spring3,要在上下文定义中添加:
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
2、通过sessionFactory的getCurrentSession()可获取当前session,从Hibernate Session中可获取org.hibernate.Transaction对象,HibernateTransactionManager将事务管理职责委托给Transaction对象,通过调用它的commit()方法提交事务,通过它的rollback()方法回滚事务

五、Java持久化API事务

1、如果应用持久化通过JPA来实现,需要用Spring的JpaTransactionManager来处理事务,需要配置:
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
2、JpaTransactionManager将与由EntityManagerFactory产生的JPA EntityManager合作来构建事务

六、JTA(Java Transaction API)事务

1、如果应用中事务跨多个事务资源(比如两个或更多数据库),需要使用JtaTransactionManager,应对分布式事务
2、JtaTransactionManager将事务管理的职责委托给一个JTA的实现,JTA规定了应用与若干个数据源之间协调事务的标准API。transactionManagerName属性指定了要在JNDI上查找的JTA事务管理器
3、JtaTransactionManager将事务管理的职责委托给javax.transaction.UserTransaction和javax.transaction.TransactionManager对象。通过UserTransaction的commit()提交事务,rollback()回滚事务

猜你喜欢

转载自blog.csdn.net/csj50/article/details/79944539