Spring学习(六)—事务的相关接口
1.PlatformTransactionManager
org.springframework.transaction.PlatformTransactionManager是Spring事务抽象的核心接口,主要作用是为应用程序提供事务界定 的统一方式。其代码如下:
public interface PlatformTransactionManager{ TransactionStatus getTransaction(TransactionDefinition definition)throws TransactionException; void commit(TransactionStatus status)throws TransactionException; void rollback(TransactionStatus status)throws TransactionException; }
其依赖关系图:

PlatformTransactionManager负责界定事务边界。TransactionDefinition负责定义事务相关属性,包括隔离级别、传播行为。PlatformTransactionManager参照TransactionDefinition的属性定义来开启相关事务。事务开启到结束期间的事务状态由TransactionStatus负责。
PlatformTransactionManager的整个抽象体系基于策略(strategy)模式,具体的界定策略的实现规则由其实现类负责。PlatformTransactionManager的实现类可以分为面向局部事务和全局事务。
关于局部事务和全局事务详情可以看如下连接:http://blog.csdn.net/lhl6688/article/details/43052163
(1)关于面向局部事务,Spring为各种数据访问提供了现成的实现类支持:

如果我们的应用需要同时使用Hibernate和JDBC进行数据访问,就可以使用HibernateTransactionManager进行统一管理,只要Hibernate的sessionFactory和JDBC引用的是同一个dataSource就可以。
(2)关于全局事务
全局事务由应用服务器通过JTA进行管理。JtaTransactionManager对各种JTA实现提供的分布式事务支持进行了统一的封装,只不过它的所有的事务管理操作最终都委派给具体的JTA实现来完成
二、TransactionDefinition
TransactionDefinition需要有相应的实现类提供支持,其相关继承图如下:

TransactionTemplate是spring提供的进行编程式事务的模版类。
DefaultTransactionDefinition接口的默认实现类,提供了各属性的默认值,通过setter方法可以更改这些默认值:
(1)propagationBehavior=PROPAGATION_REQUIRED
(2)isolationLevel=ISOLATION_DEFAULT(red committed)
(3)timeout=TIMEOUT_DEFAULT
(4)readOnly=false
TransactionAttribute主要使用AOP进行声明式事务场合,还添加了rollbackOn的实现,当异常类型为unchecked exception的情况下回滚事务。
RuleBasedTransactionAttribute允许同时指定多个回滚规则,包括RollbackRuleAttribute或NoRollbackRuleAttribute的List形式提供。其rollbackOn将使用传入的异常类型与这些回滚规则进行匹配,然后决定是否要回滚事务。
DelegationTransactionAttribute是个抽象类,存在目的是被子类化,它会将所有的方法调用委派给另一个具体的TransactionAttribute实现类,如DefaultTransactionAttribute或RuleBasedTransactionAttribute。
三、TransactionStatus
TransactionStatus可以进行以下工作:
(1)使用TransactionStatus提供相应的方法查询事务状态
(2)通过setRollbackOnly()方法标记当前事务以使其回滚
(3)如果相应的PlatformTransactionManager支持Savepoint,可以通过TransactionStatus在当前事务内部创建嵌套事务。
其继承结构如下:

SavepointManager是在JDBC3.0的基础上,对Savepoint的支持提供抽象。通过继承该接口,TransactionStatus获得管理savepoint能力,从而支持创建内部嵌套事务。
Spring事务框架内的TransactionManager的实现大都借助于DefaultTransactionStatus来记载事务状态的信息。
浙公网安备 33010602011771号