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