[jboss-user] [JBoss/Spring Integration] - jboss 4.2.1 with spring 2.0.6 causes NoTransactionException

bucegiomu do-not-reply at jboss.com
Mon Sep 10 11:56:37 EDT 2007


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 at c82a01]
  | 2007-08-24 15:59:36,146 DEBUG [org.springframework.transaction.jta.JtaTransactionManager] Using tran
  | saction object [org.springframework.transaction.jta.JtaTransactionObject at 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#4082691

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4082691



More information about the jboss-user mailing list