天天看點

bboss persistent事務管理介紹 (九)

http://www.iteye.com/post/931367

      事務控制規則

根據實際情況事務控制規則劃分為:

1.         不帶參數方法

 <method name="testTXInvoke"/>

說明:指定需要控制事務的方法為testTXInvoke,這裡沒有聲明事務類型,預設的事務類型為REQUIRED_TRANSACTION

     在這種規則下一旦方法執行時向外抛出異常,則會導緻事務復原,如果方法正常結束則事務送出。如果聲明了復原異正常則,則按照復原異正常則控制事務的復原和送出。

2.         帶參數事務方法,隻聲明需要進行事務控制的方法資訊,包括方法的名稱和方法參數

<method name="testTXInvoke">

    <param type="java.lang.String"/>

</method>

說明:指定需要控制事務的方法為testTXInvoke,并且方法的帶一個String類型的參數,這裡沒有聲明事務類型,預設的事務類型為REQUIRED_TRANSACTION

     如果參數為數組時,需要配置param的type屬性需要指定為特定類型的數組類型名稱,比如字元串數組類型為:[Ljava.lang.String;

3.         指定事務類型規則      

<method name="testTXInvoke" txtype="REQUIRED_TRANSACTION">

說明:指定需要控制事務的方法為testTXInvoke,并且方法的帶一個String類型的參數,同時通過txtype屬性明确地将事務類型指定為

REQUIRED_TRANSACTION

Txtype屬性的取值範圍如下,具體的含義參考【4.9.2】節:

NEW_TRANSACTION,

                  REQUIRED_TRANSACTION,

                  MAYBE_TRANSACTION,

      NO_TRANSACTION

在這種規則下一旦方法執行時向外抛出異常,則會導緻事務復原,如果方法正常結束則事務送出。如果聲明了復原異正常則,則按照復原異正常則控制事務的復原和送出。

4.         通過模式指定控制事務的方法範圍

<method pattern="testPatternTX[1-9.]*"

txtype="REQUIRED_TRANSACTION">

       說明:通過pattern屬性指定了一個模式testPatternTX[1-9.]*,表示以testPatternTX開頭的所有方法都需要控制事務

             Name屬性和pattern屬性隻能設定一個,如果同時設定了兩個屬性,則隻有pattern生效,name無效。

             在這種規則下一旦方法執行時向外抛出異常,則會導緻事務復原,如果方法正常結束則事務送出。如果聲明了復原異正常則,則按照復原異正常則控制事務的復原和送出。

5.      指定事務的復原異常

<method name="testSystemException">   

              <rollbackexceptions>

                  <exception class="com.chinacreator.spi.transaction.RollbackInstanceofException"

                  type="IMPLEMENTS"/>

              </rollbackexceptions>

或者

                  type="INSTANCEOF"/>

說明:聲明事務方法時,可以通過rollbackexceptions和exception元素指定方

法事務復原的異常資訊,包括異常名稱,異常的範圍類型:IMPLEMENTS,INSTANCEOF。異常名稱通過class屬性執行,範圍類型通過type屬性指定,隻能設定IMPLEMENTS和INSTANCEOF這兩個值。IMPLEMENTS類型指異常隻能是異常本身的對象,其子類不屬于復原異常,INSTANCEOF類型指異常本身和其子類都屬于復原異常。

除了指定的復原異常需要復原事務外,如果抛出的異常是系統級别的異常,即使這些異常沒有進行聲明,也會導緻事務復原。系統級别的異常是指以下幾種異常:

java.lang.RuntimeException及其子類

java.lang.Error及其子類

另外以下幾種異常也是預設復原事務的異常:

java.sql.SQLException

javax.transaction.RollbackException

com.frameworkset.orm.transaction.TransactionException

繼續閱讀