2011-03-24 29 views
0

我有AOP攔截對啓動必需事務的方法的調用。在方法邏輯期間,引發異常。但是這個異常被捕獲,因此一段數據可以通過一個新的AOP切入點寫入到一個db中,這個切入點啓動一個RequiresNew。這個RequiresNew應該正常提交,一旦完成,它應該重新拋出導致REQUIRED事務回滾的原始異常。這似乎並不奏效。這是因爲即使RequiresNew存在於自己的事務中,如果它存在於需要回滾的事務中......這會影響RequiresNew事務嗎?基本的Spring事務問題 - WebLogicJTATransactionManager/RequiresNew

謝謝...周杰倫

回答

0

第二種方法將是有自己的嵌套事務開始&結束。它不會意識到第一個例外。既然你無論如何捕捉這個異常,爲什麼你不再扔它?

另外爲什麼需要針對異常點進行切割?讓我們說一個ExceptionListener異常地處理事件/消息是不是很簡單?

RequiresNew方法不會知道異常&將是一個單獨的嵌套事務。所以..

需要方法

嘗試{

...

}趕上(例外五){

//調用方法/切入點其中有RequiresNew,這應該除非RequiresNew方法內部存在其他例外情況。

拋出新異常(「Transaction failed」);

}

+0

對不起......讓我解釋一下好一點。我有兩個有切入點的方法(1 - 必需的,2 - RequiresNew)。當第一個方法被擊中時,它會啓動Required並在其中引發異常。然後我想通過持久化數據將狀態設置到數據庫中。我通過調用方法2(在另一個類中)來調用RequiresNew,同時仍然在方法1中。所以RequiresNew應該仍然存在,不管Required是否失敗。 – 2011-03-24 18:22:04