[ 
https://issues.apache.org/jira/browse/AMQ-6508?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Anthony Durussel updated AMQ-6508:
----------------------------------
    Description: 
We got some exception in TransactionContext start method saying that the 
xaResource is already attributed to an existing XID. 

{code}
TransactionImple.enlistResource - xa_start  - caught: XAException.XAER_PROTO 
for < formatId=131077, gtrid_length=29, bqual_length=36, 
tx_uid=0:ffffac129ea0:4eace372:582d9605:4b, node_name=1, 
branch_uid=0:ffffac129ea0:4eace372:582d9605:55, subordinatenodename=null, 
eis_name=unknown eis name >: javax.transaction.xa.XAException
        at 
org.apache.activemq.TransactionContext.start(TransactionContext.java:354) 
[activemq-client-5.12.1.jar:5.12.1]
        at 
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:725)
 [jbossjts-jacorb-4.17.30.Final-redhat-1.jar:4.17.30.Final-redhat-1]
        at 
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:407)
 [jbossjts-jacorb-4.17.30.Final-redhat-1.jar:4.17.30.Final-redhat-1]
        at 
org.apache.activemq.jms.pool.XaConnectionPool.createSession(XaConnectionPool.java:70)
 [activemq-jms-pool-5.12.1.jar:5.12.1]
        at 
org.apache.activemq.jms.pool.PooledConnection.createSession(PooledConnection.java:167)
 [activemq-jms-pool-5.12.1.jar:5.12.1]
        at 
