AOP實現事務控制的疑惑

power1128發表於2008-04-10
最近接觸到AOP,想用其來實現事務控制,避免在很多地方寫重複的事務控制的程式碼.
我的大概想法是這樣的:在Service以外實現事務控制.由於目前使用了Struts2表現框架,於是想把事務控制在Action這一層實現.藉助Struts2的Interceptor,很快的寫了個事務控制的類.此時有個問題困住了我.比如在Action1中呼叫了兩個Service(Service1,Service2)的方法(Service1.add(),Service2.add()),如果Service1.add()執行成功,但在Service2.add()中丟擲了業務異常(並不是什麼系統異常,比如是使用者填寫的東西不符合什麼規範之類的業務邏輯),此時我在Action1中肯定要捕獲這個業務異常,返回給客戶一個提示資訊頁面.但是為了回滾事務,我要丟擲個異常讓Interceptor捕獲,好回滾事務.但是一旦讓Interceptor處理了異常,其後的頁面轉發就成了問題.
問題1.我想讓Action來決定顯示的頁面,而不是讓Interceptor來決定.(因為Interceptor在Action之上,所以只能做一些公共頁面的轉發).
問題2.在Action處理業務異常後,不得不考慮到為了回滾事務,要向Interceptor丟擲異常,我感覺這樣沒有達到我先前的預期,也就是在Action這裡可以不用考慮事務.
希望大家指教

[該貼被power1128於2008-04-10 15:15修改過]

相關文章