org.springframework.aop.interceptor

## Class JamonPerformanceMonitorInterceptor

- java.lang.Object
- - org.springframework.aop.interceptor.AbstractTraceInterceptor
  - - org.springframework.aop.interceptor.AbstractMonitoringInterceptor
    - - org.springframework.aop.interceptor.JamonPerformanceMonitorInterceptor

- All Implemented Interfaces:
    Serializable, Advice, Interceptor, MethodInterceptor

      public class JamonPerformanceMonitorInterceptor
      extends AbstractMonitoringInterceptor

  Performance monitor interceptor that uses JAMon library to perform the performance measurement on the intercepted method and output the stats. In addition, it tracks/counts exceptions thrown by the intercepted method. The stack traces can be viewed in the JAMon web application.

  This code is inspired by Thierry Templier's blog.

  Since:
    1.1.3
  Author:
    Dmitriy Kopylenko, Juergen Hoeller, Rob Harrop, Steve Souza
  See Also:
    `MonitorFactory`, `PerformanceMonitorInterceptor`, Serialized Form

- - ### Field Summary

    - ### Fields inherited from class org.springframework.aop.interceptor.AbstractTraceInterceptor

      `defaultLogger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JamonPerformanceMonitorInterceptor()` Create a new JamonPerformanceMonitorInterceptor with a static logger.
    `JamonPerformanceMonitorInterceptor(boolean useDynamicLogger)` Create a new JamonPerformanceMonitorInterceptor with a dynamic or static logger, according to the given flag.
    `JamonPerformanceMonitorInterceptor(boolean useDynamicLogger, boolean trackAllInvocations)` Create a new JamonPerformanceMonitorInterceptor with a dynamic or static logger, according to the given flag.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected Object` | `invokeUnderTrace(MethodInvocation invocation, Log logger)` Wraps the invocation with a JAMon Monitor and writes the current performance statistics to the log (if enabled).
    `protected boolean` | `isInterceptorEnabled(MethodInvocation invocation, Log logger)` Always applies the interceptor if the "trackAllInvocations" flag has been set; else just kicks in if the log is enabled.
    `void` | `setTrackAllInvocations(boolean trackAllInvocations)` Set whether to track all invocations that go through this interceptor, or just invocations with trace logging enabled.
    `protected void` | `trackException(com.jamonapi.MonKey key, Throwable ex)` Count the thrown exception and put the stack trace in the details portion of the key.

    - ### Methods inherited from class org.springframework.aop.interceptor.AbstractMonitoringInterceptor

      `createInvocationTraceName, getPrefix, getSuffix, setLogTargetClassInvocation, setPrefix, setSuffix`

    - ### Methods inherited from class org.springframework.aop.interceptor.AbstractTraceInterceptor

      `getClassForLogging, getLoggerForInvocation, invoke, isLogEnabled, setHideProxyClassNames, setLogExceptionStackTrace, setLoggerName, setUseDynamicLogger, writeToLog, writeToLog`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### JamonPerformanceMonitorInterceptor

          public JamonPerformanceMonitorInterceptor()

      Create a new JamonPerformanceMonitorInterceptor with a static logger.

    - #### JamonPerformanceMonitorInterceptor

          public JamonPerformanceMonitorInterceptor(boolean useDynamicLogger)

      Create a new JamonPerformanceMonitorInterceptor with a dynamic or static logger, according to the given flag.
      Parameters:
        `useDynamicLogger` - whether to use a dynamic logger or a static logger
      See Also:
        `AbstractTraceInterceptor.setUseDynamicLogger(boolean)`

    - #### JamonPerformanceMonitorInterceptor

          public JamonPerformanceMonitorInterceptor(boolean useDynamicLogger,
                                                    boolean trackAllInvocations)

      Create a new JamonPerformanceMonitorInterceptor with a dynamic or static logger, according to the given flag.
      Parameters:
        `useDynamicLogger` - whether to use a dynamic logger or a static logger
        `trackAllInvocations` - whether to track all invocations that go through this interceptor, or just invocations with trace logging enabled
      See Also:
        `AbstractTraceInterceptor.setUseDynamicLogger(boolean)`

  - ### Method Detail

    - #### setTrackAllInvocations

          public void setTrackAllInvocations(boolean trackAllInvocations)

      Set whether to track all invocations that go through this interceptor, or just invocations with trace logging enabled.

      Default is "false": Only invocations with trace logging enabled will be monitored. Specify "true" to let JAMon track all invocations, gathering statistics even when trace logging is disabled.

    - #### isInterceptorEnabled

          protected boolean isInterceptorEnabled(MethodInvocation invocation,
                                                 Log logger)

      Always applies the interceptor if the "trackAllInvocations" flag has been set; else just kicks in if the log is enabled.
      Overrides:
        `isInterceptorEnabled` in class `AbstractTraceInterceptor`
      Parameters:
        `invocation` - the `MethodInvocation` being traced
        `logger` - the `Log` instance to check
      See Also:
        `setTrackAllInvocations(boolean)`, `AbstractTraceInterceptor.isLogEnabled(org.apache.commons.logging.Log)`

    - #### invokeUnderTrace

          protected Object invokeUnderTrace(MethodInvocation invocation,
                                            Log logger)
                                     throws Throwable

      Wraps the invocation with a JAMon Monitor and writes the current performance statistics to the log (if enabled).
      Specified by:
        `invokeUnderTrace` in class `AbstractTraceInterceptor`
        `logger` - the `Log` to write trace messages to
      Returns:
        the result of the call to `MethodInvocation.proceed()`
      Throws:
        `Throwable` - if the call to `MethodInvocation.proceed()` encountered any errors
      See Also:
        `MonitorFactory.start(java.lang.String)`, `Monitor.stop()`

    - #### trackException

          protected void trackException(com.jamonapi.MonKey key,
                                        Throwable ex)

      Count the thrown exception and put the stack trace in the details portion of the key. This will allow the stack trace to be viewed in the JAMon web application.