org.springframework.jms.support.JmsAccessor.createSession(JmsAccessor.java:192) 
[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at 
org.springframework.jms.core.JmsTemplate.access$700(JmsTemplate.java:90) 
[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at 
org.springframework.jms.core.JmsTemplate$JmsTemplateResourceFactory.createSession(JmsTemplate.java:1211)
 [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at 
org.springframework.jms.connection.ConnectionFactoryUtils.doGetTransactionalSession(ConnectionFactoryUtils.java:315)
 [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at 
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:481) 
[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:580) 
[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at 
ch.rp.commons.jms.MessageSenderServiceImpl.sendTextMessage(MessageSenderServiceImpl.java:30)
 [rp-commons-jms-0.0.11.jar:]
        at 
ch.rp.jboss.test.project2.Service2Impl.postJMSMessage(Service2Impl.java:129) 
[classes:]
        at 
ch.rp.jboss.test.project2.Service2Impl.insertRowAndPostJms(Service2Impl.java:76)
 [classes:]
        at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source) 
[:1.8.0_101]
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 [rt.jar:1.8.0_101]
        at java.lang.reflect.Method.invoke(Method.java:498) [rt.jar:1.8.0_101]
{code}

After trying to find out what was the problem, we figured out that some session 
that are returned to the XAPool are not properly cleaned up and returns to the 
pool with registered Xid.
As soon as they are reused the above exception is thrown.

Why is the transactionContext not cleaned or at least validate when session is 
borrow from the pool ? to ensure that the state is valid for the future use.

There is a cleanup method in TransactionContext.java class that reset the 
registered transaction

{code:title=TransactionContext.java lines 806-809|borderStyle=solid}
    public void cleanup() {
        associatedXid = null;
        transactionId = null;
    }
{code}


but this method seems to be never called.



  was:
We got some exception in TransactionContext start method saying that the 
xaResource is already attributed to an existing XID. 

TransactionImple.enlistResource - xa_start  - caught: XAException.XAER_PROTO 
for < formatId=131077, gtrid_length=29, bqual_length=36, 
tx_uid=0:ffffac129ea0:4eace372:582d9605:4b, node_name=1, 
branch_uid=0:ffffac129ea0:4eace372:582d9605:55, subordinatenodename=null, 
eis_name=unknown eis name >: javax.transaction.xa.XAException
        at 
org.apache.activemq.TransactionContext.start(TransactionContext.java:354) 
[activemq-client-5.12.1.jar:5.12.1]
        at 
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:725)
 [jbossjts-jacorb-4.17.30.Final-redhat-1.jar:4.17.30.Final-redhat-1]
        at 
com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:407)
 [jbossjts-jacorb-4.17.30.Final-redhat-1.jar:4.17.30.Final-redhat-1]
        at 
org.apache.activemq.jms.pool.XaConnectionPool.createSession(XaConnectionPool.java:70)
 [activemq-jms-pool-5.12.1.jar:5.12.1]
        at 
org.apache.activemq.jms.pool.PooledConnection.createSession(PooledConnection.java:167)
 [activemq-jms-pool-5.12.1.jar:5.12.1]
        at 
org.springframework.jms.support.JmsAccessor.createSession(JmsAccessor.java:192) 
[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at 
org.springframework.jms.core.JmsTemplate.access$700(JmsTemplate.java:90) 
[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at 
org.springframework.jms.core.JmsTemplate$JmsTemplateResourceFactory.createSession(JmsTemplate.java:1211)
 [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at 
org.springframework.jms.connection.ConnectionFactoryUtils.doGetTransactionalSession(ConnectionFactoryUtils.java:315)
 [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at 
org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:481) 
[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:580) 
[spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
        at 
ch.rp.commons.jms.MessageSenderServiceImpl.sendTextMessage(MessageSenderServiceImpl.java:30)
 [rp-commons-jms-0.0.11.jar:]
        at 
ch.rp.jboss.test.project2.Service2Impl.postJMSMessage(Service2Impl.java:129) 
[classes:]
        at 
ch.rp.jboss.test.project2.Service2Impl.insertRowAndPostJms(Service2Impl.java:76)
 [classes:]
        at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source) 
[:1.8.0_101]
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 [rt.jar:1.8.0_101]
        at java.lang.reflect.Method.invoke(Method.java:498) [rt.jar:1.8.0_101]

After trying to find out what was the problem, we figured out that some session 
that are returned to the XAPool are not properly cleaned up and returns to the 
pool with registered Xid.
As soon as they are reused the above exception is thrown.

Why is the transactionContext not cleaned or at least validate when session is 
borrow from the pool ? to ensure that the state is valid for the future use.

There is a cleanup method in TransactionContext.java class that reset the 
registered transaction

line 806-809 
    public void cleanup() {
        associatedXid = null;
        transactionId = null;
    }



but this method seems to be never called.




> TransactionContext is not cleaned up when session are returned to 
> XaPooledConnectionFactory
> -------------------------------------------------------------------------------------------
>
>                 Key: AMQ-6508
>                 URL: https://issues.apache.org/jira/browse/AMQ-6508
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: activemq-pool
>    Affects Versions: 5.12.1
>            Reporter: Anthony Durussel
>            Priority: Critical
>
> We got some exception in TransactionContext start method saying that the 
> xaResource is already attributed to an existing XID. 
> {code}
> TransactionImple.enlistResource - xa_start  - caught: XAException.XAER_PROTO 
> for < formatId=131077, gtrid_length=29, bqual_length=36, 
> tx_uid=0:ffffac129ea0:4eace372:582d9605:4b, node_name=1, 
> branch_uid=0:ffffac129ea0:4eace372:582d9605:55, subordinatenodename=null, 
> eis_name=unknown eis name >: javax.transaction.xa.XAException
>       at 
> org.apache.activemq.TransactionContext.start(TransactionContext.java:354) 
> [activemq-client-5.12.1.jar:5.12.1]
>       at 
> com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:725)
>  [jbossjts-jacorb-4.17.30.Final-redhat-1.jar:4.17.30.Final-redhat-1]
>       at 
> com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.enlistResource(TransactionImple.java:407)
>  [jbossjts-jacorb-4.17.30.Final-redhat-1.jar:4.17.30.Final-redhat-1]
>       at 
> org.apache.activemq.jms.pool.XaConnectionPool.createSession(XaConnectionPool.java:70)
>  [activemq-jms-pool-5.12.1.jar:5.12.1]
>       at 
> org.apache.activemq.jms.pool.PooledConnection.createSession(PooledConnection.java:167)
>  [activemq-jms-pool-5.12.1.jar:5.12.1]
>       at 
> org.springframework.jms.support.JmsAccessor.createSession(JmsAccessor.java:192)
>  [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
>       at 
> org.springframework.jms.core.JmsTemplate.access$700(JmsTemplate.java:90) 
> [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
>       at 
> org.springframework.jms.core.JmsTemplate$JmsTemplateResourceFactory.createSession(JmsTemplate.java:1211)
>  [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
>       at 
> org.springframework.jms.connection.ConnectionFactoryUtils.doGetTransactionalSession(ConnectionFactoryUtils.java:315)
>  [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
>       at 
> org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:481) 
> [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
>       at org.springframework.jms.core.JmsTemplate.send(JmsTemplate.java:580) 
> [spring-jms-4.2.3.RELEASE.jar:4.2.3.RELEASE]
>       at 
> ch.rp.commons.jms.MessageSenderServiceImpl.sendTextMessage(MessageSenderServiceImpl.java:30)
>  [rp-commons-jms-0.0.11.jar:]
>       at 
> ch.rp.jboss.test.project2.Service2Impl.postJMSMessage(Service2Impl.java:129) 
> [classes:]
>       at 
> ch.rp.jboss.test.project2.Service2Impl.insertRowAndPostJms(Service2Impl.java:76)
>  [classes:]
>       at sun.reflect.GeneratedMethodAccessor13.invoke(Unknown Source) 
> [:1.8.0_101]
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  [rt.jar:1.8.0_101]
>       at java.lang.reflect.Method.invoke(Method.java:498) [rt.jar:1.8.0_101]
> {code}
> After trying to find out what was the problem, we figured out that some 
> session that are returned to the XAPool are not properly cleaned up and 
> returns to the pool with registered Xid.
> As soon as they are reused the above exception is thrown.
> Why is the transactionContext not cleaned or at least validate when session 
> is borrow from the pool ? to ensure that the state is valid for the future 
> use.
> There is a cleanup method in TransactionContext.java class that reset the 
> registered transaction
> {code:title=TransactionContext.java lines 806-809|borderStyle=solid}
>     public void cleanup() {
>         associatedXid = null;
>         transactionId = null;
>     }
> {code}
> but this method seems to be never called.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to