Spring Integration

org.springframework.integration.monitor
Class IntegrationMBeanExporter

java.lang.Object
  extended by org.springframework.jmx.support.MBeanRegistrationSupport
      extended by org.springframework.jmx.export.MBeanExporter
          extended by org.springframework.integration.monitor.IntegrationMBeanExporter
All Implemented Interfaces:
java.lang.Runnable, org.springframework.beans.factory.Aware, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.beans.factory.BeanFactoryAware, org.springframework.beans.factory.config.BeanPostProcessor, org.springframework.beans.factory.DisposableBean, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationContextAware, org.springframework.context.Lifecycle, org.springframework.context.Phased, org.springframework.context.SmartLifecycle, org.springframework.jmx.export.MBeanExportOperations

@ManagedResource
public class IntegrationMBeanExporter
extends org.springframework.jmx.export.MBeanExporter
implements org.springframework.beans.factory.config.BeanPostProcessor, org.springframework.beans.factory.BeanFactoryAware, org.springframework.context.ApplicationContextAware, org.springframework.beans.factory.BeanClassLoaderAware, org.springframework.context.SmartLifecycle, java.lang.Runnable

MBean exporter for Spring Integration components in an existing application. Add an instance of this as a bean definition in the same context as the components you need to monitor and all message channels and message handlers will be exposed.

Channels will report metrics on send and receive (counts, rates, errors) and handlers will report metrics on execution duration. Channels will be registered under their name (bean id), if explicit, or the last part of their internal name (e.g. "nullChannel") if registered by the framework. A handler that is attached to an endpoint will be registered with the endpoint name (bean id) if there is one, otherwise under the name of the input channel. Handler object names contain a bean key that reports the source of the name: "endpoint" if the name is the endpoint id; "anonymous" if it is the input channel; and "handler" as a fallback, where the object name is just the toString() of the handler.

This component is itself an MBean, reporting attributes concerning the names and object names of the channels and handlers. It doesn't register itself to avoid conflicts with the standard <context:mbean-export/> from Spring (which should therefore be used any time you need to expose those features).

Author:
Dave Syer, Helena Edelson, Oleg Zhurakousky, Gary Russell

Field Summary
static java.lang.String DEFAULT_DOMAIN
           
 
Fields inherited from class org.springframework.jmx.export.MBeanExporter
AUTODETECT_ALL, AUTODETECT_ASSEMBLER, AUTODETECT_MBEAN, AUTODETECT_NONE
 
Fields inherited from class org.springframework.jmx.support.MBeanRegistrationSupport
registeredBeans, REGISTRATION_FAIL_ON_EXISTING, REGISTRATION_IGNORE_EXISTING, REGISTRATION_REPLACE_EXISTING, server
 
Constructor Summary
IntegrationMBeanExporter()
           
 
Method Summary
 void destroy()
           
protected  void doStart()
           
protected  void doStop()
           
 int getActiveHandlerCount()
           
 int getChannelCount()
           
 Statistics getChannelErrorRate(java.lang.String name)
           
 java.lang.String[] getChannelNames()
           
 int getChannelReceiveCount(java.lang.String name)
           
 Statistics getChannelSendRate(java.lang.String name)
           
 int getHandlerCount()
           
 Statistics getHandlerDuration(java.lang.String name)
           
 java.lang.String[] getHandlerNames()
           
 int getPhase()
           
 int getQueuedMessageCount()
           
 int getSourceMessageCount(java.lang.String name)
           
 boolean isAutoStartup()
           
 boolean isRunning()
           
protected  void orderlyShutdownCapableComponentsAfter()
           
protected  void orderlyShutdownCapableComponentsBefore()
           
 java.lang.Object postProcessAfterInitialization(java.lang.Object bean, java.lang.String beanName)
           
 java.lang.Object postProcessBeforeInitialization(java.lang.Object bean, java.lang.String beanName)
           
