使用Appfuse时在Struts Action中怎么进行事务控制

使用Appfuse时在Struts Action中如何进行事务控制?
Appfuse采用Spring+Hibernate+Struts的架构。

单个Service方法中利用Spring进行了事务控制,但问题是由于业务比较复杂,需要多个service类中的多个方法组合才能进行处理。框架中一个Model对应一个Dao和Service,我并不希望多个Model的Dao和Service之间进行交互,而是各自负责各自的操作。这样就不可避免的需要在Action中进行service方法的组合完成独立的业务操作,但业务操作的事务控制就比较麻烦了。

目前想到的方法有两种:
1、在BaseAction中加入事务控制,但发现这样的话,就不能在Dao中使用Spring的HibernateTemplate,用起来非常麻烦,而且似乎对结构的变动较大,并且感觉这样的话,Spring的作用几乎可以忽略;
2、把Action中业务操作提取出来,写成单独的Service方法,然后利用Spring进行事务控制,这样就需要ref其它的service,和改写现在的大量Action类,工作量较大。

目前倾向于后一种处理,但考虑工作量可能会对项目造成致命性危险,处于评估中。

不知道各位使用Appfuse进行项目开发时是否有更好的方法进行处理?或者根据上面的两种方式给个建议。

在项目之初没有充分考虑业务操作的事务性控制,实在是大失败呀!郁闷中......
1 楼 daquan198163 2007-12-29  
“在BaseAction中加入事务控制,但发现这样的话,就不能在Dao中使用Spring的HibernateTemplate”
事实不是这样的,虽然我也不赞成在Action加事务

“把Action中业务操作提取出来,写成单独的Service方法,然后利用Spring进行事务控制,这样就需要ref其它的service,和改写现在的大量Action类,工作量较大。”
不就是把业务逻辑从action提取到service么?能有多大工作量?
2 楼 daquan198163 2007-12-29  
另外,appfuse实在是太大太杂了,可以看看它的轻量级版——equinox,或国内的SpringSide项目
3 楼 phoenix2xp 2008-01-05  
daquan198163说的不错,把业务逻辑从action提出来还是比较简单的,虽然action比较多,也在可承受范围。只是太懒而已使用Appfuse时在Struts Action中怎么进行事务控制

进行中。。。