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 <claus.ib...@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); } }