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 2020/11/09 18:23:33 UTC

[camel] branch master updated: CAMEL-15802: camel-core - Optimize to help untangle error handler reifier/model from runtime

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


The following commit(s) were added to refs/heads/master by this push:
     new 64b10f2  CAMEL-15802: camel-core - Optimize to help untangle error handler reifier/model from runtime
64b10f2 is described below

commit 64b10f2e396d7dfd960ff421cdd68704dfce490c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Nov 9 19:10:09 2020 +0100

    CAMEL-15802: camel-core - Optimize to help untangle error handler reifier/model from runtime
---
 ...eadLetterChannelOnExceptionOnRedeliveryTest.xml |  6 +---
 .../camel/builder/DeadLetterChannelBuilder.java    | 19 +-----------
 .../camel/builder/DefaultErrorHandlerBuilder.java  | 35 ----------------------
 .../DefaultErrorHandlerConfiguration.java          | 13 --------
 .../errorhandler/DeadLetterChannelReifier.java     | 33 ++++++++++----------
 5 files changed, 17 insertions(+), 89 deletions(-)

diff --git a/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml b/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml
index 4499218..dec27a3 100644
--- a/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml
+++ b/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml
@@ -25,15 +25,11 @@
     ">
 
     <bean id="deadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
-        <property name="deadLetter" ref="dead"/>
+        <property name="deadLetterUri" value="mock:error"/>
         <property name="onRedelivery" ref="myRedeliveryProcessor"/>
         <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
     </bean>
     
-    <bean id="dead" class="org.apache.camel.component.mock.MockEndpoint">
-        <property name="endpointUriIfNotSpecified" value="mock:error"/>
-    </bean>
-
     <bean id="redeliveryPolicy" class="org.apache.camel.processor.errorhandler.RedeliveryPolicy">
         <property name="maximumRedeliveries" value="5"/>
         <!-- go fast since its a unit test -->
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
index 30c5843..069f88b 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
@@ -17,12 +17,8 @@
 package org.apache.camel.builder;
 
 import org.apache.camel.Endpoint;
-import org.apache.camel.ExchangePattern;
 import org.apache.camel.LoggingLevel;
-import org.apache.camel.Processor;
 import org.apache.camel.model.errorhandler.DeadLetterChannelConfiguration;
-import org.apache.camel.processor.FatalFallbackErrorHandler;
-import org.apache.camel.processor.SendProcessor;
 import org.apache.camel.processor.errorhandler.DeadLetterChannel;
 import org.apache.camel.spi.CamelLogger;
 import org.slf4j.LoggerFactory;
@@ -37,7 +33,7 @@ public class DeadLetterChannelBuilder extends DefaultErrorHandlerBuilder impleme
     }
 
     public DeadLetterChannelBuilder(Endpoint deadLetter) {
-        setDeadLetter(deadLetter);
+        setDeadLetterUri(deadLetter.getEndpointUri());
         // DLC do not log exhausted by default
         getRedeliveryPolicy().setLogExhausted(false);
     }
@@ -57,19 +53,6 @@ public class DeadLetterChannelBuilder extends DefaultErrorHandlerBuilder impleme
     // -------------------------------------------------------------------------
 
     @Override
-    public Processor getFailureProcessor() {
-        if (failureProcessor == null) {
-            // wrap in our special safe fallback error handler if sending to
-            // dead letter channel fails
-            Processor child = new SendProcessor(deadLetter, ExchangePattern.InOnly);
-            // force MEP to be InOnly so when sending to DLQ we would not expect
-            // a reply if the MEP was InOut
-            failureProcessor = new FatalFallbackErrorHandler(child, true);
-        }
-        return failureProcessor;
-    }
-
-    @Override
     protected CamelLogger createLogger() {
         return new CamelLogger(LoggerFactory.getLogger(DeadLetterChannel.class), LoggingLevel.ERROR);
     }
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 fff2bb85..68d30ef 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
@@ -19,7 +19,6 @@ package org.apache.camel.builder;
 import java.util.concurrent.ScheduledExecutorService;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
 import org.apache.camel.Expression;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Predicate;
@@ -43,9 +42,6 @@ public class DefaultErrorHandlerBuilder extends ErrorHandlerBuilderSupport imple
     protected String onRedeliveryRef;
     protected Predicate retryWhile;
     protected String retryWhileRef;
-    protected Processor failureProcessor;
-    protected String failureProcessorRef;
-    protected Endpoint deadLetter;
     protected String deadLetterUri;
     protected boolean deadLetterHandleNewException = true;
     protected boolean useOriginalMessage;
@@ -84,11 +80,6 @@ public class DefaultErrorHandlerBuilder extends ErrorHandlerBuilderSupport imple
         other.setOnRedeliveryRef(onRedeliveryRef);
         other.setRetryWhile(retryWhile);
         other.setRetryWhileRef(retryWhileRef);
-        other.setFailureProcessor(failureProcessor);
-        other.setFailureProcessorRef(failureProcessorRef);
-        if (deadLetter != null) {
-            other.setDeadLetter(deadLetter);
-        }
         other.setDeadLetterUri(deadLetterUri);
         other.setOnPrepareFailure(onPrepareFailure);
         other.setOnPrepareFailureRef(onPrepareFailureRef);
@@ -497,22 +488,6 @@ public class DefaultErrorHandlerBuilder extends ErrorHandlerBuilderSupport imple
     // Properties
     // -------------------------------------------------------------------------
 
