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 12:47:15 UTC

[camel-quarkus] branch improve-native-support-of-camel-quarkus-debug created (now 0eecb892e0)

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


      at 0eecb892e0 Improve native support of camel-quarkus-debug

This branch includes the following new commits:

     new 0eecb892e0 Improve native support of camel-quarkus-debug

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.



[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 0eecb892e0962c52ec0233c7cb714ac63eb98221
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 +++++
 .../component/debug/deployment/DebugProcessor.java | 22 +++++++++++++++
 .../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 ++++++++++++++++++++++
 6 files changed, 94 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/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..a06c7afd39 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
@@ -16,11 +16,16 @@
  */
 package org.apache.camel.quarkus.component.debug.deployment;
 
+import java.util.HashSet;
+import java.util.LinkedHashSet;
 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.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
 import io.quarkus.runtime.LaunchMode;
 import org.apache.camel.quarkus.component.debug.DebugConfig;
 import org.apache.camel.quarkus.core.deployment.spi.CamelServiceDestination;
@@ -28,6 +33,12 @@ import org.apache.camel.quarkus.core.deployment.spi.CamelServicePatternBuildItem
 import org.eclipse.microprofile.config.ConfigProvider;
 
 class DebugProcessor {
+
+    private static final String[] SERIALIZATION_CLASSES = {
+            HashSet.class.getName(),
+            LinkedHashSet.class.getName(),
+    };
+
     private static final String FEATURE = "camel-debug";
 
     @BuildStep(onlyIf = DebugEnabled.class)
@@ -48,6 +59,17 @@ 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"));
+    }
+
+    @BuildStep
+    void configureReflection(BuildProducer<ReflectiveClassBuildItem> reflectiveClass) {
+        reflectiveClass.produce(ReflectiveClassBuildItem.builder(SERIALIZATION_CLASSES).serialization().build());
+    }
+
     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");
+            }
+        }
+    }
 }