2010-10-07 72 views
1

要聲明事務管理的例子在Spring AOP ........春天的聲明roolback的例子 - 爲?

其實這裏

<aop:config> 
    <aop:advisor advice-ref="addAdvice" pointcut="execution(* com.DAO.*.*(..))"/> 
</aop:config> 
<tx:advice id="addAdvice" transaction-manager="transactionManager"> 
    <tx:attributes> 
     <tx:method name="add*" propagation="REQUIRED" rollback-for="" /> 
    </tx:attributes> 
</tx:advice> 

所以在這裏我想寫實際上回滾-for =「」,是否有任何方法或其他? 如果方法,那麼該方法放在哪裏?

回答

5

in rollback-for您指定了例外的名稱。例如,如果你要回滾爲your.pkg.NoProductInStockException,你寫

rollback-for="your.pkg.NoProductInStockException" 

這將使如果遇到匹配指定一個例外事務回滾。如果拋出一個異常不匹配,它被傳播到服務的調用者或包裹成一個TransactionRolledBackException

The transaction documentation解釋說:

推薦的方法來指示Spring框架的事務架構,一個事務的回滾工作是從當前在事務上下文中執行的代碼中拋出Exception。 Spring Framework的事務基礎架構代碼會捕獲任何未處理的異常,因爲它會喚起調用堆棧,並確定是否標記事務進行回滾。

在其默認配置中,Spring Framework的事務基礎架構代碼僅在運行時標記用於回滾的事務,未經檢查的異常;也就是說,拋出的異常是RuntimeException的一個實例或子類時。 (錯誤也會 - 默認情況下 - 導致回滾)。從事務性方法引發的檢查異常不會導致默認配置中的回滾。

您可以精確配置哪些Exception類型標記回滾事務,包括已檢查的異常。

+0

+1(還有11個要去) – 2010-10-07 12:23:23

+0

@axtavt - 我添加了文檔的摘錄。 – Bozho 2010-10-07 13:14:53

+0

感謝bozho的回覆,但是我們在「NoProductInStockException」中寫下了什麼?我們必須編寫我們的回滾方法或異常處理?你能舉個例子嗎? – Sanju 2010-10-07 13:17:17

0

默認情況下,不應該對未經檢查的異常執行此操作。如果你在方法內部拋出一個未經檢查的異常,那麼你必須使用rollback-for屬性。您可以使用正則表達式樣式,例如:* InStockException