|
From: Juergen H. <ju...@in...> - 2005-07-20 07:24:38
|
Thanks, Dave - that's good to know :-) Juergen -----Original Message----- From: spr...@li... [mailto:spr...@li...] On Behalf Of Dave Ballard Sent: Tuesday, July 19, 2005 11:09 PM To: spr...@li... Subject: Re: [Springframework-developer] UnexpectedRollbackException with nested TransactionInterceptor from SLSB 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(CashMgmtServiceIm >pl.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.invokeJoin >point >(ReflectiveMethodInvocation.java:155) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:122) > at >org.springframework.transaction.interceptor.TransactionInterceptor.invo >ke(Tr >ansactionInterceptor.java:57) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicA >opPro >xy.java:174) > at $Proxy107.findFoobar(Unknown Source) > at >myapp.service.mtran.PaymentCancelServiceImpl.findFoobar(PaymentCancelSe >rvice >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.invokeJoin >point >(ReflectiveMethodInvocation.java:155) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:122) > at >org.springframework.transaction.interceptor.TransactionInterceptor.invo >ke(Tr >ansactionInterceptor.java:57) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicA >opPro >xy.java:174) > at $Proxy119.findFoobar(Unknown Source) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB.proc >essCa >ncel(MoneyTransactionSessionEJB.java:2876) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB_xvjd >lx_EL >OImpl.processCancel(MoneyTransactionSessionEJB_xvjdlx_ELOImpl.java:719) > at java.lang.reflect.Method.invoke(Native Method) > at >org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invoke(Local >SlsbI >nvokerInterceptor.java:66) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicA >opPro >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(AccessControlF >ilter >.java:215) > at >myapp.utils.filters.AccessControlFilter.doFilter(AccessControlFilter.ja >va:76 >) > at >weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > at >weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServ >letCo >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(Transacti >onImp >l.java:486) > at >weblogic.transaction.internal.TransactionManagerImpl.setRollbackOnly(Tr >ansac >tionManagerImpl.java:281) > at >weblogic.transaction.internal.TransactionManagerImpl.setRollbackOnly(Tr >ansac >tionManagerImpl.java:275) > at >org.springframework.transaction.jta.JtaTransactionManager.doSetRollback >Only( >JtaTransactionManager.java:768) > at >org.springframework.transaction.support.AbstractPlatformTransactionMana >ger.p >rocessRollback(AbstractPlatformTransactionManager.java:533) > at >org.springframework.transaction.support.AbstractPlatformTransactionMana >ger.r >ollback(AbstractPlatformTransactionManager.java:506) > at >org.springframework.transaction.interceptor.TransactionAspectSupport.do >Close >TransactionAfterThrowing(TransactionAspectSupport.java:276) > at >org.springframework.transaction.interceptor.TransactionInterceptor.invo >ke(Tr >ansactionInterceptor.java:61) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicA >opPro >xy.java:174) > at $Proxy107.findFoobar(Unknown Source) > at >myapp.service.mtran.PaymentCancelServiceImpl.findFoobar(PaymentCancelSe >rvice >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.invokeJoin >point >(ReflectiveMethodInvocation.java:155) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:122) > at >org.springframework.transaction.interceptor.TransactionInterceptor.invo >ke(Tr >ansactionInterceptor.java:57) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicA >opPro >xy.java:174) > at $Proxy119.findFoobar(Unknown Source) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB.proc >essCa >ncel(MoneyTransactionSessionEJB.java:2876) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB_xvjd >lx_EL >OImpl.processCancel(MoneyTransactionSessionEJB_xvjdlx_ELOImpl.java:719) > at java.lang.reflect.Method.invoke(Native Method) > at >org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invoke(Local >SlsbI >nvokerInterceptor.java:66) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicA >opPro >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(AccessControlF >ilter >.java:215) > at >myapp.utils.filters.AccessControlFilter.doFilter(AccessControlFilter.ja >va:76 >) > at >weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > at >weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServ >letCo >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(Tr >ansac >tionImpl.java:1526) > at >weblogic.transaction.internal.ServerTransactionImpl.registerSynchroniza >tion( >ServerTransactionImpl.java:450) > at >org.springframework.transaction.jta.JtaTransactionManager.doRegisterAft >erCom >pletionWithJtaTransaction(JtaTransactionManager.java:818) > at >org.springframework.transaction.jta.JtaTransactionManager.registerAfter >Compl >etionWithExistingTransaction(JtaTransactionManager.java:782) > at >org.springframework.transaction.support.AbstractPlatformTransactionMana >ger.t >riggerAfterCompletion(AbstractPlatformTransactionManager.java:635) > at >org.springframework.transaction.support.AbstractPlatformTransactionMana >ger.p >rocessRollback(AbstractPlatformTransactionManager.java:547) > at >org.springframework.transaction.support.AbstractPlatformTransactionMana >ger.r >ollback(AbstractPlatformTransactionManager.java:506) > at >org.springframework.transaction.interceptor.TransactionAspectSupport.do >Close >TransactionAfterThrowing(TransactionAspectSupport.java:276) > at >org.springframework.transaction.interceptor.TransactionInterceptor.invo >ke(Tr >ansactionInterceptor.java:61) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicA >opPro >xy.java:174) > at $Proxy119.findFoobar(Unknown Source) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB.proc >essCa >ncel(MoneyTransactionSessionEJB.java:2876) > at >myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB_xvjd >lx_EL >OImpl.processCancel(MoneyTransactionSessionEJB_xvjdlx_ELOImpl.java:719) > at java.lang.reflect.Method.invoke(Native Method) > at >org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invoke(Local >SlsbI >nvokerInterceptor.java:66) > at >org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(Re >flect >iveMethodInvocation.java:144) > at >org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicA >opPro >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(AccessControlF >ilter >.java:215) > at >myapp.utils.filters.AccessControlFilter.doFilter(AccessControlFilter.ja >va:76 >) > at >weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27) > at >weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServ >letCo >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 > > > > ------------------------------------------------------- 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 |