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()),

Reply via email to