[ https://issues.apache.org/jira/browse/AMQ-3506?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Torsten Mielke updated AMQ-3506: -------------------------------- Attachment: AMQ-3506.patch Attaching possible fix and corresponding JUnit test > 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 > Labels: activemq-pool, maximumActive, sessionPool > Fix For: 5.6.0 > > Attachments: AMQ-3506.patch > > Original Estimate: 3h > Remaining Estimate: 3h > > 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