Repository: camel Updated Branches: refs/heads/master e512dd002 -> 777d7311e
CAMEL-9250: Configure AllowUseOriginalMessage to be disabled by default if not in use. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e58ffc51 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e58ffc51 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e58ffc51 Branch: refs/heads/master Commit: e58ffc51b6daffa54edbf48f5e231bdd20c083ad Parents: e512dd0 Author: Claus Ibsen <davscl...@apache.org> Authored: Sat May 7 10:49:21 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat May 7 11:32:39 2016 +0200 ---------------------------------------------------------------------- .../camel/builder/ErrorHandlerBuilderSupport.java | 8 ++++++++ .../java/org/apache/camel/impl/DefaultCamelContext.java | 12 +++++------- .../java/org/apache/camel/impl/DefaultRouteContext.java | 4 +++- .../java/org/apache/camel/impl/DefaultUnitOfWork.java | 8 +++----- .../org/apache/camel/model/OnCompletionDefinition.java | 4 ++++ 5 files changed, 23 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/e58ffc51/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java b/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java index 365ebc0..8bc55cb 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java +++ b/camel-core/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderSupport.java @@ -25,6 +25,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.model.OnExceptionDefinition; import org.apache.camel.processor.ErrorHandler; import org.apache.camel.processor.ErrorHandlerSupport; +import org.apache.camel.processor.RedeliveryErrorHandler; import org.apache.camel.processor.exceptionpolicy.ExceptionPolicyStrategy; import org.apache.camel.spi.RouteContext; import org.apache.camel.util.ObjectHelper; @@ -69,6 +70,13 @@ public abstract class ErrorHandlerBuilderSupport implements ErrorHandlerBuilder } } } + if (handler instanceof RedeliveryErrorHandler) { + boolean original = ((RedeliveryErrorHandler) handler).isUseOriginalMessagePolicy(); + if (original) { + // ensure allow original is turned on + routeContext.setAllowUseOriginalMessage(true); + } + } } public List<OnExceptionDefinition> getErrorHandlers(RouteContext routeContext) { http://git-wip-us.apache.org/repos/asf/camel/blob/e58ffc51/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java index d5c6d3f..9fbb622 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java @@ -42,7 +42,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; - import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.naming.Context; @@ -227,7 +226,7 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon private Boolean typeConverterStatisticsEnabled = Boolean.FALSE; private Boolean useMDCLogging = Boolean.FALSE; private Boolean useBreadcrumb = Boolean.TRUE; - private Boolean allowUseOriginalMessage = Boolean.TRUE; + private Boolean allowUseOriginalMessage = Boolean.FALSE; private Long delay; private ErrorHandlerFactory errorHandlerBuilder; private final Object errorHandlerExecutorServiceLock = new Object(); @@ -3073,11 +3072,6 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon } } - if (isAllowUseOriginalMessage()) { - log.info("AllowUseOriginalMessage is enabled. If access to the original message is not needed," - + " then its recommended to turn this option off as it may improve performance."); - } - if (streamCachingInUse) { // stream caching is in use so enable the strategy getStreamCachingStrategy().setEnabled(true); @@ -3088,6 +3082,10 @@ public class DefaultCamelContext extends ServiceSupport implements ModelCamelCon + " See more details at http://camel.apache.org/stream-caching.html"); } + if (isAllowUseOriginalMessage()) { + log.info("AllowUseOriginalMessage enabled because UseOriginalMessage is in use"); + } + // start routes if (doNotStartRoutesOnFirstStart) { log.debug("Skip starting of routes as CamelContext has been configured with autoStartup=false"); http://git-wip-us.apache.org/repos/asf/camel/blob/e58ffc51/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java index 1e6da51..d18ccb7 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultRouteContext.java @@ -353,10 +353,12 @@ public class DefaultRouteContext implements RouteContext { } public void setAllowUseOriginalMessage(Boolean allowUseOriginalMessage) { - throw new IllegalArgumentException("This option can only be configured on CamelContext"); + // can only be configured on CamelContext + getCamelContext().setAllowUseOriginalMessage(allowUseOriginalMessage); } public Boolean isAllowUseOriginalMessage() { + // can only be configured on CamelContext return getCamelContext().isAllowUseOriginalMessage(); } http://git-wip-us.apache.org/repos/asf/camel/blob/e58ffc51/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java index 246100b..3416146 100644 --- a/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java +++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultUnitOfWork.java @@ -81,10 +81,7 @@ public class DefaultUnitOfWork implements UnitOfWork, Service { context = exchange.getContext(); if (context.isAllowUseOriginalMessage()) { - // TODO: Camel 3.0: the copy on facade strategy will help us here in the future - // TODO: optimize to only copy original message if enabled to do so in the route // special for JmsMessage as it can cause it to loose headers later. - // This will be resolved when we get the message facade with copy on write implemented if (exchange.getIn().getClass().getName().equals("org.apache.camel.component.jms.JmsMessage")) { this.originalInMessage = new DefaultMessage(); this.originalInMessage.setBody(exchange.getIn().getBody()); @@ -94,8 +91,6 @@ public class DefaultUnitOfWork implements UnitOfWork, Service { } } - // TODO: Optimize to only copy if useOriginalMessage has been enabled - // mark the creation time when this Exchange was created if (exchange.getProperty(Exchange.CREATED_TIMESTAMP) == null) { exchange.setProperty(Exchange.CREATED_TIMESTAMP, new Date()); @@ -281,6 +276,9 @@ public class DefaultUnitOfWork implements UnitOfWork, Service { } public Message getOriginalInMessage() { + if (originalInMessage == null && !context.isAllowUseOriginalMessage()) { + throw new IllegalStateException("AllowUseOriginalMessage is disabled. Cannot access the original message."); + } return originalInMessage; } http://git-wip-us.apache.org/repos/asf/camel/blob/e58ffc51/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java b/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java index e9d4ab6..a37e912 100644 --- a/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/OnCompletionDefinition.java @@ -126,6 +126,10 @@ public class OnCompletionDefinition extends ProcessorDefinition<OnCompletionDefi if (isOnCompleteOnly && isOnFailureOnly) { throw new IllegalArgumentException("Both onCompleteOnly and onFailureOnly cannot be true. Only one of them can be true. On node: " + this); } + if (original) { + // ensure allow original is turned on + routeContext.setAllowUseOriginalMessage(true); + } String routeId = routeContext.getRoute().idOrCreate(routeContext.getCamelContext().getNodeIdFactory());