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来记载事务状态的信息。

 

posted on 2018-02-04 11:12  dfsgfsgsg  阅读(341)  评论(0)    收藏  举报

导航