AMQ-5721 - Update ActiveMQ to use commons-pool2 instead of commons-pool.AMQ-5636 will need it. The JMS pool and other components should use it as well.
Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/6d6ed4ea Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/6d6ed4ea Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/6d6ed4ea Branch: refs/heads/master Commit: 6d6ed4eaaf66d144c98365c9448a88a9b574b8f0 Parents: 31834ed Author: Jeff Genender <[email protected]> Authored: Tue Apr 14 06:57:00 2015 -0600 Committer: Dejan Bosanac <[email protected]> Committed: Thu Apr 16 16:01:39 2015 +0200 ---------------------------------------------------------------------- .../camel/component/ActiveMQConfiguration.java | 4 +- activemq-console/pom.xml | 4 +- activemq-jms-pool/pom.xml | 4 +- .../activemq/jms/pool/ConnectionPool.java | 43 +++++++------- .../jms/pool/PooledConnectionFactory.java | 61 +++++++++++--------- .../apache/activemq/jms/pool/PooledSession.java | 2 +- .../src/main/resources/features-core.xml | 2 +- activemq-pool/pom.xml | 4 +- activemq-rar/pom.xml | 12 ++-- activemq-spring/pom.xml | 4 +- assembly/pom.xml | 4 +- assembly/src/main/descriptors/common-bin.xml | 2 +- pom.xml | 8 +-- trash/activemq-optional/pom.xml | 4 +- 14 files changed, 83 insertions(+), 75 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/activemq-camel/src/main/java/org/apache/activemq/camel/component/ActiveMQConfiguration.java ---------------------------------------------------------------------- diff --git a/activemq-camel/src/main/java/org/apache/activemq/camel/component/ActiveMQConfiguration.java b/activemq-camel/src/main/java/org/apache/activemq/camel/component/ActiveMQConfiguration.java index 5dba295..5b9007b 100644 --- a/activemq-camel/src/main/java/org/apache/activemq/camel/component/ActiveMQConfiguration.java +++ b/activemq-camel/src/main/java/org/apache/activemq/camel/component/ActiveMQConfiguration.java @@ -109,7 +109,7 @@ public class ActiveMQConfiguration extends JmsConfiguration { * than the default with the Spring {@link JmsTemplate} which will create a new connection, session, producer * for each message then close them all down again. * <p/> - * The default value is true. Note that this requires an extra dependency on commons-pool. + * The default value is true. Note that this requires an extra dependency on commons-pool2. */ public void setUsePooledConnection(boolean usePooledConnection) { this.usePooledConnection = usePooledConnection; @@ -162,7 +162,7 @@ public class ActiveMQConfiguration extends JmsConfiguration { } protected ConnectionFactory createPooledConnectionFactory(ActiveMQConnectionFactory connectionFactory) { - // lets not use classes directly to avoid a runtime dependency on commons-pool + // lets not use classes directly to avoid a runtime dependency on commons-pool2 // for folks not using this option try { Class type = loadClass("org.apache.activemq.pool.PooledConnectionFactory", getClass().getClassLoader()); http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/activemq-console/pom.xml ---------------------------------------------------------------------- diff --git a/activemq-console/pom.xml b/activemq-console/pom.xml index 5db0a1a..ab26df5 100644 --- a/activemq-console/pom.xml +++ b/activemq-console/pom.xml @@ -60,8 +60,8 @@ <artifactId>geronimo-jms_1.1_spec</artifactId> </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.apache.xbean</groupId> http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/activemq-jms-pool/pom.xml ---------------------------------------------------------------------- diff --git a/activemq-jms-pool/pom.xml b/activemq-jms-pool/pom.xml index 252c362..bc60b55 100755 --- a/activemq-jms-pool/pom.xml +++ b/activemq-jms-pool/pom.xml @@ -69,8 +69,8 @@ <optional>true</optional> </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> </dependency> <!-- for testing use amq --> <dependency> http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/ConnectionPool.java ---------------------------------------------------------------------- diff --git a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/ConnectionPool.java b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/ConnectionPool.java index 6c3fdc3..27c6ca4 100644 --- a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/ConnectionPool.java +++ b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/ConnectionPool.java @@ -29,9 +29,13 @@ import javax.jms.Session; import javax.jms.TemporaryQueue; import javax.jms.TemporaryTopic; -import org.apache.commons.pool.KeyedPoolableObjectFactory; -import org.apache.commons.pool.impl.GenericKeyedObjectPool; -import org.apache.commons.pool.impl.GenericObjectPool; +import org.apache.commons.pool2.BasePooledObjectFactory; +import org.apache.commons.pool2.KeyedObjectPool; +import org.apache.commons.pool2.KeyedPooledObjectFactory; +import org.apache.commons.pool2.PooledObject; +import org.apache.commons.pool2.impl.DefaultPooledObject; +import org.apache.commons.pool2.impl.GenericKeyedObjectPool; +import org.apache.commons.pool2.impl.GenericObjectPool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,29 +71,29 @@ public class ConnectionPool implements ExceptionListener { // Create our internal Pool of session instances. this.sessionPool = new GenericKeyedObjectPool<SessionKey, SessionHolder>( - new KeyedPoolableObjectFactory<SessionKey, SessionHolder>() { - + new KeyedPooledObjectFactory<SessionKey, SessionHolder>() { @Override - public void activateObject(SessionKey key, SessionHolder session) throws Exception { + public PooledObject<SessionHolder> makeObject(SessionKey sessionKey) throws Exception { + + return new DefaultPooledObject<SessionHolder>(new SessionHolder(makeSession(sessionKey))); } @Override - public void destroyObject(SessionKey key, SessionHolder session) throws Exception { - session.close(); + public void destroyObject(SessionKey sessionKey, PooledObject<SessionHolder> pooledObject) throws Exception { + ((SessionHolder)pooledObject.getObject()).close(); } @Override - public SessionHolder makeObject(SessionKey key) throws Exception { - return new SessionHolder(makeSession(key)); + public boolean validateObject(SessionKey sessionKey, PooledObject<SessionHolder> pooledObject) { + return true; } @Override - public void passivateObject(SessionKey key, SessionHolder session) throws Exception { + public void activateObject(SessionKey sessionKey, PooledObject<SessionHolder> pooledObject) throws Exception { } @Override - public boolean validateObject(SessionKey key, SessionHolder session) { - return true; + public void passivateObject(SessionKey sessionKey, PooledObject<SessionHolder> pooledObject) throws Exception { } } ); @@ -258,11 +262,11 @@ public class ConnectionPool implements ExceptionListener { } public int getMaximumActiveSessionPerConnection() { - return this.sessionPool.getMaxActive(); + return this.sessionPool.getMaxTotal(); } public void setMaximumActiveSessionPerConnection(int maximumActiveSessionPerConnection) { - this.sessionPool.setMaxActive(maximumActiveSessionPerConnection); + this.sessionPool.setMaxTotal(maximumActiveSessionPerConnection); } public boolean isUseAnonymousProducers() { @@ -304,12 +308,11 @@ public class ConnectionPool implements ExceptionListener { * Indicates whether blocking should be used to wait for more space to create a session. */ public void setBlockIfSessionPoolIsFull(boolean block) { - this.sessionPool.setWhenExhaustedAction( - (block ? GenericObjectPool.WHEN_EXHAUSTED_BLOCK : GenericObjectPool.WHEN_EXHAUSTED_FAIL)); + this.sessionPool.setBlockWhenExhausted(block); } public boolean isBlockIfSessionPoolIsFull() { - return this.sessionPool.getWhenExhaustedAction() == GenericObjectPool.WHEN_EXHAUSTED_BLOCK; + return this.sessionPool.getBlockWhenExhausted(); } /** @@ -319,7 +322,7 @@ public class ConnectionPool implements ExceptionListener { * @see #setBlockIfSessionPoolIsFull(boolean) */ public long getBlockIfSessionPoolIsFullTimeout() { - return this.sessionPool.getMaxWait(); + return this.sessionPool.getMaxWaitMillis(); } /** @@ -337,7 +340,7 @@ public class ConnectionPool implements ExceptionListener { * then use this setting to configure how long to block before retry */ public void setBlockIfSessionPoolIsFullTimeout(long blockIfSessionPoolIsFullTimeout) { - this.sessionPool.setMaxWait(blockIfSessionPoolIsFullTimeout); + this.sessionPool.setMaxWaitMillis(blockIfSessionPoolIsFullTimeout); } /** http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java ---------------------------------------------------------------------- diff --git a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java index 06918c5..ab251c5 100644 --- a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java +++ b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledConnectionFactory.java @@ -28,8 +28,10 @@ import javax.jms.QueueConnectionFactory; import javax.jms.TopicConnection; import javax.jms.TopicConnectionFactory; -import org.apache.commons.pool.KeyedPoolableObjectFactory; -import org.apache.commons.pool.impl.GenericKeyedObjectPool; +import org.apache.commons.pool2.KeyedPooledObjectFactory; +import org.apache.commons.pool2.PooledObject; +import org.apache.commons.pool2.impl.DefaultPooledObject; +import org.apache.commons.pool2.impl.GenericKeyedObjectPool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,27 +87,10 @@ public class PooledConnectionFactory implements ConnectionFactory, QueueConnecti public void initConnectionsPool() { if (this.connectionsPool == null) { this.connectionsPool = new GenericKeyedObjectPool<ConnectionKey, ConnectionPool>( - new KeyedPoolableObjectFactory<ConnectionKey, ConnectionPool>() { - - @Override - public void activateObject(ConnectionKey key, ConnectionPool connection) throws Exception { - } - - @Override - public void destroyObject(ConnectionKey key, ConnectionPool connection) throws Exception { - try { - if (LOG.isTraceEnabled()) { - LOG.trace("Destroying connection: {}", connection); - } - connection.close(); - } catch (Exception e) { - LOG.warn("Close connection failed for connection: " + connection + ". This exception will be ignored.",e); - } - } - + new KeyedPooledObjectFactory<ConnectionKey, ConnectionPool>() { @Override - public ConnectionPool makeObject(ConnectionKey key) throws Exception { - Connection delegate = createConnection(key); + public PooledObject<ConnectionPool> makeObject(ConnectionKey connectionKey) throws Exception { + Connection delegate = createConnection(connectionKey); ConnectionPool connection = createConnectionPool(delegate); connection.setIdleTimeout(getIdleTimeout()); @@ -124,15 +109,25 @@ public class PooledConnectionFactory implements ConnectionFactory, QueueConnecti PooledConnectionFactory.this.mostRecentlyCreated.set(connection); - return connection; + return new DefaultPooledObject<ConnectionPool>(connection); } @Override - public void passivateObject(ConnectionKey key, ConnectionPool connection) throws Exception { + public void destroyObject(ConnectionKey connectionKey, PooledObject<ConnectionPool> pooledObject) throws Exception { + ConnectionPool connection = pooledObject.getObject(); + try { + if (LOG.isTraceEnabled()) { + LOG.trace("Destroying connection: {}", connection); + } + connection.close(); + } catch (Exception e) { + LOG.warn("Close connection failed for connection: " + connection + ". This exception will be ignored.",e); + } } @Override - public boolean validateObject(ConnectionKey key, ConnectionPool connection) { + public boolean validateObject(ConnectionKey connectionKey, PooledObject<ConnectionPool> pooledObject) { + ConnectionPool connection = pooledObject.getObject(); if (connection != null && connection.expiredCheck()) { if (LOG.isTraceEnabled()) { LOG.trace("Connection has expired: {} and will be destroyed", connection); @@ -143,10 +138,19 @@ public class PooledConnectionFactory implements ConnectionFactory, QueueConnecti return true; } + + @Override + public void activateObject(ConnectionKey connectionKey, PooledObject<ConnectionPool> pooledObject) throws Exception { + } + + @Override + public void passivateObject(ConnectionKey connectionKey, PooledObject<ConnectionPool> pooledObject) throws Exception { + } + }); // Set max idle (not max active) since our connections always idle in the pool. - this.connectionsPool.setMaxIdle(1); + this.connectionsPool.setMaxIdlePerKey(1); this.connectionsPool.setLifo(false); // We always want our validate method to control when idle objects are evicted. @@ -378,7 +382,7 @@ public class PooledConnectionFactory implements ConnectionFactory, QueueConnecti * @return the maxConnections that will be created for this pool. */ public int getMaxConnections() { - return getConnectionsPool().getMaxIdle(); + return getConnectionsPool().getMaxIdlePerKey(); } /** @@ -389,7 +393,8 @@ public class PooledConnectionFactory implements ConnectionFactory, QueueConnecti * @param maxConnections the maxConnections to set */ public void setMaxConnections(int maxConnections) { - getConnectionsPool().setMaxIdle(maxConnections); + getConnectionsPool().setMaxIdlePerKey(maxConnections); + getConnectionsPool().setMaxTotalPerKey(maxConnections); } /** http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledSession.java ---------------------------------------------------------------------- diff --git a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledSession.java b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledSession.java index cbfec29..1e8fd23 100644 --- a/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledSession.java +++ b/activemq-jms-pool/src/main/java/org/apache/activemq/jms/pool/PooledSession.java @@ -47,7 +47,7 @@ import javax.jms.TopicSubscriber; import javax.jms.XASession; import javax.transaction.xa.XAResource; -import org.apache.commons.pool.KeyedObjectPool; +import org.apache.commons.pool2.KeyedObjectPool; import org.slf4j.Logger; import org.slf4j.LoggerFactory; http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/activemq-karaf/src/main/resources/features-core.xml ---------------------------------------------------------------------- diff --git a/activemq-karaf/src/main/resources/features-core.xml b/activemq-karaf/src/main/resources/features-core.xml index c402684..6b77107 100644 --- a/activemq-karaf/src/main/resources/features-core.xml +++ b/activemq-karaf/src/main/resources/features-core.xml @@ -30,7 +30,7 @@ <bundle dependency="true">mvn:org.apache.geronimo.specs/geronimo-j2ee-management_1.1_spec/1.0.1</bundle> <bundle dependency="true">mvn:org.jvnet.jaxb2_commons/jaxb2-basics-runtime/${jaxb-basics-version}</bundle> <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jaxb-impl/${jaxb-bundle-version}</bundle> - <bundle dependency="false">mvn:commons-pool/commons-pool/${commons-pool-version}</bundle> + <bundle dependency="false">mvn:org.apache.commons/commons-pool2/${commons-pool2-version}</bundle> <bundle dependency="false">mvn:commons-net/commons-net/${commons-net-version}</bundle> <bundle dependency='true'>mvn:org.apache.zookeeper/zookeeper/${zookeeper-version}</bundle> <!-- uber osgi bundle means client is not that lean, todo: introduce client osgi bundle --> http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/activemq-pool/pom.xml ---------------------------------------------------------------------- diff --git a/activemq-pool/pom.xml b/activemq-pool/pom.xml index f432a50..05a75ec 100755 --- a/activemq-pool/pom.xml +++ b/activemq-pool/pom.xml @@ -74,8 +74,8 @@ <optional>true</optional> </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>${project.groupId}</groupId> http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/activemq-rar/pom.xml ---------------------------------------------------------------------- diff --git a/activemq-rar/pom.xml b/activemq-rar/pom.xml index 8adfa2c..90e891e 100644 --- a/activemq-rar/pom.xml +++ b/activemq-rar/pom.xml @@ -162,8 +162,8 @@ <artifactId>commons-primitives</artifactId> </exclusion> <exclusion> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> </exclusion> </exclusions> </dependency> @@ -296,8 +296,8 @@ <artifactId>commons-primitives</artifactId> </exclusion> <exclusion> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> </exclusion> </exclusions> </dependency> @@ -336,8 +336,8 @@ <artifactId>geronimo-j2ee-management_1.1_spec</artifactId> </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.apache.activemq</groupId> http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/activemq-spring/pom.xml ---------------------------------------------------------------------- diff --git a/activemq-spring/pom.xml b/activemq-spring/pom.xml index 92b7f60..4137483 100755 --- a/activemq-spring/pom.xml +++ b/activemq-spring/pom.xml @@ -149,8 +149,8 @@ <optional>true</optional> </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/assembly/pom.xml ---------------------------------------------------------------------- diff --git a/assembly/pom.xml b/assembly/pom.xml index 3428aae..ce2ec38 100755 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -228,8 +228,8 @@ <optional>true</optional> </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> <optional>true</optional> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/assembly/src/main/descriptors/common-bin.xml ---------------------------------------------------------------------- diff --git a/assembly/src/main/descriptors/common-bin.xml b/assembly/src/main/descriptors/common-bin.xml index efbd9f2..6359837 100644 --- a/assembly/src/main/descriptors/common-bin.xml +++ b/assembly/src/main/descriptors/common-bin.xml @@ -173,7 +173,7 @@ <include>commons-beanutils:commons-beanutils</include> <include>commons-collections:commons-collections</include> <include>org.apache.commons:commons-dbcp2</include> - <include>commons-pool:commons-pool</include> + <include>org.apache.commons:commons-pool2</include> <include>commons-codec:commons-codec</include> <include>commons-net:commons-net</include> <include>commons-lang:commons-lang</include> http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 96c761a..f45bf0f 100755 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,7 @@ <commons-io-version>2.4</commons-io-version> <commons-lang-version>2.6</commons-lang-version> <commons-logging-version>1.1.3</commons-logging-version> - <commons-pool-version>1.6</commons-pool-version> + <commons-pool2-version>2.3</commons-pool2-version> <commons-primitives-version>1.0</commons-primitives-version> <commons-net-version>3.3</commons-net-version> <directory-version>2.0.0-M6</directory-version> @@ -855,9 +855,9 @@ </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> - <version>${commons-pool-version}</version> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> + <version>${commons-pool2-version}</version> </dependency> <!-- Optional Journal Implementation --> http://git-wip-us.apache.org/repos/asf/activemq/blob/6d6ed4ea/trash/activemq-optional/pom.xml ---------------------------------------------------------------------- diff --git a/trash/activemq-optional/pom.xml b/trash/activemq-optional/pom.xml index 6a7f3a9..f1aa50c 100755 --- a/trash/activemq-optional/pom.xml +++ b/trash/activemq-optional/pom.xml @@ -93,8 +93,8 @@ <artifactId>httpclient</artifactId> </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>commons-collections</groupId>