protected  void registerBeans()
           
 void run()
          Perform orderly shutdown - called or executed from stopActiveComponents(boolean, long).
 void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
           
 void setBeanClassLoader(java.lang.ClassLoader classLoader)
           
 void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
           
 void setComponentNamePatterns(java.lang.String[] componentNamePatterns)
           
 void setDefaultDomain(java.lang.String domain)
          The JMX domain to use for MBeans registered.
 void setObjectNameStaticProperties(java.util.Map<java.lang.String,java.lang.String> objectNameStaticProperties)
          Static properties that will be added to all object names.
 void setShutdownExecutor(java.util.concurrent.Executor shutdownExecutor)
           
 void start()
           
 void stop()
           
 void stop(java.lang.Runnable callback)
           
 void stopActiveChannels()
           
 void stopActiveComponents(boolean force, long howLong)
          Shutdown active components.
 void stopExecutors()
           
 void stopMessageSources()
          Stops all message sources - may cause interrupts.
 void stopNonSpringExecutors()
           
 void stopSchedulers()
           
 
Methods inherited from class org.springframework.jmx.export.MBeanExporter
adaptMBeanIfPossible, afterPropertiesSet, createAndConfigureMBean, createModelMBean, getObjectName, isBeanDefinitionLazyInit, isMBean, onRegister, onUnregister, registerBeanNameOrInstance, registerManagedResource, registerManagedResource, setAllowEagerInit, setAssembler, setAutodetect, setAutodetectMode, setAutodetectModeName, setBeans, setEnsureUniqueRuntimeObjectNames, setExcludedBeans, setExposeManagedResourceClassLoader, setListeners, setNamingStrategy, setNotificationListenerMappings, setNotificationListeners, unregisterManagedResource
 
Methods inherited from class org.springframework.jmx.support.MBeanRegistrationSupport
doRegister, doUnregister, getRegisteredObjectNames, getServer, onRegister, setRegistrationBehavior, setRegistrationBehaviorName, setServer, unregisterBeans
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_DOMAIN

public static final java.lang.String DEFAULT_DOMAIN
See Also:
Constant Field Values
Constructor Detail

IntegrationMBeanExporter

public IntegrationMBeanExporter()
Method Detail

setBeanClassLoader

public void setBeanClassLoader(java.lang.ClassLoader classLoader)
Specified by:
setBeanClassLoader in interface org.springframework.beans.factory.BeanClassLoaderAware
Overrides:
setBeanClassLoader in class org.springframework.jmx.export.MBeanExporter

setObjectNameStaticProperties

public void setObjectNameStaticProperties(java.util.Map<java.lang.String,java.lang.String> objectNameStaticProperties)
Static properties that will be added to all object names.

Parameters:
objectNameStaticProperties - the objectNameStaticProperties to set

setDefaultDomain

public void setDefaultDomain(java.lang.String domain)
The JMX domain to use for MBeans registered. Defaults to spring.application (which is useful in SpringSource HQ).

Parameters:
domain - the domain name to set

setComponentNamePatterns

public void setComponentNamePatterns(java.lang.String[] componentNamePatterns)

setBeanFactory

public void setBeanFactory(org.springframework.beans.factory.BeanFactory beanFactory)
                    throws org.springframework.beans.BeansException
Specified by:
setBeanFactory in interface org.springframework.beans.factory.BeanFactoryAware
Overrides:
setBeanFactory in class org.springframework.jmx.export.MBeanExporter
Throws:
org.springframework.beans.BeansException

setApplicationContext

public void setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
                           throws org.springframework.beans.BeansException
Specified by:
setApplicationContext in interface org.springframework.context.ApplicationContextAware
Throws:
org.springframework.beans.BeansException

setShutdownExecutor

public void setShutdownExecutor(java.util.concurrent.Executor shutdownExecutor)

postProcessAfterInitialization

public java.lang.Object postProcessAfterInitialization(java.lang.Object bean,
                                                       java.lang.String beanName)
                                                throws org.springframework.beans.BeansException
Specified by:
postProcessAfterInitialization in interface org.springframework.beans.factory.config.BeanPostProcessor
Throws:
org.springframework.beans.BeansException

postProcessBeforeInitialization

