|
From: Dave B. <dba...@on...> - 2005-07-15 16:12:57
|
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.java:298)
at java.lang.reflect.Method.invoke(Native Method)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:292)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:57)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy107.findFoobar(Unknown Source)
at
myapp.service.mtran.PaymentCancelServiceImpl.findFoobar(PaymentCancelServiceImpl.java:479)
at java.lang.reflect.Method.invoke(Native Method)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:292)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:57)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy119.findFoobar(Unknown Source)
at
myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB.processCancel(MoneyTransactionSessionEJB.java:2876)
at
myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB_xvjdlx_ELOImpl.processCancel(MoneyTransactionSessionEJB_xvjdlx_ELOImpl.java:719)
at java.lang.reflect.Method.invoke(Native Method)
at
org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invoke(LocalSlsbInvokerInterceptor.java:66)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.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(WebAppServletContext.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(TransactionImpl.java:486)
at
weblogic.transaction.internal.TransactionManagerImpl.setRollbackOnly(TransactionManagerImpl.java:281)
at
weblogic.transaction.internal.TransactionManagerImpl.setRollbackOnly(TransactionManagerImpl.java:275)
at
org.springframework.transaction.jta.JtaTransactionManager.doSetRollbackOnly(JtaTransactionManager.java:768)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:533)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:506)
at
org.springframework.transaction.interceptor.TransactionAspectSupport.doCloseTransactionAfterThrowing(TransactionAspectSupport.java:276)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy107.findFoobar(Unknown Source)
at
myapp.service.mtran.PaymentCancelServiceImpl.findFoobar(PaymentCancelServiceImpl.java:479)
at java.lang.reflect.Method.invoke(Native Method)
at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:292)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:155)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:122)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:57)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy119.findFoobar(Unknown Source)
at
myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB.processCancel(MoneyTransactionSessionEJB.java:2876)
at
myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB_xvjdlx_ELOImpl.processCancel(MoneyTransactionSessionEJB_xvjdlx_ELOImpl.java:719)
at java.lang.reflect.Method.invoke(Native Method)
at
org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invoke(LocalSlsbInvokerInterceptor.java:66)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.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(WebAppServletContext.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(TransactionImpl.java:1526)
at
weblogic.transaction.internal.ServerTransactionImpl.registerSynchronization(ServerTransactionImpl.java:450)
at
org.springframework.transaction.jta.JtaTransactionManager.doRegisterAfterCompletionWithJtaTransaction(JtaTransactionManager.java:818)
at
org.springframework.transaction.jta.JtaTransactionManager.registerAfterCompletionWithExistingTransaction(JtaTransactionManager.java:782)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion(AbstractPlatformTransactionManager.java:635)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:547)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:506)
at
org.springframework.transaction.interceptor.TransactionAspectSupport.doCloseTransactionAfterThrowing(TransactionAspectSupport.java:276)
at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:61)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:174)
at $Proxy119.findFoobar(Unknown Source)
at
myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB.processCancel(MoneyTransactionSessionEJB.java:2876)
at
myapp.session.advance.tmoneytransaction.MoneyTransactionSessionEJB_xvjdlx_ELOImpl.processCancel(MoneyTransactionSessionEJB_xvjdlx_ELOImpl.java:719)
at java.lang.reflect.Method.invoke(Native Method)
at
org.springframework.ejb.access.LocalSlsbInvokerInterceptor.invoke(LocalSlsbInvokerInterceptor.java:66)
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:144)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.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(WebAppServletContext.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)
|