-    public Processor getFailureProcessor() {
-        return failureProcessor;
-    }
-
-    public void setFailureProcessor(Processor failureProcessor) {
-        this.failureProcessor = failureProcessor;
-    }
-
-    public String getFailureProcessorRef() {
-        return failureProcessorRef;
-    }
-
-    public void setFailureProcessorRef(String failureProcessorRef) {
-        this.failureProcessorRef = failureProcessorRef;
-    }
-
     @Override
     public boolean hasRedeliveryPolicy() {
         return redeliveryPolicy != null;
@@ -602,19 +577,9 @@ public class DefaultErrorHandlerBuilder extends ErrorHandlerBuilderSupport imple
     }
 
     public void setDeadLetterUri(String deadLetterUri) {
-        this.deadLetter = null;
         this.deadLetterUri = deadLetterUri;
     }
 
-    public Endpoint getDeadLetter() {
-        return deadLetter;
-    }
-
-    public void setDeadLetter(Endpoint deadLetter) {
-        this.deadLetter = deadLetter;
-        this.deadLetterUri = deadLetter.getEndpointUri();
-    }
-
     public boolean isDeadLetterHandleNewException() {
         return deadLetterHandleNewException;
     }
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 77851be..b7ca571 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
@@ -18,7 +18,6 @@ package org.apache.camel.model.errorhandler;
 
 import java.util.concurrent.ScheduledExecutorService;
 
-import org.apache.camel.Endpoint;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
@@ -66,18 +65,6 @@ public interface DefaultErrorHandlerConfiguration extends ErrorHandlerFactory {
 
     void setRetryWhileRef(String retryWhileRef);
 
-    Processor getFailureProcessor();
-
-    void setFailureProcessor(Processor failureProcessor);
-
-    String getFailureProcessorRef();
-
-    void setFailureProcessorRef(String failureProcessorRef);
-
-    Endpoint getDeadLetter();
-
-    void setDeadLetter(Endpoint deadLetter);
-
     String getDeadLetterUri();
 
     void setDeadLetterUri(String deadLetterUri);
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 81a2003..1dabfe2 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
@@ -16,16 +16,17 @@
  */
 package org.apache.camel.reifier.errorhandler;
 
-import org.apache.camel.Endpoint;
 import org.apache.camel.ErrorHandlerFactory;
-import org.apache.camel.NoSuchEndpointException;
+import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.model.errorhandler.DeadLetterChannelConfiguration;
+import org.apache.camel.processor.FatalFallbackErrorHandler;
+import org.apache.camel.processor.SendProcessor;
 import org.apache.camel.processor.errorhandler.DeadLetterChannel;
 import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
 import org.apache.camel.spi.CamelLogger;
-import org.apache.camel.util.StringHelper;
+import org.apache.camel.util.ObjectHelper;
 
 public class DeadLetterChannelReifier extends DefaultErrorHandlerReifier<DeadLetterChannelConfiguration> {
 
@@ -35,18 +36,19 @@ public class DeadLetterChannelReifier extends DefaultErrorHandlerReifier<DeadLet
 
     @Override
     public Processor createErrorHandler(Processor processor) throws Exception {
-        validateDeadLetterUri();
+        ObjectHelper.notNull(definition.getDeadLetterUri(), "deadLetterUri", this);
 
         // optimize to use shared default instance if using out of the box settings
         RedeliveryPolicy redeliveryPolicy
                 = definition.hasRedeliveryPolicy() ? definition.getRedeliveryPolicy() : definition.getDefaultRedeliveryPolicy();
         CamelLogger logger = definition.hasLogger() ? definition.getLogger() : null;
 
+        Processor deadLetterProcessor = createDeadLetterChannelProcessor(definition.getDeadLetterUri());
+
         DeadLetterChannel answer = new DeadLetterChannel(
                 camelContext, processor, logger,
                 getBean(Processor.class, definition.getOnRedelivery(), definition.getOnRedeliveryRef()),
-                redeliveryPolicy, definition.getExceptionPolicyStrategy(),
-                getBean(Processor.class, definition.getFailureProcessor(), definition.getFailureProcessorRef()),
+                redeliveryPolicy, definition.getExceptionPolicyStrategy(), deadLetterProcessor,
                 definition.getDeadLetterUri(), definition.isDeadLetterHandleNewException(), definition.isUseOriginalMessage(),
                 definition.isUseOriginalBody(),
                 definition.getRetryWhilePolicy(camelContext),
@@ -58,18 +60,13 @@ public class DeadLetterChannelReifier extends DefaultErrorHandlerReifier<DeadLet
         return answer;
     }
 
-    protected void validateDeadLetterUri() {
-        Endpoint deadLetter = definition.getDeadLetter();
-        String deadLetterUri = definition.getDeadLetterUri();
-        if (deadLetter == null) {
-            StringHelper.notEmpty(deadLetterUri, "deadLetterUri", this);
-            deadLetter = camelContext.getEndpoint(deadLetterUri);
-            if (deadLetter == null) {
-                throw new NoSuchEndpointException(deadLetterUri);
-            }
-            // TODO: ErrorHandler: no modification to the model should be done
-            definition.setDeadLetter(deadLetter);
-        }
+    private Processor createDeadLetterChannelProcessor(String uri) {
+        // wrap in our special safe fallback error handler if sending to
+        // dead letter channel fails
+        Processor child = new SendProcessor(camelContext.getEndpoint(uri), ExchangePattern.InOnly);
+        // force MEP to be InOnly so when sending to DLQ we would not expect
+        // a reply if the MEP was InOut
+        return new FatalFallbackErrorHandler(child, true);
     }
 
 }