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