spring的事务不一致

一个SSH2的项目里面

假设一个Action如

TestAtion

他里面有两个Manager


[code="java"]
public class TestAction extends ActionSupport implements xxxxx{

private AaaaManager  aManager;
private BbbbManager  bManager;

[/code]

然后TestAction的一个方法里面

[code="java"]
public String save() {
aManager.saveaaa();//保存
。。。。。。。。。。
bbbbManager.savebbb() //假设这个是保存文件,如果这里出错了,这个就保存不了了,但是saveaaa却保存了了,这样事务就不一至了,请问大家这个怎么办啊。

}
[/code]

Spring的事务配置
[code="xml"]

<aop:config proxy-target-class="true">
   <aop:advisor pointcut="execution(* com.xxxx.xxxxxManager.*Manager.aaa.*Manager.*(..))" advice-ref="txAdvice"/>
</aop:config>
     <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="get*" read-only="true"/>
        <tx:method name="find*" read-only="true"/>
        <tx:method name="paged*" read-only="true"/>
        <tx:method name="*"/>
    </tx:attributes>
</tx:advice>

[/code]

还有read-only="true"表示前面那个配的方法没有事务么
[b]问题补充:[/b]
我说是我保存两个对象的时候事务不一致

aManager.saveaaa();这个保存成功了

接下来再保存一个对象

bbbbManager.savebbb() 这个没有保存成功,出了异常,而roolback了,

但是前面的saveaaa()却保存成功了。。
[b]问题补充:[/b]
如果对这三个方法都设了事务呢?
最后怎么rollback啊
[b]问题补充:[/b]
我savebbb()保存不成功是因为程序的问题,因为SPRING里面事务在Manager里面,所以每个SAVE都是一个事务,所以事务不一致

看你定义的切面

你是对Manager后缀的service进行管理事务。

aManager.saveaaa();//这个是一个单独的事务

。。。。。。。。。。

bbbbManager.savebbb()//这个又是一个单独的事务

所以,这两个事务是不相关的,
自然出现了你这种情况

你应该是对
public String save() {
aManager.saveaaa();//保存
。。。。。。。。。。
bbbbManager.savebbb() //假设这个是保存文件,如果这里出错了,这个就保存不了了,但是saveaaa却保存了了,这样事务就不一至了,请问大家这个怎么办啊。

}这个方法进行事务管理,那就没问题了

read-only="true"表示前面那个配的方法的事务为[color=red]只读事务[/color]

还是有事务啊

这就要看事务的传播策略了,
建议你先好好去看看spring的事务相关

详解spring事务属性
http://www.iteye.com/topic/78674

事务传播策略似乎是嵌套调用的时候用的,楼主这么调用应该是每个方法一个单独事务,

把saveaaaa删掉,只执行savebbbb能成功吗,如果不能的话,是savebbb本身写的有问题吧

期待答案,如果和我猜想的不一样的话,等解决了之后希望楼主能把解决方法通过站内短信发给我一下