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 9b4a553 CAMEL-17359: camel-debug - JAR to make camel debugging easier from tooling 9b4a553 is described below commit 9b4a5531b2d5577f03d4c440ee57377e9e6aebf2 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Dec 20 19:55:03 2021 +0100 CAMEL-17359: camel-debug - JAR to make camel debugging easier from tooling --- bom/camel-bom/pom.xml | 5 ++ .../org/apache/camel/catalog/components/log.json | 1 + .../org/apache/camel/catalog/others.properties | 1 + .../org/apache/camel/catalog/others/debug.json | 15 ++++++ components/camel-debug/pom.xml | 53 ++++++++++++++++++++++ .../services/org/apache/camel/debugger-factory | 2 + .../services/org/apache/camel/other.properties | 7 +++ .../camel-debug/src/generated/resources/debug.json | 15 ++++++ components/camel-debug/src/main/docs/debug.adoc | 22 +++++++++ .../camel/impl/debugger/CamelDebuggerFactory.java | 31 +++++++++++++ components/pom.xml | 1 + core/camel-allcomponents/pom.xml | 4 ++ .../main/java/org/apache/camel/spi/Debugger.java | 2 + .../camel/impl/engine/AbstractCamelContext.java | 5 ++ .../camel/main/DefaultConfigurationConfigurer.java | 6 ++- .../modules/others/examples/json/debug.json | 1 + docs/components/modules/others/nav.adoc | 1 + docs/components/modules/others/pages/debug.adoc | 1 + parent/pom.xml | 5 ++ 19 files changed, 177 insertions(+), 1 deletion(-) diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml index 3e3c244..e1ed075 100644 --- a/bom/camel-bom/pom.xml +++ b/bom/camel-bom/pom.xml @@ -619,6 +619,11 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-debug</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-digitalocean</artifactId> <version>${project.version}</version> </dependency> diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/log.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/log.json index 369a970..5e40356 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/log.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/log.json @@ -36,6 +36,7 @@ "level": { "kind": "parameter", "displayName": "Level", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "INFO", "description": "Logging level to use. The default value is INFO." }, "logMask": { "kind": "parameter", "displayName": "Log Mask", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "description": "If true, mask sensitive information like password or passphrase in the log." }, "marker": { "kind": "parameter", "displayName": "Marker", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "An optional Marker name to use." }, + "plain": { "kind": "parameter", "displayName": "Plain", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled only the body will be printed out" }, "exchangeFormatter": { "kind": "parameter", "displayName": "Exchange Formatter", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.spi.ExchangeFormatter", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom exchange formatter" }, "maxChars": { "kind": "parameter", "displayName": "Max Chars", "group": "formatting", "label": "formatting", "required": false, "type": "integer", "javaType": "int", "deprecated": false, "autowired": false, "secret": false, "defaultValue": 10000, "description": "Limits the number of characters logged per line." }, "multiline": { "kind": "parameter", "displayName": "Multiline", "group": "formatting", "label": "formatting", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "If enabled then each information is outputted on a newline." }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties index 128d3a1..c2aa9fd 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others.properties @@ -4,6 +4,7 @@ caffeine-lrucache cdi csimple-joor cxf-transport +debug elytron etcd3 headersmap diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/debug.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/debug.json new file mode 100644 index 0000000..3556651 --- /dev/null +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/debug.json @@ -0,0 +1,15 @@ +{ + "other": { + "kind": "other", + "name": "debug", + "title": "Debug", + "description": "Enables Camel Route Debugging", + "deprecated": false, + "firstVersion": "3.15.0", + "label": "core", + "supportLevel": "Preview", + "groupId": "org.apache.camel", + "artifactId": "camel-debug", + "version": "3.15.0-SNAPSHOT" + } +} diff --git a/components/camel-debug/pom.xml b/components/camel-debug/pom.xml new file mode 100644 index 0000000..53f2166 --- /dev/null +++ b/components/camel-debug/pom.xml @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + + 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. + +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + + <parent> + <groupId>org.apache.camel</groupId> + <artifactId>components</artifactId> + <version>3.15.0-SNAPSHOT</version> + </parent> + + <artifactId>camel-debug</artifactId> + <packaging>jar</packaging> + <name>Camel :: Debugging</name> + <description>Enables Camel Route Debugging</description> + + <properties> + <firstVersion>3.15.0</firstVersion> + <label>core</label> + </properties> + + <dependencies> + + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-support</artifactId> + </dependency> + <!-- JMX is needed for Camel Debugger --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-management</artifactId> + </dependency> + + </dependencies> + +</project> diff --git a/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/debugger-factory b/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/debugger-factory new file mode 100644 index 0000000..ef4911a --- /dev/null +++ b/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/debugger-factory @@ -0,0 +1,2 @@ +# Generated by camel build tools - do NOT edit this file! +class=org.apache.camel.impl.debugger.CamelDebuggerFactory diff --git a/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/other.properties b/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/other.properties new file mode 100644 index 0000000..a006824 --- /dev/null +++ b/components/camel-debug/src/generated/resources/META-INF/services/org/apache/camel/other.properties @@ -0,0 +1,7 @@ +# Generated by camel build tools - do NOT edit this file! +name=debug +groupId=org.apache.camel +artifactId=camel-debug +version=3.15.0-SNAPSHOT +projectName=Camel :: Debugging +projectDescription=Enables Camel Route Debugging diff --git a/components/camel-debug/src/generated/resources/debug.json b/components/camel-debug/src/generated/resources/debug.json new file mode 100644 index 0000000..3556651 --- /dev/null +++ b/components/camel-debug/src/generated/resources/debug.json @@ -0,0 +1,15 @@ +{ + "other": { + "kind": "other", + "name": "debug", + "title": "Debug", + "description": "Enables Camel Route Debugging", + "deprecated": false, + "firstVersion": "3.15.0", + "label": "core", + "supportLevel": "Preview", + "groupId": "org.apache.camel", + "artifactId": "camel-debug", + "version": "3.15.0-SNAPSHOT" + } +} diff --git a/components/camel-debug/src/main/docs/debug.adoc b/components/camel-debug/src/main/docs/debug.adoc new file mode 100644 index 0000000..1bc140e --- /dev/null +++ b/components/camel-debug/src/main/docs/debug.adoc @@ -0,0 +1,22 @@ += Debug Component +:doctitle: Debug +:shortname: debug +:artifactid: camel-debug +:description: Enables Camel Route Debugging +:since: 3.15 +:supportlevel: Preview + +*Since Camel {since}* + +The camel-debug enables Camel debugger for 3rd party tooling. +This makes it easier to perform debugging in IDEs such as IDEA, Eclipse, VSCode + +== Auto-detection from classpath + +To use this implementation all you need to do is to add the `camel-debug` dependency to the classpath, +and Camel should auto-detect this on startup and log as follows: + +[source,text] +---- +Detected and enabling Camel Debugging +---- 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 new file mode 100644 index 0000000..b2842b8 --- /dev/null +++ b/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java @@ -0,0 +1,31 @@ +/* + * 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.impl.debugger; + +import org.apache.camel.spi.Debugger; +import org.apache.camel.spi.annotations.JdkService; + +@JdkService(Debugger.FACTORY) +public class CamelDebuggerFactory { + + // noop - just detect on classpath and automatic enable debugger + + @Override + public String toString() { + return "camel-debug"; + } +} diff --git a/components/pom.xml b/components/pom.xml index 5d784cb..152d944 100644 --- a/components/pom.xml +++ b/components/pom.xml @@ -128,6 +128,7 @@ <module>camel-csimple-joor</module> <module>camel-csv</module> <module>camel-datasonnet</module> + <module>camel-debug</module> <module>camel-debezium</module> <module>camel-digitalocean</module> <module>camel-disruptor</module> diff --git a/core/camel-allcomponents/pom.xml b/core/camel-allcomponents/pom.xml index 2c2054f..35136bb 100644 --- a/core/camel-allcomponents/pom.xml +++ b/core/camel-allcomponents/pom.xml @@ -391,6 +391,10 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-debug</artifactId> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-digitalocean</artifactId> </dependency> <dependency> diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/Debugger.java b/core/camel-api/src/main/java/org/apache/camel/spi/Debugger.java index c37f4ea..a365835 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/Debugger.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/Debugger.java @@ -30,6 +30,8 @@ import org.apache.camel.spi.CamelEvent.ExchangeEvent; */ public interface Debugger extends Service, CamelContextAware { + String FACTORY = "debugger-factory"; + /** * Add the given breakpoint * 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 3ebc21f..c114393 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 @@ -4117,6 +4117,11 @@ 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"); + setDebugging(true); + } } catch (Exception e) { LOG.warn("Cannot create JmxManagementStrategyFactory. Will fallback and disable JMX.", e); } diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java index 88645af..43b7952 100644 --- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java +++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java @@ -259,7 +259,11 @@ public final class DefaultConfigurationConfigurer { camelContext.getGlobalEndpointConfiguration().setBridgeErrorHandler(config.isEndpointBridgeErrorHandler()); camelContext.getGlobalEndpointConfiguration().setLazyStartProducer(config.isEndpointLazyStartProducer()); - camelContext.setDebugging(config.isDebugging()); + if (config.isDebugging()) { + // debug may be enabled via camel-debug JAR on classpath so if config is false (default) + // then do not change setting on camel-context + camelContext.setDebugging(true); + } camelContext.setBacklogTracing(config.isBacklogTracing()); camelContext.setTracing(config.isTracing()); camelContext.setTracingStandby(config.isTracingStandby()); diff --git a/docs/components/modules/others/examples/json/debug.json b/docs/components/modules/others/examples/json/debug.json new file mode 120000 index 0000000..08b3453 --- /dev/null +++ b/docs/components/modules/others/examples/json/debug.json @@ -0,0 +1 @@ +../../../../../../components/camel-debug/src/generated/resources/debug.json \ No newline at end of file diff --git a/docs/components/modules/others/nav.adoc b/docs/components/modules/others/nav.adoc index 9a2a00d..d4c3848 100644 --- a/docs/components/modules/others/nav.adoc +++ b/docs/components/modules/others/nav.adoc @@ -8,6 +8,7 @@ ** xref:cdi.adoc[CDI] ** xref:csimple-joor.adoc[CSimple jOOR] ** xref:cxf-transport.adoc[CXF Transport] +** xref:debug.adoc[Debug] ** xref:dsl.adoc[DSL] *** xref:groovy-dsl.adoc[Groovy Dsl] *** xref:java-joor-dsl.adoc[Java Joor Dsl] diff --git a/docs/components/modules/others/pages/debug.adoc b/docs/components/modules/others/pages/debug.adoc new file mode 120000 index 0000000..7643d6b --- /dev/null +++ b/docs/components/modules/others/pages/debug.adoc @@ -0,0 +1 @@ +../../../../../components/camel-debug/src/main/docs/debug.adoc \ No newline at end of file diff --git a/parent/pom.xml b/parent/pom.xml index 30e78a4..69238a4 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -1259,6 +1259,11 @@ </dependency> <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-debug</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-digitalocean</artifactId> <version>${project.version}</version> </dependency>