请教诸位一个问题,关于转发过程中事务的控制

07-01-30 angrysnail
项目中遇到一个问题,在struts中,我们一个action中如果return 的forward指向一个XXX.do,即走到另一个action中,两个action都有对数据库的操作,怎么样才能保证在后一个action抛异常的时候,前者的操作也回滚呢?

现在已经不能将所有的操作放到一个action里了,所以才出现此问题!

angrysnail
2007-01-31 09:30
banq,help!!!!!!!!!!!!!!!!

zhangzhaofeng
2007-02-12 14:20
不知道 你的 对数据库的控制 是怎么办的

如果是jdbc连接

可以 在这两个action共用一个 jdbc的连接 这样可以做到rollback

如果是ibates hibernate 自己不是很熟悉

banq
2007-02-14 12:07
>两个action都有对数据库的操作

首先,指出你的设计问题,表现层中不要嵌入持久层代码,你就没有业务层了,没有专门业务层,就没有专门的业务事务,你提的问题就没有一个清晰的解决前提,因为按照你现在这样情况,是表现层决定了事务的解决方式,而表现层是不断变化调整,将来如果在你的Action中又串联到另外一个其他Action,你的原有事务方案又要重新调整!累不累?这就是非OO的毛病。

当然,本质上,以上设计调整并没有改变事务的运行方式,无论是有专门业务层或象你这样没有业务层,使用JTA都可以达到事务控制,JTA调用可以参考JiveJdon3源码中的ForumMessageServiceShell中代码。

但是,一定要注意,你这个两个Action串在一起,你的事务起始在第一个Action中,事务结束确认在第二个Action中,如果你的Action转发一旦变化,一定要注意事务起始结束的调整,否则死锁死机就会缠上你....这些都是没有良好OO设计的原因。

猜你喜欢