Yes, jboss 4.2.1 causes org.springframework.transaction.NoTransactionException.
The integration between Spring and JBOSS does not work properly anymore after upgrading
jboss from 4.0.4 to 4.2.1. Basically I have a CMT Stateless Session Bean EJB
(SubscrFacadeBean) which is calling a spring bean (KtfPerformerImpl) as follows:
... SubscrFacadeBean.createSubscr(...)
| {
| // Get KtfPerformerImpl from Bean Factory
| KtfPerformerImpl impl = ...;
|
| // Call implementation
| impl.createSubscr(...);
| }
|
The EJB method createSubscr is marked (CMT) with a "Required" transaction
attribute.
The KtfPerformerImpl.createSubscr method is marked "PROPAGATION_REQUIRED,
-Exception" using an TransactionProxyFactoryBean.
In spring I'm using the JTA transaction manager as follows:
<bean id="txManager"
| class="org.springframework.transaction.jta.JtaTransactionManager">
| <property name="transactionManagerName"
value="java:/TransactionManager"/>
| <property name="userTransactionName"
value="UserTransaction"/>
| </bean>
|
So, having enabled the DEBUG logging level for
"org.springframework.transaction", I can see (while debugging) after entering
KtfPerformerImpl.createSubscr(...):
2007-08-24 15:59:36,146 DEBUG [org.springframework.transaction.jta.JtaTransactionManager]
Using tran
| saction object [org.springframework.transaction.jta.JtaTransactionObject@c82a01]
| 2007-08-24 15:59:36,146 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Using tran
| saction object [org.springframework.transaction.jta.JtaTransactionObject@c82a01]
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Participat
| ing in existing transaction
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Participat
| ing in existing transaction
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.support.TransactionSynchronizationMan
| ager] Initializing transaction synchronization
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.support.TransactionSynchronizationMan
| ager] Initializing transaction synchronization
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.interceptor.TransactionInterceptor] G
| etting transaction for
[com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl.cre
| ateSubscr]
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.interceptor.TransactionInterceptor] G
| etting transaction for
[com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl.cre
| ateSubscr]
So far it's cool: KtfPerformerImpl.createSubscr(...) was enlisted in the transaction
opened by EJB CMT. Then an application exception is raised in
KtfPerformerImpl.createSubscr(...):
com.picsel.server.ezine.subscr.exception.SubscriptionException: "ERROR_CODE 2 (not
0!) received!
which SHOULD rollback the transaction, but look what I get in the log:
2007-08-24 16:00:34,396 ERROR [EzineSubscrSrv.SUBSCR_REG_ALG__KTF_PERF_IMPL] CREATE
SUBSCR: KTF request NOK after 2 tries => ABANDONING!
| com.picsel.server.ezine.subscr.exception.SubscriptionException: "ERROR_CODE 2
(not 0!) received!
| ErrorCode=SUBSCR_EXTERNAL_CREATE_FAILED
| at
com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl.createSubscr(KtfPerform
| erImpl.java:203)
| at
com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl$$FastClassByCGLIB$$1834
| b76.invoke(<generated>)
| at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
| at
org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2Aop
| Proxy.java:695)
| at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.
| java:139)
| at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor
| .java:107)
| at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.
| java:161)
| at
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopPr
| oxy.java:630)
| at
com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl$$EnhancerByCGLIB$$aed74
| 6d5.createSubscr(<generated>)
| at
com.picsel.server.ezine.subscr.ejb.SubscrFacadeBean.createSubscr(SubscrFacadeBean.java:165)
| ...
| 2007-08-24 16:00:35,021 WARN [EzineSubscrSrv.SUBSCR_REG_ALG__KTF_PERF_IMPL] CREATE
SUBSCR: NOK: usi
| ng reqData {msisdn=987656789,
magId=98627ed10a03127f0047f959316507ea}!SUBSCR_EXTERNAL_CREATE_FAILED:
| com.picsel.server.ezine.subscr.exception.SubscriptionException: "ERROR_CODE 2
(not 0!) received!
| 2007-08-24 16:00:35,990 DEBUG
[org.springframework.transaction.interceptor.TransactionInterceptor] C
| ompleting transaction for
[com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl.
| createSubscr] after exception:
com.picsel.server.ezine.subscr.exception.SubscriptionException: "ERROR_CODE 2 (not
0!) received!
| ErrorCode=SUBSCR_EXTERNAL_CREATE_FAILED
| 2007-08-24 16:00:35,990 DEBUG
[org.springframework.transaction.interceptor.TransactionInterceptor] C
| ompleting transaction for
[com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl.
| createSubscr] after exception:
com.picsel.server.ezine.subscr.exception.SubscriptionException: "ERROR_CODE 2 (not
0!) received!
| ErrorCode=SUBSCR_EXTERNAL_CREATE_FAILED
| 2007-08-24 16:00:35,990 DEBUG
[org.springframework.transaction.interceptor.RuleBasedTransactionAttri
| bute] Applying rules to determine whether transaction should rollback on
com.picsel.server.ezine.sub
| scr.exception.SubscriptionException: "ERROR_CODE 2 (not 0!) received!
| ErrorCode=SUBSCR_EXTERNAL_CREATE_FAILED
| 2007-08-24 16:00:35,990 DEBUG
[org.springframework.transaction.interceptor.RuleBasedTransactionAttri
| bute] Applying rules to determine whether transaction should rollback on
com.picsel.server.ezine.sub
| scr.exception.SubscriptionException: "ERROR_CODE 2 (not 0!) received!
| ErrorCode=SUBSCR_EXTERNAL_CREATE_FAILED
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.interceptor.RuleBasedTransactionAttri
| bute] Winning rollback rule is: RollbackRuleAttribute with pattern [Exception]
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.interceptor.RuleBasedTransactionAttri
| bute] Winning rollback rule is: RollbackRuleAttribute with pattern [Exception]
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Triggering
| beforeCompletion synchronization
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Triggering
| beforeCompletion synchronization
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Participat
| ing transaction failed - marking existing transaction as rollback-only
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Participat
| ing transaction failed - marking existing transaction as rollback-only
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Setting JT
| A transaction rollback-only
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Setting JT
| A transaction rollback-only
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Registerin
| g after-completion synchronization with existing JTA transaction
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Registerin
| g after-completion synchronization with existing JTA transaction
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.support.TransactionSynchronizationMan
| ager] Clearing transaction synchronization
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.support.TransactionSynchronizationMan
| ager] Clearing transaction synchronization
| 2007-08-24 16:00:36,006 ERROR
[org.springframework.transaction.interceptor.TransactionInterceptor] A
| pplication exception overridden by rollback exception
| com.picsel.server.ezine.subscr.exception.SubscriptionException: "ERROR_CODE 2
(not 0!) received!
| ErrorCode=SUBSCR_EXTERNAL_CREATE_FAILED
| at
com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl.createSubscr(KtfPerform
| erImpl.java:203)
| ...
| 2007-08-24 16:00:36,006 ERROR
[org.springframework.transaction.interceptor.TransactionInterceptor] A
| pplication exception overridden by rollback exception
| com.picsel.server.ezine.subscr.exception.SubscriptionException: "ERROR_CODE 2
(not 0!) received!
| ErrorCode=SUBSCR_EXTERNAL_CREATE_FAILED
| at
com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl.createSubscr(KtfPerform
| erImpl.java:203)
| 2007-08-24 16:00:36,006 ERROR [org.jboss.ejb.plugins.LogInterceptor] RuntimeException
in method: pub
| lic abstract com.picsel.server.ezine.subscr.dto.Subscription
com.picsel.server.ezine.subscr.ejb.inte
|
rfaces.SubscrFacadeLocal.createSubscr(com.picsel.server.ezine.subscr.dto.ProviderAccountDto,java.uti
| l.Map) throws com.picsel.server.ezine.subscr.exception.SubscriptionException:
| org.springframework.transaction.NoTransactionException: No active JTA transaction
| at
org.springframework.transaction.jta.JtaTransactionManager.registerAfterCompletionWithExistingTra
| nsaction(JtaTransactionManager.java:903)
| at
org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletio
| n(AbstractPlatformTransactionManager.java:885)
| at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(Abstr
| actPlatformTransactionManager.java:782)
| at
org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlat
| formTransactionManager.java:730)
| at
org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThr
| owing(TransactionAspectSupport.java:332)
| at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor
| .java:111)
| at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.
| java:161)
| at
org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopPr
| oxy.java:630)
| at
com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl$$EnhancerByCGLIB$$aed74
| 6d5.createSubscr(<generated>)
| at
com.picsel.server.ezine.subscr.ejb.SubscrFacadeBean.createSubscr(SubscrFacadeBean.java:165)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at org.jboss.invocation.Invocation.performCall(Invocation.java:359)
| at
org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invoke(StatelessSessionContainer.ja
| va:237)
| at
org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionIntercep
| tor.java:158)
| at
org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterce
| ptor.java:169)
| at
org.jboss.ejb.plugins.CallValidationInterceptor.invoke(CallValidationInterceptor.java:63)
| at
org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:121)
| at
org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
| at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
| at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168)
| at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
| at
org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:13
| 8)
| at org.jboss.ejb.SessionContainer.internalInvoke(SessionContainer.java:648)
| at org.jboss.ejb.Container.invoke(Container.java:960)
| at
org.jboss.ejb.plugins.local.BaseLocalProxyFactory.invoke(BaseLocalProxyFactory.java:430)
| at
org.jboss.ejb.plugins.local.StatelessSessionProxy.invoke(StatelessSessionProxy.java:103)
| at $Proxy263.createSubscr(Unknown Source)
| at
com.picsel.server.ezine.subscr.web.servlet.CreateSubscrServlet.doPost(CreateSubscrServlet.java:1
| 33)
| at
com.picsel.server.ezine.subscr.web.servlet.CreateSubscrServlet.doGet(CreateSubscrServlet.java:70
| )
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
| at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
| at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290
| )
| at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at
com.picsel.server.common.web.filter.RemoteIpAddrFilter.doFilter(RemoteIpAddrFilter.java:78)
| at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235
| )
| at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
| at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235
| )
| at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
| at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
| at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
| at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:179)
|
| at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
| at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
| at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
| at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
| at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:543)
| at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
| at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:241)
| at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
| at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:580)
|
| at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
| at java.lang.Thread.run(Thread.java:595)
| ...
So the transaction is marked for rollback by spring, but afterwards an
org.springframework.transaction.NoTransactionException is thrown, WHICH WAS NOT HAPPENING
WHEN USING JBOSS 4.0.4. The result is that the application exception is overridden by the
rollback exception.
Could somebody from JBOSS team help me with this, please.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4082691#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...