public java.lang.Object postProcessBeforeInitialization(java.lang.Object bean,
                                                        java.lang.String beanName)
                                                 throws org.springframework.beans.BeansException
Specified by:
postProcessBeforeInitialization in interface org.springframework.beans.factory.config.BeanPostProcessor
Throws:
org.springframework.beans.BeansException

isAutoStartup

public final boolean isAutoStartup()
Specified by:
isAutoStartup in interface org.springframework.context.SmartLifecycle

getPhase

public final int getPhase()
Specified by:
getPhase in interface org.springframework.context.Phased

isRunning

public final boolean isRunning()
Specified by:
isRunning in interface org.springframework.context.Lifecycle

start

public final void start()
Specified by:
start in interface org.springframework.context.Lifecycle

stop

public final void stop()
Specified by:
stop in interface org.springframework.context.Lifecycle

stop

public final void stop(java.lang.Runnable callback)
Specified by:
stop in interface org.springframework.context.SmartLifecycle

doStop

protected void doStop()

doStart

protected void doStart()

destroy

public void destroy()
Specified by:
destroy in interface org.springframework.beans.factory.DisposableBean
Overrides:
destroy in class org.springframework.jmx.export.MBeanExporter

stopActiveComponents

@ManagedOperation
public void stopActiveComponents(boolean force,
                                                  long howLong)
Shutdown active components. If the thread calling this method is managed by a Spring-managed executor, you should provide a specific dedicated executor via the setShutdownExecutor(java.util.concurrent.Executor) method. When this is provided, the shutdown will be performed on one of its threads, instead of the calling thread; thus avoiding the situation where we will wait for the current thread to terminate.

It is not necessary to supply this executor service if the current thread will not, itself, be shutdown as a result of calling this method.

Note: The supplied executor service will not be shut down.

Parameters:
force - If true, stop the executors with shutdownNow(), canceling running tasks. Overrides any settings on schedulers/executors. When true may result in error messages being sent to error channels.
howLong - The time to wait in total for all activities to complete in milliseconds.

run

public void run()
Perform orderly shutdown - called or executed from stopActiveComponents(boolean, long).

Specified by:
run in interface java.lang.Runnable

stopMessageSources

@ManagedOperation
public void stopMessageSources()
Stops all message sources - may cause interrupts.


stopActiveChannels

@ManagedOperation
public void stopActiveChannels()

stopSchedulers

@ManagedOperation
public void stopSchedulers()

stopExecutors

@ManagedOperation
public void stopExecutors()

stopNonSpringExecutors

@ManagedOperation
public void stopNonSpringExecutors()

orderlyShutdownCapableComponentsBefore

protected final void orderlyShutdownCapableComponentsBefore()

orderlyShutdownCapableComponentsAfter

protected final void orderlyShutdownCapableComponentsAfter()

getChannelCount

@ManagedMetric(metricType=COUNTER,
               displayName="MessageChannel Channel Count")
public int getChannelCount()

getHandlerCount

@ManagedMetric(metricType=COUNTER,
               displayName="MessageHandler Handler Count")
public int getHandlerCount()

getHandlerNames

@ManagedAttribute
public java.lang.String[] getHandlerNames()

getActiveHandlerCount

@ManagedMetric(metricType=GAUGE,
               displayName="Active Handler Count")
public int getActiveHandlerCount()

getQueuedMessageCount

@ManagedMetric(metricType=GAUGE,
               displayName="Queued Message Count")
public int getQueuedMessageCount()

getChannelNames

@ManagedAttribute
public java.lang.String[] getChannelNames()

getHandlerDuration

public Statistics getHandlerDuration(java.lang.String name)

getSourceMessageCount

public int getSourceMessageCount(java.lang.String name)

getChannelReceiveCount

public int getChannelReceiveCount(java.lang.String name)

getChannelSendRate

@ManagedOperation
public Statistics getChannelSendRate(java.lang.String name)

getChannelErrorRate

public Statistics getChannelErrorRate(java.lang.String name)

registerBeans

protected void registerBeans()
Overrides:
registerBeans in class org.springframework.jmx.export.MBeanExporter

Spring Integration