- 爱易网页
 
                        - 
                            Java教程
 
                        - spring事务控制,该怎么解决 
 
                         
                    
                    
                    日期:2014-05-17  浏览次数:21012 次 
                    
                        
                         spring事务控制
3个service实现类:classA,classB,classC,调用顺序如下,spring事务控制在每个方法上加了事务,现在classC的cc方法发送了异常,导致classB的bb()方法回滚了,
请教高手出现这现象的原因是什么?如果想实现classB的bb方法不因bb1异常而回滚,需要怎么处理?
classA{
    … … … … … …… …
    public void aa()
    {
    	classB.bb();
    }
    
}
classB{
		public void bb()
		{
			…… …… …… ……;
			try
			{
				bb1();
			}
		  catch
		  {
		  
		  }
		}
		private void bb1()
		{
			classC.cc();
		}
}
classC
{
   public void cc()
   {
     …………………………;
     …………………………;
   }
}
控制台打印信息:
org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has been marked as rollback-only
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:695)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:321)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:116)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
	at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
	at $Proxy24.entrance(Unknown Source)
	
事务控制配置如下:
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref bean="dataSource" />
		</property>
	</bean>
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="*" propagation="REQUIRED" rollback-for="Throwable" />
	</tx:advice>
	<aop:config>
		<aop:pointcut id="allMethod" expression="execution(* *..service.impl.*.*(..)) " />
		<aop:advisor advice-ref="txAdvice" pointcut-ref="allMethod" />
	</aop:config>
              
------解决方案--------------------