我有以下用例:Spring AOP是否保證了原子性?
我在我的應用程序中有許多標準實體。當我的應用程序執行JPA保存/合併其中一個實體的實例時,我想另外保存一個特殊Event
實體的實例。因此,對於標準實體上的每個操作,事件被插入到數據庫中。
我使用AOP實現這個橫切關注點考慮。然而,我們要不惜一切代價避免什麼是要創建一個標準的實體和正在創建或反之亦然沒有事件:回滾存在的對標實體的插入和事件正在創建。
我怎麼能保證我的操作原子Spring AOP實現的?
任何線索或提示的歡迎。
我有以下用例:Spring AOP是否保證了原子性?
我在我的應用程序中有許多標準實體。當我的應用程序執行JPA保存/合併其中一個實體的實例時,我想另外保存一個特殊Event
實體的實例。因此,對於標準實體上的每個操作,事件被插入到數據庫中。
我使用AOP實現這個橫切關注點考慮。然而,我們要不惜一切代價避免什麼是要創建一個標準的實體和正在創建或反之亦然沒有事件:回滾存在的對標實體的插入和事件正在創建。
我怎麼能保證我的操作原子Spring AOP實現的?
任何線索或提示的歡迎。
只要確保創建活動方面的,在相同的事務中創建標準實體的事務中運行。一種方法是確保事務方面的順序將它放在事件保存方面之外。
編輯:根據http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations它是相當簡單的,以確保事務性方面的任何其它方面之前施加。
包括在你的TX定義的順序屬性...
<tx:annotation-driven order="-1"/>
因此只要你的其他方面具有大於-1事務方面將首先運行一個命令。有關方面訂購的更多信息,請參閱http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-ataspectj-advice-ordering。
謝謝。你可以包含一段代碼/配置嗎? – balteo 2012-08-01 14:57:12
另外,我使用@Transactional註釋而不是基於AOP的交易... – balteo 2012-08-01 14:58:47
交易方面**是否也結束最後**以及**先運行**? – balteo 2012-08-01 15:27:37