AOP实现事务控制的疑惑
最近接触到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修改过]