Spring聲明式事務管理之二:核心接口API

1.Spring事務管理API結構

  Spring事務管理API有100個左右,其中最核心的API有3個,分別是TransactionDefinition、   PlatformTransactionManagerTransactionStatusTransactionDefinition定義事務管理五個屬性,PlatformTransactionManager執行具體的事務,TransactionStatus提供控制事務執行和查詢事務狀態的方法。Spring事務管理主要API結構以下
Spring事務管理主要APIjava

2.三個核心API接口源碼解析  

   TransactionDefinition接口是用於定義一個事務,它定義了Spring事務管理的五大屬性,在上一篇文章中有詳細介紹。Spring提供了一個該接口的默認實現類DefaultTransactionDefinition,該類可用於大多數屬於管理狀況。若是該類不能知足需求,能夠經過實現TransactionDefinition接口來定義本身的事務實現。TransactionDefinition接口源碼以下:spring

public interface TransactionDefinition {
     int PROPAGATION_REQUIRED = 0;
     int PROPAGATION_SUPPORTS = 1;
     int PROPAGATION_MANDATORY = 2;
     int PROPAGATION_REQUIRES_NEW = 3;
     int PROPAGATION_NOT_SUPPORTED = 4;
     int PROPAGATION_NEVER = 5;
     int PROPAGATION_NESTED = 6;
     int ISOLATION_DEFAULT = -1;
     int ISOLATION_READ_UNCOMMITTED = 1;
     int ISOLATION_READ_COMMITTED = 2;
     int ISOLATION_REPEATABLE_READ = 4;
     int ISOLATION_SERIALIZABLE = 8;
     int TIMEOUT_DEFAULT = -1;
     int getPropagationBehavior();//事務的傳播行爲
     int getIsolationLevel();//事務的隔離級別
     int getTimeout();//事務超時時間
     boolean isReadOnly();//是否只讀
     String getName();
 }

  PlatformTransactionManager接口用於執行具體的事務,包括獲取當前事務狀態,提交事務、事務回滾等。
PlatformTransactionManager接口源碼以下:sql

public interface PlatformTransactionManager {
   //根據事務定義信息,得到當前狀態
   TransactionStatus getTransaction(TransactionDefinition var1) throws TransactionException;
   //提交事務
   void commit(TransactionStatus var1) throws TransactionException;
   //回滾事務
   void rollback(TransactionStatus var1) throws TransactionException;
 }

   TransactionStatus接口表明了一個事務自己,提供了一個簡單的控制事務執行和查詢事務狀態的方法。PlatformTransactionManager接口的getTransaction()方法會返回一個TransactionStatus對象,該對象可能表明一個新的或者一個已經存在的事務。
TransactionStatus接口源碼以下:數據庫

public interface TransactionStatus extends SavepointManager, Flushable {
     boolean isNewTransaction();//是否一個新的事務
     boolean hasSavepoint();//
     void setRollbackOnly();//將事務設置爲只能回滾,不容許提交
     boolean isRollbackOnly();//查詢事務是否已有回滾標誌
     void flush();
     boolean isCompleted();//查詢事務是否結束
 }

3.三個核心接口之間的關係

   PlatformTransactionManager根據TransactionDefinition定義進行事務管理,管理過程當中事務存在多種不一樣的狀態,每一個事務狀態信息都經過TransactionStatus進行表示。PlatformTransactionManager的默認實現類AbstractPlatformTransactionManager,針對不一樣的數據庫持久化操做技術,又分別有不一樣的實現類DataSourceTransactionManagerHibernateTransactionManagerJpaTransactionManager三個實現類,還有其餘的。編程

4.不一樣平臺框架事務管理實現

Spring不直接進行事務管理,而是針對不一樣的平臺提供了多種事務管理器,將事務管理的職責委託給Jdbc、Hibernate、Jpa、iBatis等持久化機制所提供的相關平臺框架的事務機制來實現。Spring事務管理的接口是org.springframework.transaction.PlatformTransactionManager,經過這個接口,Spring爲各個平臺提供了對應的事務管理器,至於具體的實現是各個平臺的事情Spring並不關心,這就是 Spring事務管理的一個優勢:爲不一樣的平臺事務API提供了一致的編程模型。session

JDBC事務框架

若是在項目開發中直接使用JDBC來進行持久化操做,DataSourceTransactionManager會用來處理事務邊界。DataSourceTransactionManager是經過調用Java.sql.Connection來管理事務,然後者是經過DataSource獲取到的。經過調用鏈接的commit()方法來提交事務,一樣,事務失敗則經過調用rollback()方法進行回滾。爲了使用DataSourceTransactionManager,你須要使用以下的XML將其裝配到應用程序的上下文定義中:分佈式

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
     <property name="dataSource" ref="dataSource" />
 </bean>

Hibernate事務spa

若是在實際項目開發中使用Hibernate來實現持久化操做,須要使用HibernateTransactionManager。sessionFactory屬性須要裝配一個Hibernate的session工廠,HibernateTransactionManager的實現細節是它將事務管理的職責委託給org.hibernate.Transaction對象,然後者是從Hibernate Session中獲取到的。當事務成功完成時,HibernateTransactionManager將會調用Transaction對象的commit()方法,反之,將會調用rollback()方法。對於Hibernate3,Hibernate事務的使用須要在Spring的配置文件上下文定義中添加以下<bean>的聲明:hibernate

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
     <property name="sessionFactory" ref="sessionFactory" />
 </bean>

Java持久化API事務(JPA)

若是在實際項目開發中使用JPA來實現持久化操做,那你須要使用Spring的JpaTransactionManager來處理事務。JpaTransactionManager只須要裝配一個JPA實體管理工廠(javax.persistence.EntityManagerFactory接口的任意實現)。JpaTransactionManager將與由工廠所產生的JPA EntityManager合做來構建事務。你須要在Spring中以下配置JpaTransactionManager
 `
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

<property name="sessionFactory" ref="sessionFactory" />

</bean>

>「
本訂閱號提供Java相關技術分享,從Java編程基礎到Java高級技術,從JavaWeb技術基礎Jsp、Servlet、JDBC到SSH、SSM開發框架,從REST風格接口設計到分佈式項目實戰。剖析主流開源技術框架,用親身實踐來譜寫深度Java技術日誌。「
相關文章
相關標籤/搜索