spring的事务管理:
1. AbstractPlatformTransationManager定义了事务操作的基本流程:
获得事务(判断当前是否有事务,事务传播是否合法)
开始事务
提交事务
回滚事务
事务结束后清理资源,释放连接
2. Spring抽象出了Transaction代表事务,执行事务的提交,回滚等操作,定义了TransactionStatus代表事务的状态,设置事务的属性,为程序员设置事务回滚提供了接口。利用静态类和threadLocal对象存储线程独立的Transaction,Datasource信息(同一事务中对同一数据源是一个连接)
3. 对单数据源事务,spring不仅抽象出事务,还插手了连接的获得与释放,如DataSourceTransactionManager,HibernateTransactionManager,IBATIS,JPA等
4. 对分布式事务(JTA,用XA协议实现),spring的主要工作是抽象出统一的调用接口JTATransactionManager,连接管理还是由分布式事务管理器自己实现。如Jboss,Jotm,atomiks等。
5. 可以采用编程式事务,利用spring提供的TransactionTemplate或TransactionManager。
也可以利用AOP,配置实现事务管理。
6. 对事务的传播级别,一般为required。
开始事务时:此时如果有事务,则不新生成事务,而且返回一个TransactionStatus,但isNewTransaction为false,Transaction是同一个。
提交事务时:如果transactionStatus的isNewTransaction为false,则不提交。
回滚事务时:如果transactionStatus的isNewTransaction为false,则设置rollbackOny为true。
7. 如果事务的传播级别为,nested,则对单数据源事务通过调用jdbc3.0的savepoint api实现嵌套事务,分布式事务不是。
8. 如果事务的传播级别为required_new,则会新起一个事务,对DataSoureTransactionManager,则新起一个连接,同时将原事务挂起,将原事务资源放到新起的事务的suspendResource属性中,如果新事务提交或者回滚,则在结束时调用resume方法将原事务还原。