You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2012/08/28 14:11:59 UTC
svn commit: r1378098 - in
/activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool:
ConnectionPool.java PooledConnection.java PooledSession.java
Author: gtully
Date: Tue Aug 28 12:11:58 2012
New Revision: 1378098
URL: http://svn.apache.org/viewvc?rev=1378098&view=rev
Log:
https://issues.apache.org/jira/browse/AMQ-3997 - Memory leak in activemq-pool. Apply patch from claus with thanks, removes duplicate listener registration
Modified:
activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/ConnectionPool.java
activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledConnection.java
activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledSession.java
Modified: activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/ConnectionPool.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/ConnectionPool.java?rev=1378098&r1=1378097&r2=1378098&view=diff
==============================================================================
--- activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/ConnectionPool.java (original)
+++ activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/ConnectionPool.java Tue Aug 28 12:11:58 2012
@@ -19,10 +19,10 @@ package org.apache.activemq.pool;
import java.io.IOException;
import java.util.Iterator;
+import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
-
import javax.jms.JMSException;
import javax.jms.Session;
@@ -39,7 +39,7 @@ public class ConnectionPool {
private ActiveMQConnection connection;
private ConcurrentHashMap<SessionKey, SessionPool> cache;
- private ConcurrentLinkedQueue<PooledSession> loanedSessions = new ConcurrentLinkedQueue<PooledSession>();
+ private List<PooledSession> loanedSessions = new CopyOnWriteArrayList<PooledSession>();
private AtomicBoolean started = new AtomicBoolean(false);
private int referenceCount;
private ObjectPoolFactory poolFactory;
Modified: activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledConnection.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledConnection.java?rev=1378098&r1=1378097&r2=1378098&view=diff
==============================================================================
--- activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledConnection.java (original)
+++ activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledConnection.java Tue Aug 28 12:11:58 2012
@@ -16,6 +16,7 @@
*/
package org.apache.activemq.pool;
+import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import javax.jms.Connection;
@@ -54,13 +55,13 @@ import org.slf4j.LoggerFactory;
* href="http://jencks.org/Message+Driven+POJOs">this example</a>
*
*/
-public class PooledConnection implements TopicConnection, QueueConnection, EnhancedConnection {
+public class PooledConnection implements TopicConnection, QueueConnection, EnhancedConnection, PooledSessionEventListener {
private static final transient Logger LOG = LoggerFactory.getLogger(PooledConnection.class);
private ConnectionPool pool;
- private boolean stopped;
- private final CopyOnWriteArrayList<TemporaryQueue> connTempQueues = new CopyOnWriteArrayList<TemporaryQueue>();
- private final CopyOnWriteArrayList<TemporaryTopic> connTempTopics = new CopyOnWriteArrayList<TemporaryTopic>();
+ private volatile boolean stopped;
+ private final List<TemporaryQueue> connTempQueues = new CopyOnWriteArrayList<TemporaryQueue>();
+ private final List<TemporaryTopic> connTempTopics = new CopyOnWriteArrayList<TemporaryTopic>();
public PooledConnection(ConnectionPool pool) {
this.pool = pool;
@@ -151,20 +152,17 @@ public class PooledConnection implements
// Add a temporary destination event listener to the session that notifies us when
// the session creates temporary destinations.
- result.addTempDestEventListener(new PooledSessionEventListener() {
+ result.addTempDestEventListener(this);
+ return (Session) result;
+ }
- @Override
- public void onTemporaryQueueCreate(TemporaryQueue tempQueue) {
- connTempQueues.add(tempQueue);
- }
- @Override
- public void onTemporaryTopicCreate(TemporaryTopic tempTopic) {
- connTempTopics.add(tempTopic);
- }
- });
+ public void onTemporaryQueueCreate(TemporaryQueue tempQueue) {
+ connTempQueues.add(tempQueue);
+ }
- return (Session) result;
+ public void onTemporaryTopicCreate(TemporaryTopic tempTopic) {
+ connTempTopics.add(tempTopic);
}
// EnhancedCollection API
Modified: activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledSession.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledSession.java?rev=1378098&r1=1378097&r2=1378098&view=diff
==============================================================================
--- activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledSession.java (original)
+++ activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledSession.java Tue Aug 28 12:11:58 2012
@@ -78,7 +78,10 @@ public class PooledSession implements Se
}
public void addTempDestEventListener(PooledSessionEventListener listener) {
- this.tempDestEventListeners.add(listener);
+ // only add if really needed
+ if (!tempDestEventListeners.contains(listener)) {
+ this.tempDestEventListeners.add(listener);
+ }
}
protected boolean isIgnoreClose() {
@@ -123,6 +126,7 @@ public class PooledSession implements Se
} finally {
consumers.clear();
browsers.clear();
+ tempDestEventListeners.clear();
}
if (invalidate) {