Repository: camel
Updated Branches:
  refs/heads/camel-2.15.x 508c1dfab -> c4b131d73
  refs/heads/camel-2.16.x c9b7ddaa4 -> 8617e146d
  refs/heads/master 3ec88a547 -> 7eb9e8321


CAMEL-9569: Fixed idempontent consumer - to not leak memory when add/remove 
routes with it many times.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7eb9e832
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7eb9e832
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7eb9e832

Branch: refs/heads/master
Commit: 7eb9e8321cf10fd1cd0cc1c6e8c53843c42bb451
Parents: 3ec88a5
Author: Claus Ibsen <davscl...@apache.org>
Authored: Fri Feb 5 17:20:58 2016 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Fri Feb 5 17:50:45 2016 +0100

----------------------------------------------------------------------
 .../model/IdempotentConsumerDefinition.java     |  3 ---
 .../idempotent/IdempotentConsumer.java          | 28 +++++++++++++++++---
 .../apache/camel/spi/IdempotentRepository.java  |  3 +--
 3 files changed, 26 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/7eb9e832/camel-core/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
 
b/camel-core/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
index 5d42ea3..256394d 100644
--- 
a/camel-core/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
+++ 
b/camel-core/src/main/java/org/apache/camel/model/IdempotentConsumerDefinition.java
@@ -225,9 +225,6 @@ public class IdempotentConsumerDefinition extends 
ExpressionNode {
                 (IdempotentRepository<String>) 
resolveMessageIdRepository(routeContext);
         ObjectHelper.notNull(idempotentRepository, "idempotentRepository", 
this);
 
-        // add as service to CamelContext so we can managed it and it ensures 
it will be shutdown when camel shutdowns
-        routeContext.getCamelContext().addService(idempotentRepository);
-
         Expression expression = getExpression().createExpression(routeContext);
 
         // these boolean should be true by default

http://git-wip-us.apache.org/repos/asf/camel/blob/7eb9e832/camel-core/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
 
b/camel-core/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
index 7b64546..643dd6d 100644
--- 
a/camel-core/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
+++ 
b/camel-core/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
@@ -22,6 +22,8 @@ import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProcessor;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.Expression;
 import org.apache.camel.Navigate;
@@ -50,8 +52,9 @@ import org.slf4j.LoggerFactory;
  * @see org.apache.camel.spi.IdempotentRepository
  * @see org.apache.camel.spi.ExchangeIdempotentRepository
  */
-public class IdempotentConsumer extends ServiceSupport implements 
AsyncProcessor, Navigate<Processor>, IdAware {
+public class IdempotentConsumer extends ServiceSupport implements 
CamelContextAware, AsyncProcessor, Navigate<Processor>, IdAware {
     private static final Logger LOG = 
LoggerFactory.getLogger(IdempotentConsumer.class);
+    private CamelContext camelContext;
     private String id;
     private final Expression messageIdExpression;
     private final AsyncProcessor processor;
@@ -78,6 +81,16 @@ public class IdempotentConsumer extends ServiceSupport 
implements AsyncProcessor
         return "IdempotentConsumer[" + messageIdExpression + " -> " + 
processor + "]";
     }
 
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        this.camelContext = camelContext;
+    }
+
     public String getId() {
         return id;
     }
@@ -191,11 +204,20 @@ public class IdempotentConsumer extends ServiceSupport 
implements AsyncProcessor
     // 
-------------------------------------------------------------------------
 
     protected void doStart() throws Exception {
-        ServiceHelper.startServices(processor);
+        ServiceHelper.startServices(processor, idempotentRepository);
+        if (!camelContext.hasService(idempotentRepository)) {
+            camelContext.addService(idempotentRepository);
+        }
     }
 
     protected void doStop() throws Exception {
-        ServiceHelper.stopServices(processor);
+        ServiceHelper.stopServices(processor, idempotentRepository);
+    }
+
+    @Override
+    protected void doShutdown() throws Exception {
+        ServiceHelper.stopAndShutdownServices(processor, idempotentRepository);
+        camelContext.removeService(idempotentRepository);
     }
 
     public boolean isEager() {

http://git-wip-us.apache.org/repos/asf/camel/blob/7eb9e832/camel-core/src/main/java/org/apache/camel/spi/IdempotentRepository.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/spi/IdempotentRepository.java 
b/camel-core/src/main/java/org/apache/camel/spi/IdempotentRepository.java
index 71f076b..6435c69 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/IdempotentRepository.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/IdempotentRepository.java
@@ -85,8 +85,7 @@ public interface IdempotentRepository<E> extends Service {
      * Clear the repository.
      * <p/>
      * <b>Important:</b> Read the class javadoc about eager vs non-eager mode.
-     *
-     */  
+     */
     void clear();
 
 }

Reply via email to