Class 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 Detail

      • 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:
        Constant Field Values
      • 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:
        Constant Field Values
    • Method Detail

      • 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