activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Torsten Mielke (JIRA)" <j...@apache.org>
Subject [jira] [Created] (AMQ-3506) Access to ConnectionPool.createSession needs to be synchronized
Date Tue, 20 Sep 2011 14:04:09 GMT
Access to ConnectionPool.createSession needs to be synchronized 
----------------------------------------------------------------

                 Key: AMQ-3506
                 URL: https://issues.apache.org/jira/browse/AMQ-3506
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.5.0
         Environment: activemq-pool, PooledConnectionFactory with maximumActive=1 and blockIfSessionPoolIsFull=true
(default behavior)
            Reporter: Torsten Mielke
             Fix For: 5.6.0


When configuring a PooledConnectionFactory with maximumActive=1 and blockIfSessionPoolIsFull=true
(default behavior for latter config) it is possible that multiple threads that concurrently
try to use the same JMS connection to create a new session might create more sessions than
the configured maximumActive limit.

That's because the call to ConnectionPool.createSession() is not synchronized and if multiple
threads try to call this method concurrently (on the same underlying JMS connection) then
the if-condition in 
{code:java}
SessionKey key = new SessionKey(transacted, ackMode);
SessionPool pool = cache.get(key);
if (pool == null) {
  pool = createSessionPool(key);
  cache.put(key, pool);
}
{code}

will evaluate to true for *all* threads and they all end up creating their own sessionPool
using the same SessionKey properties. 
Access to the if-condition needs to be synchronized so that only one session pool gets created.
That will ensure that not more than the configured maximumActive number of sessions can get
created. 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message