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 2b49570 CAMEL-13759: camel3 - Debugger should not use intercept strategy but use internal processor advice as other similar features does. 2b49570 is described below commit 2b495707f6126fc62e7a77cd37a9680ff2658ee1 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Jul 18 10:48:41 2019 +0200 CAMEL-13759: camel3 - Debugger should not use intercept strategy but use internal processor advice as other similar features does. --- .../camel/impl/engine/AbstractCamelContext.java | 7 -- .../camel/processor/CamelInternalProcessor.java | 35 ++++++++++ .../camel/processor/channel/DefaultChannel.java | 18 ++++-- .../processor/interceptor/BacklogDebugger.java | 4 -- .../apache/camel/processor/interceptor/Debug.java | 74 ---------------------- .../processor/interceptor/DefaultDebugger.java | 4 +- 6 files changed, 48 insertions(+), 94 deletions(-) diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java index dc4f22e..89f3e6a 100644 --- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java +++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java @@ -78,7 +78,6 @@ import org.apache.camel.TypeConverter; import org.apache.camel.VetoCamelContextStartException; import org.apache.camel.impl.transformer.TransformerKey; import org.apache.camel.impl.validator.ValidatorKey; -import org.apache.camel.processor.interceptor.Debug; import org.apache.camel.processor.interceptor.HandleFault; import org.apache.camel.spi.AnnotationBasedProcessorFactory; import org.apache.camel.spi.AsyncProcessorAwaitManager; @@ -2459,12 +2458,6 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Ext log.info("Delayer is enabled with: {} ms. on CamelContext: {}", getDelayer(), getName()); } - // register debugger - if (getDebugger() != null) { - log.info("Debugger: {} is enabled on CamelContext: {}", getDebugger(), getName()); - addInterceptStrategy(new Debug(getDebugger())); - } - // start management strategy before lifecycles are started ManagementStrategy managementStrategy = getManagementStrategy(); startService(managementStrategy); diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java b/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java index 3651856..9f48f00 100644 --- a/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java +++ b/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java @@ -37,6 +37,7 @@ import org.apache.camel.processor.interceptor.BacklogDebugger; import org.apache.camel.processor.interceptor.BacklogTracer; import org.apache.camel.processor.interceptor.DefaultBacklogTracerEventMessage; import org.apache.camel.spi.CamelInternalProcessorAdvice; +import org.apache.camel.spi.Debugger; import org.apache.camel.spi.InflightRepository; import org.apache.camel.spi.ManagementInterceptStrategy.InstrumentationProcessor; import org.apache.camel.spi.MessageHistoryFactory; @@ -499,6 +500,40 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor { } /** + * Advice to execute when using custom debugger. + */ + public static final class DebuggerAdvice implements CamelInternalProcessorAdvice<StopWatch>, Ordered { + + private final Debugger debugger; + private final Processor target; + private final NamedNode definition; + + public DebuggerAdvice(Debugger debugger, Processor target, NamedNode definition) { + this.debugger = debugger; + this.target = target; + this.definition = definition; + } + + @Override + public StopWatch before(Exchange exchange) throws Exception { + StopWatch watch = new StopWatch(); + debugger.beforeProcess(exchange, target, definition); + return watch; + } + + @Override + public void after(Exchange exchange, StopWatch stopWatch) throws Exception { + debugger.afterProcess(exchange, target, definition, stopWatch.taken()); + } + + @Override + public int getOrder() { + // we want debugger just before calling the processor + return Ordered.LOWEST; + } + } + + /** * Advice to inject new {@link UnitOfWork} to the {@link Exchange} if needed, and as well to ensure * the {@link UnitOfWork} is done and stopped. */ diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java b/core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java index 9d7090b..2a31635 100644 --- a/core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java +++ b/core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java @@ -25,8 +25,6 @@ import org.apache.camel.AsyncProcessor; import org.apache.camel.CamelContext; import org.apache.camel.CamelContextAware; import org.apache.camel.Channel; -import org.apache.camel.Endpoint; -import org.apache.camel.EndpointAware; import org.apache.camel.Exchange; import org.apache.camel.NamedNode; import org.apache.camel.Processor; @@ -35,12 +33,11 @@ import org.apache.camel.processor.WrapProcessor; import org.apache.camel.processor.errorhandler.RedeliveryErrorHandler; import org.apache.camel.processor.interceptor.BacklogDebugger; import org.apache.camel.processor.interceptor.BacklogTracer; -import org.apache.camel.spi.CamelInternalProcessorAdvice; +import org.apache.camel.spi.Debugger; import org.apache.camel.spi.InterceptStrategy; import org.apache.camel.spi.ManagementInterceptStrategy; import org.apache.camel.spi.MessageHistoryFactory; import org.apache.camel.spi.RouteContext; -import org.apache.camel.support.DefaultEndpoint; import org.apache.camel.support.OrderedComparator; import org.apache.camel.support.service.ServiceHelper; @@ -199,9 +196,16 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel { // add debugger as well so we have both tracing and debugging out of the box if (routeContext.isDebugging()) { - BacklogDebugger debugger = getOrCreateBacklogDebugger(); - camelContext.addService(debugger); - addAdvice(new BacklogDebuggerAdvice(debugger, nextProcessor, targetOutputDef)); + if (camelContext.getDebugger() != null) { + // use custom debugger + Debugger debugger = camelContext.getDebugger(); + addAdvice(new DebuggerAdvice(debugger, nextProcessor, targetOutputDef)); + } else { + // use backlog debugger + BacklogDebugger debugger = getOrCreateBacklogDebugger(); + camelContext.addService(debugger); + addAdvice(new BacklogDebuggerAdvice(debugger, nextProcessor, targetOutputDef)); + } } if (routeContext.isMessageHistory()) { diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java b/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java index 401af7d..d9a49a0 100644 --- a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java +++ b/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java @@ -124,10 +124,6 @@ public final class BacklogDebugger extends ServiceSupport { return context.hasService(BacklogDebugger.class); } - public Debugger getDebugger() { - return debugger; - } - public String getLoggingLevel() { return loggingLevel.name(); } diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/Debug.java b/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/Debug.java deleted file mode 100644 index 3f5a94a..0000000 --- a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/Debug.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.processor.interceptor; - -import org.apache.camel.AsyncCallback; -import org.apache.camel.CamelContext; -import org.apache.camel.Exchange; -import org.apache.camel.NamedNode; -import org.apache.camel.Processor; -import org.apache.camel.spi.Debugger; -import org.apache.camel.spi.InterceptStrategy; -import org.apache.camel.support.processor.DelegateAsyncProcessor; -import org.apache.camel.util.StopWatch; - -/** - * A debug interceptor to notify {@link Debugger} with {@link Exchange}s being processed. - */ -public class Debug implements InterceptStrategy { - - private final Debugger debugger; - - public Debug(Debugger debugger) { - this.debugger = debugger; - } - - public Processor wrapProcessorInInterceptors(final CamelContext context, final NamedNode definition, - final Processor target, final Processor nextTarget) throws Exception { - return new DelegateAsyncProcessor(target) { - @Override - public boolean process(final Exchange exchange, final AsyncCallback callback) { - try { - debugger.beforeProcess(exchange, target, definition); - } catch (Throwable e) { - exchange.setException(e); - callback.done(true); - return true; - } - - final StopWatch watch = new StopWatch(); - - return processor.process(exchange, new AsyncCallback() { - public void done(boolean doneSync) { - long diff = watch.taken(); - try { - debugger.afterProcess(exchange, processor, definition, diff); - } finally { - // must notify original callback - callback.done(doneSync); - } - } - }); - } - - @Override - public String toString() { - return "Debug[" + target + "]"; - } - }; - } -} diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java b/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java index 538ebbf..49ae28e 100644 --- a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java +++ b/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java @@ -143,9 +143,9 @@ public class DefaultDebugger extends ServiceSupport implements Debugger, CamelCo @Override public void onEvent(Exchange exchange, ExchangeEvent event, NamedNode definition) { if (event instanceof ExchangeCreatedEvent) { - exchange.getContext().getDebugger().startSingleStepExchange(exchange.getExchangeId(), this); + startSingleStepExchange(exchange.getExchangeId(), this); } else if (event instanceof ExchangeCompletedEvent) { - exchange.getContext().getDebugger().stopSingleStepExchange(exchange.getExchangeId()); + stopSingleStepExchange(exchange.getExchangeId()); } breakpoint.onEvent(exchange, event, definition); }