|
From: Dave B. <dba...@on...> - 2005-07-19 21:08:38
|
HI Juergen, Tested using spring-framework-1.2.3-with-dependencies-build.310-20050719. Looks like it corrects the problem. Thanks, Dave Juergen Hoeller wrote: >Any news on that front, Dave? Have you had a chance to try a recent nightly >snapshot? > >Juergen > > >-----Original Message----- >From: spr...@li... >[mailto:spr...@li...] On Behalf Of >Juergen Hoeller >Sent: Saturday, July 16, 2005 9:21 PM >To: spr...@li... >Subject: Re: [Springframework-developer] UnexpectedRollbackException with >nested TransactionInterceptor from SLSB > >Hi Dave, > >Thanks for pointing that out! This is indeed a case that can be handled more >appropriately in JtaTransactionManager. > >JTA's registerSynchronization will throw a RollbackException if the existing >JTA transaction is already marked as rollback-only. This means that we >cannot register Spring transaction synchronizations there: Hence, I've >changed JtaTransactionManager to immediately trigger the synchronizations >with outcome status 'rollback' in that case, which should be appropriate. > >I'll commit this tonight; it will be released in Spring 1.2.3. Please give >tomorrow's nightly snapshot (i.e. the one generated in 27 hours) a try and >let me know whether it works for you! > >Juergen > > >-----Original Message----- >From: spr...@li... >[mailto:spr...@li...] On Behalf Of >Dave Ballard >Sent: Friday, July 15, 2005 6:13 PM >To: spr...@li... >Subject: [Springframework-developer] UnexpectedRollbackException with nested >TransactionInterceptor from SLSB > >Hi Juergen, > >I'm using Spring 1.2.2 with WebLogic 6.1. I've got two Spring-managed >"service" beans, both using JtaTransactionManager, with >"PROPAGATION_REQUIRED,-Exception" for transactional methods. Let's say I've >got: > >* ServiceA.methodA() >* ServiceB.methodB() > >In my scenario, methodA() throws an Exception. In the cases where Spring >starts the transaction, no problem. The caller receives the exception: > >* caller->serviceA.methodA() - Exception received as expected >* caller->serviceB.methodB()->serviceA.methodA() - Exception received as >expected > >When an EJB SLSB starts the transaction, the following scenario works as >expected: > >* caller->SLSB->serviceA.methodA() - Exception received as expected > >However, when the Spring-managed bean calls are nested, I receive an >UnexpectedRollbackException: > >* caller->SLSB->serviceB.methodB()->serviceA.methodA() - >UnexpectedRollbackException received > >Regards, >Dave > >--- > >ERROR 10:47:05,966 [ExecuteThread: '30' for queue: 'default'] [user] >(TransactionAspectSupport.java:279) - Application exception overridden by >rollback exception >myapp.exceptions.common.SystemException: foo > at >myapp.service.cashmgmt.CashMgmtServiceImpl.findFoobar(CashMgmtServiceImpl.ja >va:298) > at java.lang.reflect.Method.invoke(Native Method) > at >org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopU >tils.java:292) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint >(ReflectiveMethodInvocation.java:155) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:122) > at >org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Tr >ansactionInterceptor.java:57) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopPro >xy.java:174) > at $Proxy107.findFoobar(Unknown Source) > at >myapp.service.mtran.PaymentCancelServiceImpl.findFoobar(PaymentCancelService >Impl.java:479) > at java.lang.reflect.Method.invoke(Native Method) > at >org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopU >tils.java:292) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint >(ReflectiveMethodInvocation.java:155) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:122) > at >org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Tr >ansactionInterceptor.java:57) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopPro >xy.java:174) > at $Proxy119.findFoobar(Unknown Source) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB.processCa >ncel(MoneyTransactionSessionEJB.java:2876) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB_xvjdlx_EL >OImpl.processCancel(MoneyTransactionSessionEJB_xvjdlx_ELOImpl.java:719) > at java.lang.reflect.Method.invoke(Native Method) > at >org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invoke(LocalSlsbI >nvokerInterceptor.java:66) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopPro >xy.java:174) > at $Proxy126.processCancel(Unknown Source) > at myapp.webtier.advance.CancelCommit.process(CancelCommit.java:90) > at >jsp_servlet._jsp._advance.__cancel_confirm._jspService(__cancel_confirm.java >:157) > at weblogic.servlet.jsp.JspBase.service(JspBase.java:27) > at >weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java >:275) > at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:21) > at >weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > at >myapp.utils.filters.AccessControlFilter.doFilterInternal(AccessControlFilter >.java:215) > at >myapp.utils.filters.AccessControlFilter.doFilter(AccessControlFilter.java:76 >) > at >weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > at >weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletCo >ntext.java:2708) > at >weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java >:2427) > at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:159) > at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:140) >ERROR 10:47:05,981 [ExecuteThread: '30' for queue: 'default'] [user] >(MoneyTransactionSessionEJB.java:3031) - Cancel not processed >org.springframework.transaction.UnexpectedRollbackException: JTA transaction >unexpectedly rolled back (maybe due to a timeout); nested exception is >weblogic.transaction.RollbackException: Unknown reas on >weblogic.transaction.internal.AppSetRollbackOnlyException > at >weblogic.transaction.internal.TransactionImpl.setRollbackOnly(TransactionImp >l.java:486) > at >weblogic.transaction.internal.TransactionManagerImpl.setRollbackOnly(Transac >tionManagerImpl.java:281) > at >weblogic.transaction.internal.TransactionManagerImpl.setRollbackOnly(Transac >tionManagerImpl.java:275) > at >org.springframework.transaction.jta.JtaTransactionManager.doSetRollbackOnly( >JtaTransactionManager.java:768) > at >org.springframework.transaction.support.AbstractPlatformTransactionManager.p >rocessRollback(AbstractPlatformTransactionManager.java:533) > at >org.springframework.transaction.support.AbstractPlatformTransactionManager.r >ollback(AbstractPlatformTransactionManager.java:506) > at >org.springframework.transaction.interceptor.TransactionAspectSupport.doClose >TransactionAfterThrowing(TransactionAspectSupport.java:276) > at >org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Tr >ansactionInterceptor.java:61) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopPro >xy.java:174) > at $Proxy107.findFoobar(Unknown Source) > at >myapp.service.mtran.PaymentCancelServiceImpl.findFoobar(PaymentCancelService >Impl.java:479) > at java.lang.reflect.Method.invoke(Native Method) > at >org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopU >tils.java:292) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint >(ReflectiveMethodInvocation.java:155) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:122) > at >org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Tr >ansactionInterceptor.java:57) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopPro >xy.java:174) > at $Proxy119.findFoobar(Unknown Source) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB.processCa >ncel(MoneyTransactionSessionEJB.java:2876) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB_xvjdlx_EL >OImpl.processCancel(MoneyTransactionSessionEJB_xvjdlx_ELOImpl.java:719) > at java.lang.reflect.Method.invoke(Native Method) > at >org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invoke(LocalSlsbI >nvokerInterceptor.java:66) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopPro >xy.java:174) > at $Proxy126.processCancel(Unknown Source) > at myapp.webtier.advance.CancelCommit.process(CancelCommit.java:90) > at >jsp_servlet._jsp._advance.__cancel_confirm._jspService(__cancel_confirm.java >:157) > at weblogic.servlet.jsp.JspBase.service(JspBase.java:27) > at >weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java >:275) > at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:21) > at >weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > at >myapp.utils.filters.AccessControlFilter.doFilterInternal(AccessControlFilter >.java:215) > at >myapp.utils.filters.AccessControlFilter.doFilter(AccessControlFilter.java:76 >) > at >weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > at >weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletCo >ntext.java:2708) > at >weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java >:2427) > at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:159) > at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:140) >--------------- nested within: ------------------ >weblogic.transaction.RollbackException: Unknown reason - with nested >exception: >[weblogic.transaction.internal.AppSetRollbackOnlyException] > at >weblogic.transaction.internal.TransactionImpl.throwRollbackException(Transac >tionImpl.java:1526) > at >weblogic.transaction.internal.ServerTransactionImpl.registerSynchronization( >ServerTransactionImpl.java:450) > at >org.springframework.transaction.jta.JtaTransactionManager.doRegisterAfterCom >pletionWithJtaTransaction(JtaTransactionManager.java:818) > at >org.springframework.transaction.jta.JtaTransactionManager.registerAfterCompl >etionWithExistingTransaction(JtaTransactionManager.java:782) > at >org.springframework.transaction.support.AbstractPlatformTransactionManager.t >riggerAfterCompletion(AbstractPlatformTransactionManager.java:635) > at >org.springframework.transaction.support.AbstractPlatformTransactionManager.p >rocessRollback(AbstractPlatformTransactionManager.java:547) > at >org.springframework.transaction.support.AbstractPlatformTransactionManager.r >ollback(AbstractPlatformTransactionManager.java:506) > at >org.springframework.transaction.interceptor.TransactionAspectSupport.doClose >TransactionAfterThrowing(TransactionAspectSupport.java:276) > at >org.springframework.transaction.interceptor.TransactionInterceptor.invoke(Tr >ansactionInterceptor.java:61) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopPro >xy.java:174) > at $Proxy119.findFoobar(Unknown Source) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB.processCa >ncel(MoneyTransactionSessionEJB.java:2876) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB_xvjdlx_EL >OImpl.processCancel(MoneyTransactionSessionEJB_xvjdlx_ELOImpl.java:719) > at java.lang.reflect.Method.invoke(Native Method) > at >org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invoke(LocalSlsbI >nvokerInterceptor.java:66) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Reflect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopPro >xy.java:174) > at $Proxy126.processCancel(Unknown Source) > at myapp.webtier.advance.CancelCommit.process(CancelCommit.java:90) > at >jsp_servlet._jsp._advance.__cancel_confirm._jspService(__cancel_confirm.java >:157) > at weblogic.servlet.jsp.JspBase.service(JspBase.java:27) > at >weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java >:275) > at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:21) > at >weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > at >myapp.utils.filters.AccessControlFilter.doFilterInternal(AccessControlFilter >.java:215) > at >myapp.utils.filters.AccessControlFilter.doFilter(AccessControlFilter.java:76 >) > at >weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > at >weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletCo >ntext.java:2708) > at >weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java >:2427) > at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:159) > at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:140) > > >------------------------------------------------------- >SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from >IBM. Find simple to follow Roadmaps, straightforward articles, informative >Webcasts and more! Get everything you need to get up to speed, fast. >http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click >_______________________________________________ >Springframework-developer mailing list >Spr...@li... >https://lists.sourceforge.net/lists/listinfo/springframework-developer > > > > >------------------------------------------------------- >SF.Net email is sponsored by: Discover Easy Linux Migration Strategies from >IBM. Find simple to follow Roadmaps, straightforward articles, informative >Webcasts and more! Get everything you need to get up to speed, fast. >http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click >_______________________________________________ >Springframework-developer mailing list >Spr...@li... >https://lists.sourceforge.net/lists/listinfo/springframework-developer > > > > >------------------------------------------------------- >SF.Net email is sponsored by: Discover Easy Linux Migration Strategies >from IBM. Find simple to follow Roadmaps, straightforward articles, >informative Webcasts and more! Get everything you need to get up to >speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click >_______________________________________________ >Springframework-developer mailing list >Spr...@li... >https://lists.sourceforge.net/lists/listinfo/springframework-developer > > > > |