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(); }