JiveJdon Community Forums
在线284人   首页   主题总表   培训咨询   精华   查搜   注册    登陆
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表
???en_US.forumThreadNext.name??? 下一主题
Go 总共有 7 回复 / 1
 发表新帖子   回复该主题贴
power1128

悄悄话
发表文章: 52
注册时间: 2006年05月24日 14:37
AOP实现事务控制的疑惑 2008年04月10日 15:03 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
标签列表 aop(27)      事务(66)     
最近接触到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修改过]
banq

悄悄话
发表文章: 9312
注册时间: 2002年08月03日 17:08
回复:AOP实现事务控制的疑惑 2008年04月11日 10:15 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
>于是想把事务控制在Action这一层实现
设计思路完全错误,事务只能是在业务层或持久层实现,不要在Action中放入太多代码,见最近有关Action的讨论。
http://www.jdon.com/jivejdon/thread/33821.html

Struts2的Interceptor简直是诱导初学者犯罪,范设计上分层的错误,Struts2误导性的东西太多了。

[该贴被banq于2008-04-11 10:19修改过]
power1128

悄悄话
发表文章: 52
注册时间: 2006年05月24日 14:37
回复:回复:AOP实现事务控制的疑惑 2008年04月14日 12:44 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
banq大哥,我对事务在Service层实现还有疑惑:
比如现有两个Service,Service1和Service2,它们在自己的服务里实现了事务.
此时又出现Service3,Service4,并且在Service3或者Service4中调用Service1或Service2的服务,并且有自己的事务要求,那么这里可能出现事务嵌套.
所以我感觉在Service实现事务控制并不灵活,而且可能导致大量的事务嵌套,我觉得这种嵌套是没有必要的.那么为什么还在业务层实现事务呢?
以上只是我的想法,请各位指教.
wlmouse

悄悄话
发表文章: 117
注册时间: 2006年11月09日 15:58
回复:回复:回复:AOP实现事务控制的疑惑 2008年04月14日 17:03 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
你可以看一下SpringEJB3的应用层事务实现。他们通过声明式事务实现了事务处理。缺省事务策略下是当一个Service调用开始的时候,如果没有事务,则启动一个新事务,如果已经有事务,则在这个事务中执行。根本不会出现你说的嵌套问题。
zhengguo07q

悄悄话
发表文章: 18
注册时间: 2008年03月19日 04:54
re:AOP实现事务控制的疑惑 2008年04月14日 18:21 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
不存在事务嵌套的问题~ 数据库的实现就不可能出现这个问题~~~~,什么是事务你没弄懂
映射到的持久层怎么又会有嵌套呢
banq

悄悄话
发表文章: 9312
注册时间: 2002年08月03日 17:08
回复:回复:回复:AOP实现事务控制的疑惑 2008年04月15日 10:02 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
>感觉在Service实现事务控制并不灵活,而且可能导致大量的事务嵌套
JavaEE标准中就有一个很著名的组件JTA来解决事务的,这些问题都是有JTA组件去解决,这个JTA已经非常成熟,应用在EJB多少年了,Spring也是用JTA的,你不用担心这些细节问题,Java的缺点就是太成熟了。
power1128

悄悄话
发表文章: 52
注册时间: 2006年05月24日 14:37
回复:回复:回复:回复:AOP实现事务控制的疑惑 2008年04月15日 12:38 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
原来JTA的原理是这样的.虽然我也用了JTA,但对它的实现细节还不了解,多谢banq 和wlmouse 的指点.

[该贴被power1128于2008-04-15 12:39修改过]
xmuzyu

悄悄话
发表文章: 130
注册时间: 2007年03月26日 12:16
re:AOP实现事务控制的疑惑 2008年08月16日 14:26 到本帖网址 加入本帖到收藏夹 发送到手机 回复该主题
同意wlmouse的说法。你可以通过声明来控制事务属性的,并且你可以控制不同的服务在同一个事务中,你也可以控制不同的服务进行事务嵌套。EJB这方面做的非常好。
这个主题有 7 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache 缓存 DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Seam Spring Struts
正在读取,请等待...
google yahoo 新浪ViVi 365Key网摘 天极网摘 CSDN网摘 添加到百度搜藏 POCO网摘 博采网摘
查询本论坛内 回复超过的热门帖子
     回复该主题贴
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-08 jdon.com
anti spam