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

Daniel Santos updated AMQ-2556:
-------------------------------

    Attachment: XAConsumer.zip

TO REPRODUCE :
1- Launch a broker
2- Launch this ready to use app (consumer in a XA transaction, implemented as a 
Spring's MessageListenner. The config is taken from atomikos 
http://www.atomikos.com/Documentation/SpringIntegration)

No producer nor another XAResource is needed to show the problem

Simply use a debugger, (j)visualvm, jmap/jhat or another memory profiler tool 
to see grow up indefinitly (at each receiveTimeout unit of time : 3s) the 
number of TransactionContext instances on client and TransactionState instances 
on broker

> Memory leaks with XA Transactions (case of read-only transactions)
> ------------------------------------------------------------------
>
>                 Key: AMQ-2556
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2556
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker, JMS client
>    Affects Versions: 5.1.0, 5.2.0, 5.3.0
>         Environment: ActiveMQ 5.3.0
> Atomikos Transactions Essentials 3.5.8
> Spring 2.5.6
> Oracle 11g (thin driver version 11.1.0.7.0)
>            Reporter: Daniel Santos
>         Attachments: XAConsumer.zip
>
>
> Some transaction related information are not released in case of read-only 
> transactions (where not messages have been consumed or produced) by broker 
> and client, that causes an OutOfMemory after running some time.
> Fields that hold these "transaction related information" are (at least) :
> - {{org.apache.activemq.state.ConnectionState.transactions}}
> - {{org.apache.activemq.TransactionContext.ENDED_XA_TRANSACTION_CONTEXTS}}
> After serach, it seems that the case of read-only XA transactions (that 
> terminates at prepare time) has been missed in some code like :
> - {{org.apache.activemq.broker.TransportConnection}} that puts 
> TransactionState in 
> {{org.apache.activemq.state.ConnectionState.transactions}} at the beginning, 
> release them at commit (or rollback) time *but not at prepare time where 
> result is {{XAResource.XA_RDONLY}}*
> - {{org.apache.activemq.TransactionContext}} that do the same mistake via 
> ENDED_XA_TRANSACTION_CONTEXTS in prepare()
> _Note that the case of read-only transactions seems correctly done by 
> {{org.apache.activemq.transaction.XATransaction}} (very interesting comment 
> here 
> http://fisheye6.atlassian.com/browse/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/transaction/XATransaction.java?r=809940#l175)_

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to