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 cc0b434  CAMEL-17359: camel-debug - JAR to make camel debugging easier 
from tooling
cc0b434 is described below

commit cc0b43475666b8e54cf25880b75d8f02905d42ad
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon Dec 20 20:28:11 2021 +0100

    CAMEL-17359: camel-debug - JAR to make camel debugging easier from tooling
---
 .../camel/impl/debugger/CamelDebuggerFactory.java  | 26 ++++++++++++++++++++--
 .../java/org/apache/camel/spi/DebuggerFactory.java | 23 ++++++++++---------
 .../camel/impl/engine/AbstractCamelContext.java    | 13 ++++++++---
 3 files changed, 47 insertions(+), 15 deletions(-)

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
index b2842b8..a1f4fd9 100644
--- 
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
@@ -16,13 +16,35 @@
  */
 package org.apache.camel.impl.debugger;
 
+import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.Debugger;
+import org.apache.camel.spi.DebuggerFactory;
 import org.apache.camel.spi.annotations.JdkService;
+import org.apache.camel.support.LifecycleStrategySupport;
 
 @JdkService(Debugger.FACTORY)
-public class CamelDebuggerFactory {
+public class CamelDebuggerFactory implements DebuggerFactory {
 
-    // noop - just detect on classpath and automatic enable debugger
+    @Override
+    public Debugger createDebugger(CamelContext camelContext) throws Exception 
{
+        // must enable message history for debugger to capture more details
+        camelContext.setMessageHistory(true);
+
+        BacklogDebugger backlog = BacklogDebugger.createDebugger(camelContext);
+        // we need to enable debugger after context is started
+        
camelContext.adapt(ExtendedCamelContext.class).addLifecycleStrategy(new 
LifecycleStrategySupport() {
+
+            @Override
+            public void onContextStarted(CamelContext context) {
+                backlog.enableDebugger();
+            }
+        });
+        camelContext.addService(backlog);
+
+        // return null as we fool camel-core into using this backlog debugger 
as we added it as a service
+        return null;
+    }
 
     @Override
     public String toString() {
diff --git 
a/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java
 b/core/camel-api/src/main/java/org/apache/camel/spi/DebuggerFactory.java
similarity index 68%
copy from 
components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java
copy to core/camel-api/src/main/java/org/apache/camel/spi/DebuggerFactory.java
index b2842b8..a7515be 100644
--- 
a/components/camel-debug/src/main/java/org/apache/camel/impl/debugger/CamelDebuggerFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/DebuggerFactory.java
@@ -14,18 +14,21 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl.debugger;
+package org.apache.camel.spi;
 
-import org.apache.camel.spi.Debugger;
-import org.apache.camel.spi.annotations.JdkService;
+import org.apache.camel.CamelContext;
 
-@JdkService(Debugger.FACTORY)
-public class CamelDebuggerFactory {
+/**
+ * Factory for creating {@link Debugger}.
+ */
+public interface DebuggerFactory {
 
-    // noop - just detect on classpath and automatic enable debugger
+    /**
+     * Creates the debugger.
+     *
+     * @param  camelContext the camel context
+     * @return              the created debugger
+     */
+    Debugger createDebugger(CamelContext camelContext) throws Exception;
 
-    @Override
-    public String toString() {
-        return "camel-debug";
-    }
 }
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 c114393..8143171 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
@@ -101,6 +101,7 @@ import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatResolver;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.Debugger;
+import org.apache.camel.spi.DebuggerFactory;
 import org.apache.camel.spi.DeferServiceFactory;
 import org.apache.camel.spi.EndpointRegistry;
 import org.apache.camel.spi.EndpointStrategy;
@@ -4117,10 +4118,16 @@ 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");
+                // detect if camel-debug is on classpath that enables debugging
+                DebuggerFactory df
+                        = 
getBootstrapFactoryFinder().newInstance(Debugger.FACTORY, 
DebuggerFactory.class).orElse(null);
+                if (df != null) {
+                    LOG.info("Detected: {} enabling Camel Debugging", df);
                     setDebugging(true);
+                    Debugger debugger = df.createDebugger(this);
+                    if (debugger != null) {
+                        setDebugger(debugger);
+                    }
                 }
             } catch (Exception e) {
                 LOG.warn("Cannot create JmxManagementStrategyFactory. Will 
fallback and disable JMX.", e);

Reply via email to