This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new cc0b434 CAMEL-17359: camel-debug - JAR to make camel debugging easier from tooling cc0b434 is described below commit cc0b43475666b8e54cf25880b75d8f02905d42ad Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Dec 20 20:28:11 2021 +0100 CAMEL-17359: camel-debug - JAR to make camel debugging easier from tooling --- .../camel/impl/debugger/CamelDebuggerFactory.java | 26 ++++++++++++++++++++-- .../java/org/apache/camel/spi/DebuggerFactory.java | 23 ++++++++++--------- .../camel/impl/engine/AbstractCamelContext.java | 13 ++++++++--- 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java b/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java index b2842b8..a1f4fd9 100644 --- a/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java +++ b/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java @@ -16,13 +16,35 @@ */ package org.apache.camel.impl.debugger; +import org.apache.camel.CamelContext; +import org.apache.camel.ExtendedCamelContext; import org.apache.camel.spi.Debugger; +import org.apache.camel.spi.DebuggerFactory; import org.apache.camel.spi.annotations.JdkService; +import org.apache.camel.support.LifecycleStrategySupport; @JdkService(Debugger.FACTORY) -public class CamelDebuggerFactory { +public class CamelDebuggerFactory implements DebuggerFactory { - // noop - just detect on classpath and automatic enable debugger + @Override + public Debugger createDebugger(CamelContext camelContext) throws Exception { + // must enable message history for debugger to capture more details + camelContext.setMessageHistory(true); + + BacklogDebugger backlog = BacklogDebugger.createDebugger(camelContext); + // we need to enable debugger after context is started + camelContext.adapt(ExtendedCamelContext.class).addLifecycleStrategy(new LifecycleStrategySupport() { + + @Override + public void onContextStarted(CamelContext context) { + backlog.enableDebugger(); + } + }); + camelContext.addService(backlog); + + // return null as we fool camel-core into using this backlog debugger as we added it as a service + return null; + } @Override public String toString() { diff --git a/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/DebuggerFactory.java similarity index 68% copy from components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java copy to core/camel-api/src/main/java/org/apache/camel/spi/DebuggerFactory.java index b2842b8..a7515be 100644 --- a/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/DebuggerFactory.java @@ -14,18 +14,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.impl.debugger; +package org.apache.camel.spi; -import org.apache.camel.spi.Debugger; -import org.apache.camel.spi.annotations.JdkService; +import org.apache.camel.CamelContext; -@JdkService(Debugger.FACTORY) -public class CamelDebuggerFactory { +/** + * Factory for creating {@link Debugger}. + */ +public interface DebuggerFactory { - // noop - just detect on classpath and automatic enable debugger + /** + * Creates the debugger. + * + * @param camelContext the camel context + * @return the created debugger + */ + Debugger createDebugger(CamelContext camelContext) throws Exception; - @Override - public String toString() { - return "camel-debug"; - } } diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java index c114393..8143171 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java @@ -101,6 +101,7 @@ import org.apache.camel.spi.DataFormat; import org.apache.camel.spi.DataFormatResolver; import org.apache.camel.spi.DataType; import org.apache.camel.spi.Debugger; +import org.apache.camel.spi.DebuggerFactory; import org.apache.camel.spi.DeferServiceFactory; import org.apache.camel.spi.EndpointRegistry; import org.apache.camel.spi.EndpointStrategy; @@ -4117,10 +4118,16 @@ public abstract class AbstractCamelContext extends BaseService factory = (ManagementStrategyFactory) object; } } - // detect if camel debugger should be enabled if on classpath - if (getBootstrapFactoryFinder().findClass(Debugger.FACTORY).isPresent()) { - LOG.info("Detected and enabling Camel Debugging"); + // detect if camel-debug is on classpath that enables debugging + DebuggerFactory df + = getBootstrapFactoryFinder().newInstance(Debugger.FACTORY, DebuggerFactory.class).orElse(null); + if (df != null) { + LOG.info("Detected: {} enabling Camel Debugging", df); setDebugging(true); + Debugger debugger = df.createDebugger(this); + if (debugger != null) { + setDebugger(debugger); + } } } catch (Exception e) { LOG.warn("Cannot create JmxManagementStrategyFactory. Will fallback and disable JMX.", e);