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 <[email protected]>
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);
}