You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2023/07/05 13:12:41 UTC

[camel-quarkus] branch improve-native-support-of-camel-quarkus-debug updated (0eecb892e0 -> 60dd3286aa)

This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a change to branch improve-native-support-of-camel-quarkus-debug
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


    omit 0eecb892e0 Improve native support of camel-quarkus-debug
     new 60dd3286aa Improve native support of camel-quarkus-debug

This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version.  This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:

 * -- * -- B -- O -- O -- O   (0eecb892e0)
            \
             N -- N -- N   refs/heads/improve-native-support-of-camel-quarkus-debug (60dd3286aa)

You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.

Any revisions marked "omit" are not gone; other references still
refer to them.  Any revisions marked "discard" are gone forever.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../core/deployment/CamelSerializationProcessor.java        |  4 ++++
 .../quarkus/component/debug/deployment/DebugProcessor.java  | 13 -------------
 2 files changed, 4 insertions(+), 13 deletions(-)


[camel-quarkus] 01/01: Improve native support of camel-quarkus-debug

Posted by nf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a commit to branch improve-native-support-of-camel-quarkus-debug
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit 60dd3286aa881fb0b51ebede2467be381e0e8066
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Wed Jul 5 14:46:19 2023 +0200

    Improve native support of camel-quarkus-debug
---
 .../ROOT/pages/reference/extensions/debug.adoc     |  6 +++++
 .../deployment/CamelSerializationProcessor.java    |  4 +++
 .../component/debug/deployment/DebugProcessor.java |  9 +++++++
 .../camel/quarkus/component/debug/DebugConfig.java |  6 +++++
 integration-tests/debug/pom.xml                    | 17 ++++++++++++
 .../quarkus/component/debug/it/DebugRoutes.java    | 21 ++++++++-------
 .../quarkus/component/debug/it/DebugTest.java      | 31 ++++++++++++++++++++++
 7 files changed, 85 insertions(+), 9 deletions(-)

diff --git a/docs/modules/ROOT/pages/reference/extensions/debug.adoc b/docs/modules/ROOT/pages/reference/extensions/debug.adoc
index a04a415908..ed615bd06a 100644
--- a/docs/modules/ROOT/pages/reference/extensions/debug.adoc
+++ b/docs/modules/ROOT/pages/reference/extensions/debug.adoc
@@ -80,6 +80,12 @@ quarkus.camel.debug.enabled=true
 |icon:lock[title=Fixed at build time] [[quarkus.camel.debug.enabled]]`link:#quarkus.camel.debug.enabled[quarkus.camel.debug.enabled]`
 
 
+| `boolean`
+| `false`
+
+|icon:lock[title=Fixed at build time] [[quarkus.camel.debug.suspend]]`link:#quarkus.camel.debug.suspend[quarkus.camel.debug.suspend]`
+
+
 | `boolean`
 | `false`
 |===
diff --git a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSerializationProcessor.java b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSerializationProcessor.java
index d16f6d8574..117d116046 100644
--- a/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSerializationProcessor.java
+++ b/extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/CamelSerializationProcessor.java
@@ -21,7 +21,9 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 
 import io.quarkus.deployment.annotations.BuildProducer;
