This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit 1ae2632e1fe4423697e35cebf0106220ab884966 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Nov 7 11:37:43 2020 +0100 CAMEL-15823: camel-core - Optimize to use shared redelivery policy and logger for error handler when they use out of the box settings. --- .../apache/camel/builder/DefaultErrorHandlerBuilder.java | 15 +++++++++++++++ .../errorhandler/DefaultErrorHandlerConfiguration.java | 6 ++++++ .../camel/processor/errorhandler/DeadLetterChannel.java | 8 +++++++- .../camel/processor/errorhandler/DefaultErrorHandler.java | 8 +++++++- .../camel/processor/errorhandler/ErrorHandlerSupport.java | 3 +++ .../camel/processor/errorhandler/RedeliveryPolicy.java | 3 +++ .../reifier/errorhandler/DeadLetterChannelReifier.java | 7 ++++++- .../reifier/errorhandler/DefaultErrorHandlerReifier.java | 11 +++++++++-- 8 files changed, 56 insertions(+), 5 deletions(-) diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java index ab235fe2..fff2bb85 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java @@ -513,6 +513,16 @@ public class DefaultErrorHandlerBuilder extends ErrorHandlerBuilderSupport imple this.failureProcessorRef = failureProcessorRef; } + @Override + public boolean hasRedeliveryPolicy() { + return redeliveryPolicy != null; + } + + @Override + public RedeliveryPolicy getDefaultRedeliveryPolicy() { + return RedeliveryPolicy.DEFAULT_POLICY; + } + public RedeliveryPolicy getRedeliveryPolicy() { if (redeliveryPolicy == null) { redeliveryPolicy = createRedeliveryPolicy(); @@ -527,6 +537,11 @@ public class DefaultErrorHandlerBuilder extends ErrorHandlerBuilderSupport imple this.redeliveryPolicy = redeliveryPolicy; } + @Override + public boolean hasLogger() { + return logger != null; + } + public CamelLogger getLogger() { if (logger == null) { logger = createLogger(); diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DefaultErrorHandlerConfiguration.java b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DefaultErrorHandlerConfiguration.java index 5be22fb..77851be 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DefaultErrorHandlerConfiguration.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DefaultErrorHandlerConfiguration.java @@ -36,12 +36,18 @@ public interface DefaultErrorHandlerConfiguration extends ErrorHandlerFactory { void setExceptionPolicyStrategyRef(String exceptionPolicyStrategyRef); + boolean hasLogger(); + CamelLogger getLogger(); void setLogger(CamelLogger logger); + boolean hasRedeliveryPolicy(); + RedeliveryPolicy getRedeliveryPolicy(); + RedeliveryPolicy getDefaultRedeliveryPolicy(); + void setRedeliveryPolicy(RedeliveryPolicy redeliveryPolicy); Processor getOnRedelivery(); diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DeadLetterChannel.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DeadLetterChannel.java index f4095eb..f4ce08f 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DeadLetterChannel.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DeadLetterChannel.java @@ -19,9 +19,11 @@ package org.apache.camel.processor.errorhandler; import java.util.concurrent.ScheduledExecutorService; import org.apache.camel.CamelContext; +import org.apache.camel.LoggingLevel; import org.apache.camel.Predicate; import org.apache.camel.Processor; import org.apache.camel.spi.CamelLogger; +import org.slf4j.LoggerFactory; /** * Implements a <a href="http://camel.apache.org/dead-letter-channel.html">Dead Letter Channel</a> after attempting to @@ -29,6 +31,9 @@ import org.apache.camel.spi.CamelLogger; */ public class DeadLetterChannel extends RedeliveryErrorHandler { + private static final CamelLogger DEFAULT_LOGGER + = new CamelLogger(LoggerFactory.getLogger(DeadLetterChannel.class), LoggingLevel.ERROR); + /** * Creates the dead letter channel. * @@ -63,7 +68,8 @@ public class DeadLetterChannel extends RedeliveryErrorHandler { ScheduledExecutorService executorService, Processor onPrepareProcessor, Processor onExceptionOccurredProcessor) { - super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, deadLetter, deadLetterUri, + super(camelContext, output, logger != null ? logger : DEFAULT_LOGGER, redeliveryProcessor, redeliveryPolicy, deadLetter, + deadLetterUri, deadLetterHandleException, useOriginalMessagePolicy, useOriginalBodyPolicy, retryWhile, executorService, onPrepareProcessor, onExceptionOccurredProcessor); diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DefaultErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DefaultErrorHandler.java index fb83248..d4cbef7 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DefaultErrorHandler.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DefaultErrorHandler.java @@ -19,15 +19,20 @@ package org.apache.camel.processor.errorhandler; import java.util.concurrent.ScheduledExecutorService; import org.apache.camel.CamelContext; +import org.apache.camel.LoggingLevel; import org.apache.camel.Predicate; import org.apache.camel.Processor; import org.apache.camel.spi.CamelLogger; +import org.slf4j.LoggerFactory; /** * Default error handler */ public class DefaultErrorHandler extends RedeliveryErrorHandler { + private static final CamelLogger DEFAULT_LOGGER + = new CamelLogger(LoggerFactory.getLogger(DefaultErrorHandler.class), LoggingLevel.ERROR); + /** * Creates the default error handler. * @@ -52,7 +57,8 @@ public class DefaultErrorHandler extends RedeliveryErrorHandler { ScheduledExecutorService executorService, Processor onPrepareProcessor, Processor onExceptionOccurredProcessor) { - super(camelContext, output, logger, redeliveryProcessor, redeliveryPolicy, null, null, true, false, false, retryWhile, + super(camelContext, output, logger != null ? logger : DEFAULT_LOGGER, redeliveryProcessor, redeliveryPolicy, null, null, + true, false, false, retryWhile, executorService, onPrepareProcessor, onExceptionOccurredProcessor); setExceptionPolicy(exceptionPolicyStrategy); } diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java index 424934c..ba7447b 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java @@ -21,6 +21,7 @@ import java.util.Map; import org.apache.camel.Exchange; import org.apache.camel.Processor; +import org.apache.camel.spi.CamelLogger; import org.apache.camel.spi.ErrorHandler; import org.apache.camel.support.ChildServiceSupport; @@ -32,6 +33,8 @@ public abstract class ErrorHandlerSupport extends ChildServiceSupport implements protected final Map<ExceptionPolicyKey, ExceptionPolicy> exceptionPolicies = new LinkedHashMap<>(); // optimize to use a shared instance protected ExceptionPolicyStrategy exceptionPolicy = DefaultExceptionPolicyStrategy.INSTANCE; + // optimize to use a shared instance + public static final CamelLogger DEFAULT_CAMEL_LOGGER = new CamelLogger(); public void addErrorHandler(Processor errorHandler) { addChildService(errorHandler); diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java index 8f20646..de94f68 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java @@ -83,6 +83,9 @@ public class RedeliveryPolicy implements Cloneable, Serializable { private static final long serialVersionUID = -338222777701473252L; private static final Logger LOG = LoggerFactory.getLogger(RedeliveryPolicy.class); + // default policy using out of the box settings which can be shared + public static final RedeliveryPolicy DEFAULT_POLICY = new RedeliveryPolicy(); + protected long redeliveryDelay = 1000L; protected int maximumRedeliveries; protected long maximumRedeliveryDelay = 60 * 1000L; diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/DeadLetterChannelReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/DeadLetterChannelReifier.java index f5981bd..16ef459 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/DeadLetterChannelReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/DeadLetterChannelReifier.java @@ -23,6 +23,7 @@ import org.apache.camel.Processor; import org.apache.camel.Route; import org.apache.camel.model.errorhandler.DeadLetterChannelConfiguration; import org.apache.camel.processor.errorhandler.DeadLetterChannel; +import org.apache.camel.processor.errorhandler.RedeliveryPolicy; import org.apache.camel.util.StringHelper; public class DeadLetterChannelReifier extends DefaultErrorHandlerReifier<DeadLetterChannelConfiguration> { @@ -35,10 +36,14 @@ public class DeadLetterChannelReifier extends DefaultErrorHandlerReifier<DeadLet public Processor createErrorHandler(Processor processor) throws Exception { validateDeadLetterUri(); + // use either default redelivery policy or explicit configured policy + RedeliveryPolicy redeliveryPolicy + = definition.hasRedeliveryPolicy() ? definition.getRedeliveryPolicy() : definition.getDefaultRedeliveryPolicy(); + DeadLetterChannel answer = new DeadLetterChannel( camelContext, processor, definition.getLogger(), getBean(Processor.class, definition.getOnRedelivery(), definition.getOnRedeliveryRef()), - definition.getRedeliveryPolicy(), definition.getExceptionPolicyStrategy(), + redeliveryPolicy, definition.getExceptionPolicyStrategy(), getBean(Processor.class, definition.getFailureProcessor(), definition.getFailureProcessorRef()), definition.getDeadLetterUri(), definition.isDeadLetterHandleNewException(), definition.isUseOriginalMessage(), definition.isUseOriginalBody(), diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/DefaultErrorHandlerReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/DefaultErrorHandlerReifier.java index 2d2ab59..fd13371 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/DefaultErrorHandlerReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/DefaultErrorHandlerReifier.java @@ -24,6 +24,8 @@ import org.apache.camel.Route; import org.apache.camel.model.errorhandler.DefaultErrorHandlerConfiguration; import org.apache.camel.processor.errorhandler.DefaultErrorHandler; import org.apache.camel.processor.errorhandler.ExceptionPolicyStrategy; +import org.apache.camel.processor.errorhandler.RedeliveryPolicy; +import org.apache.camel.spi.CamelLogger; import org.apache.camel.spi.ExecutorServiceManager; import org.apache.camel.spi.ThreadPoolProfile; @@ -35,10 +37,15 @@ public class DefaultErrorHandlerReifier<T extends DefaultErrorHandlerConfigurati @Override public Processor createErrorHandler(Processor processor) throws Exception { + // use either default redelivery policy or explicit configured policy + RedeliveryPolicy redeliveryPolicy + = definition.hasRedeliveryPolicy() ? definition.getRedeliveryPolicy() : definition.getDefaultRedeliveryPolicy(); + CamelLogger logger = definition.hasLogger() ? definition.getLogger() : null; + DefaultErrorHandler answer = new DefaultErrorHandler( - camelContext, processor, definition.getLogger(), + camelContext, processor, logger, getBean(Processor.class, definition.getOnRedelivery(), definition.getOnRedeliveryRef()), - definition.getRedeliveryPolicy(), + redeliveryPolicy, getBean(ExceptionPolicyStrategy.class, definition.getExceptionPolicyStrategy(), definition.getExceptionPolicyStrategyRef()), getPredicate(definition.getRetryWhile(), definition.getRetryWhileRef()),