You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/02/28 14:30:50 UTC
svn commit: r1294639 - in
/camel/trunk/camel-core/src/main/java/org/apache/camel: TimerListener.java
management/mbean/ManagedRoute.java support/TimerListenerManager.java
Author: davsclaus
Date: Tue Feb 28 13:30:50 2012
New Revision: 1294639
URL: http://svn.apache.org/viewvc?rev=1294639&view=rev
Log:
CAMEL-5049: Fixed memory leak due timer listener not get properly removed when removing routes, when adding/removing a lot of routes at runtime.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/TimerListener.java
camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
camel/trunk/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/TimerListener.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/TimerListener.java?rev=1294639&r1=1294638&r2=1294639&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/TimerListener.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/TimerListener.java Tue Feb 28 13:30:50 2012
@@ -29,5 +29,5 @@ public interface TimerListener {
* Notification invoked.
*/
void onTimer();
-
+
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java?rev=1294639&r1=1294638&r2=1294639&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java Tue Feb 28 13:30:50 2012
@@ -251,4 +251,20 @@ public class ManagedRoute extends Manage
return sb.toString();
}
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ ManagedRoute that = (ManagedRoute) o;
+
+ if (!route.equals(that.route)) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ return route.hashCode();
+ }
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java?rev=1294639&r1=1294638&r2=1294639&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/support/TimerListenerManager.java Tue Feb 28 13:30:50 2012
@@ -33,6 +33,9 @@ import org.slf4j.LoggerFactory;
* <p/>
* The {@link #setExecutorService(java.util.concurrent.ScheduledExecutorService)} method
* must be invoked prior to starting this manager using the {@link #start()} method.
+ * <p/>
+ * Also ensure when adding and remove listeners, that they are correctly removed to avoid
+ * leaking memory.
*
* @see TimerListener
*/
@@ -91,11 +94,27 @@ public class TimerListenerManager extend
}
}
+ /**
+ * Adds the listener.
+ * <p/>
+ * It may be important to implement {@link #equals(Object)} and {@link #hashCode()} for the listener
+ * to ensure that we can remove the same listener again, when invoking remove.
+ *
+ * @param listener listener
+ */
public void addTimerListener(TimerListener listener) {
listeners.add(listener);
LOG.debug("Added TimerListener: {}", listener);
}
+ /**
+ * Removes the listener.
+ * <p/>
+ * It may be important to implement {@link #equals(Object)} and {@link #hashCode()} for the listener
+ * to ensure that we can remove the same listener again, when invoking remove.
+ *
+ * @param listener listener.
+ */
public void removeTimerListener(TimerListener listener) {
listeners.remove(listener);
LOG.debug("Removed TimerListener: {}", listener);
@@ -117,5 +136,10 @@ public class TimerListenerManager extend
}
}
+ @Override
+ protected void doShutdown() throws Exception {
+ super.doShutdown();
+ listeners.clear();
+ }
}