@@ -59,6 +61,8 @@ public class CamelSerializationProcessor {
             StackTraceElement[].class.getName(),
             String.class.getName(),
             Throwable.class.getName(),
+            HashSet.class.getName(),
+            LinkedHashSet.class.getName(),
 
             // Camel classes
             CamelExecutionException.class.getName(),
diff --git a/extensions/debug/deployment/src/main/java/org/apache/camel/quarkus/component/debug/deployment/DebugProcessor.java b/extensions/debug/deployment/src/main/java/org/apache/camel/quarkus/component/debug/deployment/DebugProcessor.java
index 24c84cd13e..fc06c5ec28 100644
--- a/extensions/debug/deployment/src/main/java/org/apache/camel/quarkus/component/debug/deployment/DebugProcessor.java
+++ b/extensions/debug/deployment/src/main/java/org/apache/camel/quarkus/component/debug/deployment/DebugProcessor.java
@@ -18,9 +18,11 @@ package org.apache.camel.quarkus.component.debug.deployment;
 
 import java.util.function.BooleanSupplier;
 
+import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.AllowJNDIBuildItem;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.deployment.builditem.SystemPropertyBuildItem;
 import io.quarkus.runtime.LaunchMode;
 import org.apache.camel.quarkus.component.debug.DebugConfig;
 import org.apache.camel.quarkus.core.deployment.spi.CamelServiceDestination;
@@ -28,6 +30,7 @@ import org.apache.camel.quarkus.core.deployment.spi.CamelServicePatternBuildItem
 import org.eclipse.microprofile.config.ConfigProvider;
 
 class DebugProcessor {
+
     private static final String FEATURE = "camel-debug";
 
     @BuildStep(onlyIf = DebugEnabled.class)
@@ -48,6 +51,12 @@ class DebugProcessor {
                 "META-INF/services/org/apache/camel/debugger-factory");
     }
 
+    @BuildStep(onlyIf = DebugEnabled.class)
+    void configureSystemProperties(BuildProducer<SystemPropertyBuildItem> producer, DebugConfig config) {
+        producer.produce(new SystemPropertyBuildItem("org.apache.camel.debugger.suspend", Boolean.toString(config.suspend)));
+        producer.produce(new SystemPropertyBuildItem("org.apache.camel.jmx.disabled", "false"));
+    }
+
     static class DebugEnabled implements BooleanSupplier {
         DebugConfig config;
         LaunchMode launchMode;
diff --git a/extensions/debug/runtime/src/main/java/org/apache/camel/quarkus/component/debug/DebugConfig.java b/extensions/debug/runtime/src/main/java/org/apache/camel/quarkus/component/debug/DebugConfig.java
index f8b1d2716f..3bbcb581a8 100644
--- a/extensions/debug/runtime/src/main/java/org/apache/camel/quarkus/component/debug/DebugConfig.java
+++ b/extensions/debug/runtime/src/main/java/org/apache/camel/quarkus/component/debug/DebugConfig.java
@@ -25,4 +25,10 @@ public class DebugConfig {
      * Set whether to enable Camel debugging support.
      */
     public boolean enabled;
+
+    /**
+     * Indicates whether the <i>suspend mode</i> is enabled or not. If {@code true} the message processing is
+     * immediately suspended until the method {@code attach()} is called.
+     */
+    public boolean suspend;
 }
diff --git a/integration-tests/debug/pom.xml b/integration-tests/debug/pom.xml
index 4dbdfce0e3..4c0a501a4f 100644
--- a/integration-tests/debug/pom.xml
+++ b/integration-tests/debug/pom.xml
@@ -35,6 +35,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-debug</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-direct</artifactId>
+        </dependency>
         <dependency>
             <groupId>io.quarkus</groupId>
             <artifactId>quarkus-resteasy</artifactId>
@@ -76,6 +80,19 @@
                         </exclusion>
                     </exclusions>
                 </dependency>
+                <dependency>
+                    <groupId>org.apache.camel.quarkus</groupId>
+                    <artifactId>camel-quarkus-direct-deployment</artifactId>
+                    <version>${project.version}</version>
+                    <type>pom</type>
+                    <scope>test</scope>
+                    <exclusions>
+                        <exclusion>
+                            <groupId>*</groupId>
+                            <artifactId>*</artifactId>
+                        </exclusion>
+                    </exclusions>
+                </dependency>
             </dependencies>
         </profile>
         <profile>
diff --git a/extensions/debug/runtime/src/main/java/org/apache/camel/quarkus/component/debug/DebugConfig.java b/integration-tests/debug/src/main/java/org/apache/camel/quarkus/component/debug/it/DebugRoutes.java
similarity index 67%
copy from extensions/debug/runtime/src/main/java/org/apache/camel/quarkus/component/debug/DebugConfig.java
copy to integration-tests/debug/src/main/java/org/apache/camel/quarkus/component/debug/it/DebugRoutes.java
index f8b1d2716f..b92b177c53 100644
--- a/extensions/debug/runtime/src/main/java/org/apache/camel/quarkus/component/debug/DebugConfig.java
+++ b/integration-tests/debug/src/main/java/org/apache/camel/quarkus/component/debug/it/DebugRoutes.java
@@ -14,15 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.quarkus.component.debug;
+package org.apache.camel.quarkus.component.debug.it;
 
-import io.quarkus.runtime.annotations.ConfigPhase;
-import io.quarkus.runtime.annotations.ConfigRoot;
+import org.apache.camel.builder.RouteBuilder;
 
-@ConfigRoot(name = "camel.debug", phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED)
-public class DebugConfig {
-    /**
-     * Set whether to enable Camel debugging support.
-     */
-    public boolean enabled;
+public class DebugRoutes extends RouteBuilder {
+
+    @Override
+    public void configure() {
+        getContext().setUseBreadcrumb(false);
+        getContext().setDebugging(true);
+        getContext().setMessageHistory(true);
+        from("direct:start")
+                .log("Processing");
+    }
 }
diff --git a/integration-tests/debug/src/test/java/org/apache/camel/quarkus/component/debug/it/DebugTest.java b/integration-tests/debug/src/test/java/org/apache/camel/quarkus/component/debug/it/DebugTest.java
index f613f742b3..e3edfd9d78 100644
--- a/integration-tests/debug/src/test/java/org/apache/camel/quarkus/component/debug/it/DebugTest.java
+++ b/integration-tests/debug/src/test/java/org/apache/camel/quarkus/component/debug/it/DebugTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.quarkus.component.debug.it;
 import java.util.Iterator;
 import java.util.Set;
 
+import javax.management.JMX;
 import javax.management.MBeanServerConnection;
 import javax.management.ObjectInstance;
 import javax.management.ObjectName;
@@ -29,6 +30,7 @@ import javax.management.remote.JMXServiceURL;
 import io.quarkus.test.junit.QuarkusTest;
 import io.restassured.RestAssured;
 import org.apache.camel.ServiceStatus;
+import org.apache.camel.api.management.mbean.ManagedBacklogDebuggerMBean;
 import org.junit.jupiter.api.Test;
 
 import static org.apache.camel.component.debug.JmxConnectorService.DEFAULT_HOST;
@@ -76,4 +78,33 @@ public class DebugTest {
             }
         }
     }
+
+    @Test
+    void accessToBacklogDebugger() throws Exception {
+        String url = String.format("service:jmx:rmi:///jndi/rmi://%s:%d%s", DEFAULT_HOST, DEFAULT_REGISTRY_PORT,
+                DEFAULT_SERVICE_URL_PATH);
+        JMXServiceURL jmxUrl = new JMXServiceURL(url);
+
+        try (JMXConnector connector = JMXConnectorFactory.connect(jmxUrl)) {
+            MBeanServerConnection mbeanServer = connector.getMBeanServerConnection();
+
+            ObjectName objectName = new ObjectName("org.apache.camel:context=*,type=tracer,name=BacklogDebugger");
+            Set<ObjectName> names = mbeanServer.queryNames(objectName, null);
+            assertNotNull(names);
+
+            Iterator<ObjectName> iteratorNames = names.iterator();
+            if (iteratorNames.hasNext()) {
+                ObjectName debuggerMBeanObjectName = iteratorNames.next();
+                assertNotNull(debuggerMBeanObjectName);
+                ManagedBacklogDebuggerMBean backlogDebugger = JMX.newMBeanProxy(mbeanServer, debuggerMBeanObjectName,
+                        ManagedBacklogDebuggerMBean.class);
+                Set<String> breakpoints = backlogDebugger.breakpoints();
+                assertNotNull(breakpoints);
+                Set<String> suspendedBreakpointNodeIds = backlogDebugger.suspendedBreakpointNodeIds();
+                assertNotNull(suspendedBreakpointNodeIds);
+            } else {
+                fail("Expected to find 1 BacklogDebugger");
+            }
+        }
+    }
 }