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 transaction object
[org.springframework.transaction.jta.JtaTransactionObject@c82a01]
| 2007-08-24 15:59:36,146 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Using transaction object
[org.springframework.transaction.jta.JtaTransactionObject@c82a01]
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Participating in existing
transaction
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Participating in existing
transaction
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.support.TransactionSynchronizationManager] Initializing
transaction synchronization
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.support.TransactionSynchronizationManager] Initializing
transaction synchronization
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.interceptor.TransactionInterceptor] Getting transaction
for
[com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl.createSubscr]
| 2007-08-24 15:59:39,646 DEBUG
[org.springframework.transaction.interceptor.TransactionInterceptor] Getting transaction
for
[com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl.createSubscr]
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(KtfPerformerImpl.java:203)
| at
com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl$$FastClassByCGLIB$$1834b76.invoke(<generated>)
| at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
| at
org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.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(Cglib2AopProxy.java:630)
| at
com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl$$EnhancerByCGLIB$$aed746d5.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: using 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] Completing
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] Completing
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.RuleBasedTransactionAttribute] Applying rules
to determine whether transaction should rollback on
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.RuleBasedTransactionAttribute] Applying rules
to determine whether transaction should rollback on
com.picsel.server.ezine.subscr.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.RuleBasedTransactionAttribute] Winning
rollback rule is: RollbackRuleAttribute with pattern [Exception]
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.interceptor.RuleBasedTransactionAttribute] 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] Participating transaction
failed - marking existing transaction as rollback-only
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Participating transaction
failed - marking existing transaction as rollback-only
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Setting JTA transaction
rollback-only
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Setting JTA transaction
rollback-only
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Registering after-completion
synchronization with existing JTA transaction
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.jta.JtaTransactionManager] Registering after-completion
synchronization with existing JTA transaction
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.support.TransactionSynchronizationManager] Clearing
transaction synchronization
| 2007-08-24 16:00:36,006 DEBUG
[org.springframework.transaction.support.TransactionSynchronizationManager] Clearing
transaction synchronization
| 2007-08-24 16:00:36,006 ERROR
[org.springframework.transaction.interceptor.TransactionInterceptor] Application 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(KtfPerformerImpl.java:203)
| ...
| 2007-08-24 16:00:36,006 ERROR
[org.springframework.transaction.interceptor.TransactionInterceptor] Application 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(KtfPerformerImpl.java:203)
| 2007-08-24 16:00:36,006 ERROR [org.jboss.ejb.plugins.LogInterceptor] RuntimeException
in method: public abstract com.picsel.server.ezine.subscr.dto.Subscription
com.picsel.server.ezine.subscr.ejb.interfaces.SubscrFacadeLocal.createSubscr(com.picsel.server.ezine.subscr.dto.ProviderAccountDto,java.util.Map)
throws com.picsel.server.ezine.subscr.exception.SubscriptionException:
| org.springframework.transaction.NoTransactionException: No active JTA transaction
| at
org.springframework.transaction.jta.JtaTransactionManager.registerAfterCompletionWithExistingTransaction(JtaTransactionManager.java:903)
| at
org.springframework.transaction.support.AbstractPlatformTransactionManager.triggerAfterCompletion(AbstractPlatformTransactionManager.java:885)
| at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:782)
| at
org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:730)
| at
org.springframework.transaction.interceptor.TransactionAspectSupport.completeTransactionAfterThrowing(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(Cglib2AopProxy.java:630)
| at
com.picsel.server.ezine.subscr.domain.subscrregalg.impl.KtfPerformerImpl$$EnhancerByCGLIB$$aed746d5.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.java:237)
| at
org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:158)
| at
org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invoke(StatelessSessionInstanceInterceptor.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:138)
| 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:133)
| 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=4078324#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...