This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push:
new 7c72da24d2 Improve native support of camel-quarkus-debug
7c72da24d2 is described below
commit 7c72da24d2c35c59163322ce9557b189be8b500e
Author: Nicolas Filotto <[email protected]>
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 | 11 ++++++++
.../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, 87 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..dd2457c815 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,10 +18,14 @@ 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.api.management.JmxSystemPropertyKeys;
+import org.apache.camel.impl.debugger.BacklogDebugger;
import org.apache.camel.quarkus.component.debug.DebugConfig;
import org.apache.camel.quarkus.core.deployment.spi.CamelServiceDestination;
import
org.apache.camel.quarkus.core.deployment.spi.CamelServicePatternBuildItem;
@@ -48,6 +52,13 @@ 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(BacklogDebugger.SUSPEND_MODE_SYSTEM_PROP_NAME,
Boolean.toString(config.suspend)));
+ producer.produce(new
SystemPropertyBuildItem(JmxSystemPropertyKeys.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");
+ }
+ }
+ }
}