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 <[email protected]>
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);