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

Reply via email to