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>

Reply via email to