You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "SuoNayi (JIRA)" <ji...@apache.org> on 2012/12/17 04:36:12 UTC

[jira] [Commented] (AMQ-4225) PooledConnectionFactory should track Session checkouts and close associated resources

    [ https://issues.apache.org/jira/browse/AMQ-4225?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13533616#comment-13533616 ] 

SuoNayi commented on AMQ-4225:
------------------------------

You may need read the javadoc of PooledConnectionFactory. 
It does not pool consumers in fact because of the well-known reason you mentioned above.
It's not reasonable to close all the associated  resource such as sessions, producers, 
because the connection is thread-safe and it's recommended to reuse the connection.
Supposing that you use a single shared connection factory to create a consumer that will be active/referenced for consuming messages all the time,
eventually you call the close method on the connection to return the connection to the pool,if the consumer is closed by the pool then you won't get any messages consumed any more.

                
> PooledConnectionFactory should track Session checkouts and close associated resources
> -------------------------------------------------------------------------------------
>
>                 Key: AMQ-4225
>                 URL: https://issues.apache.org/jira/browse/AMQ-4225
>             Project: ActiveMQ
>          Issue Type: Improvement
>    Affects Versions: 5.7.0
>            Reporter: Raul Kripalani
>
> When the user's code closes a Connection checked out from the pool, I would expect activemq-pool to close Sessions, MessageConsumers and MessageProducers that were created from it. 
> Unfortunately, activemq-pool only cleans up Sessions on Connection.close() when no one else is referencing the Connection (referenceCount == 0). 
> This makes Sessions, Consumers and Producers outlive the code that actually uses them, thus leading to increased resource consumption and messages being trapped in prefetch buffers that are no longer monitored.
> Instead, we should keep track of the Sessions that were created from each specific Connection checkout, and close them when the borrowed Connection is closed.
> Otherwise we bump into situations like [SPR-10092|https://jira.springsource.org/browse/SPR-10092] when using Spring's DefaultMessageListenerContainer. In some cases DMLC "forgets" to explicitly close MessageConsumers and Sessions, even though Connections are always closed, but the pool doesn't take care of cleaning up associated sessions.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira