Class BacklogDebugger

java.lang.Object
org.apache.camel.support.service.BaseService
org.apache.camel.support.service.ServiceSupport
org.apache.camel.impl.debugger.BacklogDebugger
All Implemented Interfaces:
AutoCloseable, org.apache.camel.Service, org.apache.camel.ShutdownableService, org.apache.camel.StatefulService, org.apache.camel.SuspendableService

public final class BacklogDebugger extends org.apache.camel.support.service.ServiceSupport
A Debugger that has easy debugging functionality which can be used from JMX with ManagedBacklogDebuggerMBean.

This implementation allows setting breakpoints (with or without a condition) and inspect the Exchange dumped in XML in BacklogTracerEventMessage format. There is operations to resume suspended breakpoints to continue routing the Exchange. There is also step functionality, so you can single step a given Exchange.

This implementation will only break the first Exchange that arrives to a breakpoint. If Camel routes using concurrency then sub-sequent Exchange will continue to be routed, if their breakpoint already holds a suspended Exchange.

  • Field Details

    • SUSPEND_MODE_ENV_VAR_NAME

      public static final String SUSPEND_MODE_ENV_VAR_NAME
      The name of the environment variable that contains the value of the flag indicating whether the BacklogDebugger should suspend processing the messages and wait for a debugger to attach or not.
      See Also:
    • SUSPEND_MODE_SYSTEM_PROP_NAME

      public static final String SUSPEND_MODE_SYSTEM_PROP_NAME
      The name of the system property that contains the value of the flag indicating whether the BacklogDebugger should suspend processing the messages and wait for a debugger to attach or not.
      See Also:
  • Method Details

    • createDebugger

      public static BacklogDebugger createDebugger(org.apache.camel.CamelContext context)
      Creates a new backlog debugger.

      In case the environment variable SUSPEND_MODE_ENV_VAR_NAME or the system property SUSPEND_MODE_SYSTEM_PROP_NAME has been set to true, the message processing is directly suspended.

      Parameters:
      context - Camel context
      Returns:
      a new backlog debugger
    • getBacklogDebugger

      public static BacklogDebugger getBacklogDebugger(org.apache.camel.CamelContext context)
      A helper method to return the BacklogDebugger instance if one is enabled
      Returns:
      the backlog debugger or null if none can be found
    • getLoggingLevel

      public String getLoggingLevel()
    • setLoggingLevel

      public void setLoggingLevel(String level)
    • enableDebugger

      public void enableDebugger()
    • disableDebugger

      public void disableDebugger()
    • isEnabled

      public boolean isEnabled()
    • hasBreakpoint

      public boolean hasBreakpoint(String nodeId)
    • isSingleStepMode

      public boolean isSingleStepMode()
    • attach

      public void attach()
      Attach the debugger which will resume the message processing in case the suspend mode is enabled. Do nothing otherwise.
    • detach

      public void detach()
      Detach the debugger which will suspend the message processing in case the suspend mode is enabled. Do nothing otherwise.
    • addBreakpoint

      public void addBreakpoint(String nodeId)
    • addConditionalBreakpoint

      public void addConditionalBreakpoint(String nodeId, String language, String predicate)
    • removeBreakpoint

      public void removeBreakpoint(String nodeId)
    • removeAllBreakpoints

      public void removeAllBreakpoints()
    • getBreakpoints

      public Set<String> getBreakpoints()
    • resumeBreakpoint

      public void resumeBreakpoint(String nodeId)
    • setMessageBodyOnBreakpoint

      public void setMessageBodyOnBreakpoint(String nodeId, Object body)
    • setMessageBodyOnBreakpoint

      public void setMessageBodyOnBreakpoint(String nodeId, Object body, Class<?> type)
    • removeMessageBodyOnBreakpoint

      public void removeMessageBodyOnBreakpoint(String nodeId)
    • setMessageHeaderOnBreakpoint

      public void setMessageHeaderOnBreakpoint(String nodeId, String headerName, Object value) throws org.apache.camel.NoTypeConversionAvailableException
      Throws:
      org.apache.camel.NoTypeConversionAvailableException
    • setMessageHeaderOnBreakpoint

      public void setMessageHeaderOnBreakpoint(String nodeId, String headerName, Object value, Class<?> type) throws org.apache.camel.NoTypeConversionAvailableException
      Throws:
      org.apache.camel.NoTypeConversionAvailableException
    • getFallbackTimeout

      public long getFallbackTimeout()
    • setFallbackTimeout

      public void setFallbackTimeout(long fallbackTimeout)
    • removeMessageHeaderOnBreakpoint

      public void removeMessageHeaderOnBreakpoint(String nodeId, String headerName)
    • resumeAll

      public void resumeAll()
    • stepBreakpoint

      public void stepBreakpoint(String nodeId)
    • step

      public void step()
    • getSuspendedBreakpointNodeIds

      public Set<String> getSuspendedBreakpointNodeIds()
    • getSuspendedExchange

      public org.apache.camel.Exchange getSuspendedExchange(String id)
      Gets the exchanged suspended at the given breakpoint id or null if there is none at that id.
      Parameters:
      id - - node id for the breakpoint
      Returns:
      The suspended exchange or null if there isn't one suspended at the given breakpoint.
    • disableBreakpoint

      public void disableBreakpoint(String nodeId)
    • enableBreakpoint

      public void enableBreakpoint(String nodeId)
    • getBodyMaxChars

      public int getBodyMaxChars()
    • setBodyMaxChars

      public void setBodyMaxChars(int bodyMaxChars)
    • isBodyIncludeStreams

      public boolean isBodyIncludeStreams()
    • setBodyIncludeStreams

      public void setBodyIncludeStreams(boolean bodyIncludeStreams)
    • isBodyIncludeFiles

      public boolean isBodyIncludeFiles()
    • setBodyIncludeFiles

      public void setBodyIncludeFiles(boolean bodyIncludeFiles)
    • dumpTracedMessagesAsXml

      public String dumpTracedMessagesAsXml(String nodeId)
    • getDebugCounter

      public long getDebugCounter()
    • resetDebugCounter

      public void resetDebugCounter()
    • beforeProcess

      public org.apache.camel.util.StopWatch beforeProcess(org.apache.camel.Exchange exchange, org.apache.camel.Processor processor, org.apache.camel.NamedNode definition)
    • afterProcess

      public void afterProcess(org.apache.camel.Exchange exchange, org.apache.camel.Processor processor, org.apache.camel.NamedNode definition, long timeTaken)
    • doStart

      protected void doStart() throws Exception
      Overrides:
      doStart in class org.apache.camel.support.service.BaseService
      Throws:
      Exception
    • doStop

      protected void doStop() throws Exception
      Overrides:
      doStop in class org.apache.camel.support.service.BaseService
      Throws:
      Exception