You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2006/05/04 15:58:55 UTC
svn commit: r399702 - in
/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool:
ConnectionPool.java PooledConnectionFactory.java SessionPool.java
Author: jstrachan
Date: Thu May 4 06:58:43 2006
New Revision: 399702
URL: http://svn.apache.org/viewcvs?rev=399702&view=rev
Log:
patched the pooled JMS provider to make it easier to configure the size and implementation of the underlying session pool
Modified:
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/ConnectionPool.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/PooledConnectionFactory.java
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/SessionPool.java
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/ConnectionPool.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/ConnectionPool.java?rev=399702&r1=399701&r2=399702&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/ConnectionPool.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/ConnectionPool.java Thu May 4 06:58:43 2006
@@ -20,6 +20,7 @@
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.util.JMSExceptionSupport;
+import org.apache.commons.pool.ObjectPoolFactory;
import javax.jms.JMSException;
import javax.jms.Session;
@@ -37,14 +38,16 @@
private ActiveMQConnection connection;
private Map cache;
private AtomicBoolean started = new AtomicBoolean(false);
+ private ObjectPoolFactory poolFactory;
- public ConnectionPool(ActiveMQConnection connection) {
- this(connection, new HashMap());
+ public ConnectionPool(ActiveMQConnection connection, ObjectPoolFactory poolFactory) {
+ this(connection, new HashMap(), poolFactory);
}
- public ConnectionPool(ActiveMQConnection connection, Map cache) {
+ public ConnectionPool(ActiveMQConnection connection, Map cache, ObjectPoolFactory poolFactory) {
this.connection = connection;
this.cache = cache;
+ this.poolFactory = poolFactory;
}
public void start() throws JMSException {
@@ -61,7 +64,7 @@
SessionKey key = new SessionKey(transacted, ackMode);
SessionPool pool = (SessionPool) cache.get(key);
if (pool == null) {
- pool = new SessionPool(this, key);
+ pool = new SessionPool(this, key, poolFactory.createPool());
cache.put(key, pool);
}
return pool.borrowSession();
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/PooledConnectionFactory.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/PooledConnectionFactory.java?rev=399702&r1=399701&r2=399702&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/PooledConnectionFactory.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/PooledConnectionFactory.java Thu May 4 06:58:43 2006
@@ -21,6 +21,9 @@
import org.apache.activemq.Service;
import org.apache.activemq.util.IOExceptionSupport;
import org.apache.activemq.util.ServiceStopper;
+import org.apache.commons.pool.ObjectPoolFactory;
+import org.apache.commons.pool.impl.GenericObjectPoolFactory;
+import org.apache.commons.pool.impl.GenericObjectPool.Config;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
@@ -36,16 +39,17 @@
* href="http://activemq.org/Spring+Support">JmsTemplate</a>.
*
* <b>NOTE</b> this implementation is only intended for use when sending
- * messages.
- * It does not deal with pooling of consumers; for that look at a library like
- * <a href="http://jencks.org/">Jencks</a> such as in
- * <a href="http://jencks.org/Message+Driven+POJOs">this example</a>
+ * messages. It does not deal with pooling of consumers; for that look at a
+ * library like <a href="http://jencks.org/">Jencks</a> such as in <a
+ * href="http://jencks.org/Message+Driven+POJOs">this example</a>
*
* @version $Revision: 1.1 $
*/
public class PooledConnectionFactory implements ConnectionFactory, Service {
private ActiveMQConnectionFactory connectionFactory;
private Map cache = new HashMap();
+ private ObjectPoolFactory poolFactory;
+ private int maximumActive = 5000;
public PooledConnectionFactory() {
this(new ActiveMQConnectionFactory());
@@ -76,7 +80,7 @@
ConnectionPool connection = (ConnectionPool) cache.get(key);
if (connection == null) {
ActiveMQConnection delegate = createConnection(key);
- connection = new ConnectionPool(delegate);
+ connection = new ConnectionPool(delegate, getPoolFactory());
cache.put(key, connection);
}
return new PooledConnection(connection);
@@ -115,5 +119,35 @@
}
}
stopper.throwFirstException();
+ }
+
+ public ObjectPoolFactory getPoolFactory() {
+ if (poolFactory == null) {
+ poolFactory = createPoolFactory();
+ }
+ return poolFactory;
+ }
+
+ /**
+ * Sets the object pool factory used to create individual session pools for
+ * each connection
+ */
+ public void setPoolFactory(ObjectPoolFactory poolFactory) {
+ this.poolFactory = poolFactory;
+ }
+
+ public int getMaximumActive() {
+ return maximumActive;
+ }
+
+ /**
+ * Sets the maximum number of active sessions per connection
+ */
+ public void setMaximumActive(int maximumActive) {
+ this.maximumActive = maximumActive;
+ }
+
+ protected ObjectPoolFactory createPoolFactory() {
+ return new GenericObjectPoolFactory(null, maximumActive);
}
}
Modified: incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/SessionPool.java
URL: http://svn.apache.org/viewcvs/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/SessionPool.java?rev=399702&r1=399701&r2=399702&view=diff
==============================================================================
--- incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/SessionPool.java (original)
+++ incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/pool/SessionPool.java Thu May 4 06:58:43 2006
@@ -36,10 +36,6 @@
private SessionKey key;
private ObjectPool sessionPool;
- public SessionPool(ConnectionPool connectionPool, SessionKey key) {
- this(connectionPool, key, new GenericObjectPool());
- }
-
public SessionPool(ConnectionPool connectionPool, SessionKey key, ObjectPool sessionPool) {
this.connectionPool = connectionPool;
this.key = key;