The Spring Framework

org.springframework.jmx.access
Class MBeanClientInterceptor

java.lang.Object
  extended by org.springframework.jmx.access.MBeanClientInterceptor
All Implemented Interfaces:
Advice, Interceptor, MethodInterceptor, BeanClassLoaderAware, DisposableBean, InitializingBean
Direct Known Subclasses:
MBeanProxyFactoryBean

public class MBeanClientInterceptor
extends Object
implements MethodInterceptor, BeanClassLoaderAware, InitializingBean, DisposableBean

MethodInterceptor that routes calls to an MBean running on the supplied MBeanServerConnection. Works for both local and remote MBeanServerConnections.

By default, the MBeanClientInterceptor will connect to the MBeanServer and cache MBean metadata at startup. This can be undesirable when running against a remote MBeanServer that may not be running when the application starts. Through setting the connectOnStartup property to "false", you can defer this process until the first invocation against the proxy.

Requires JMX 1.2's MBeanServerConnection feature. As a consequence, this class will not work on JMX 1.0.

This functionality is usually used through MBeanProxyFactoryBean. See the javadoc of that class for more information.

Since:
1.2
Author:
Rob Harrop, Juergen Hoeller
See Also:
MBeanProxyFactoryBean, setConnectOnStartup(boolean)

Field Summary
protected  Log logger
          Logger available to subclasses
 
Constructor Summary
MBeanClientInterceptor()
           
 
Method Summary
 void afterPropertiesSet()
          Prepares the MBeanServerConnection if the "connectOnStartup" is turned on (which it is by default).
protected  Object convertResultValueIfNecessary(Object result, Class targetClass)
          Convert the given result object (from attribute access or operation invocation) to the specified target class for returning from the proxy method.
 void destroy()
          Closes any JMXConnector that may be managed by this interceptor.
protected  Class getManagementInterface()
          Return the management interface of the target MBean, or null if none specified.
 Object invoke(MethodInvocation invocation)
          Route the invocation to the configured managed resource.
protected  boolean isPrepared()
          Return whether this client interceptor has already been prepared, i.e. has already looked up the server and cached all metadata.
protected  MBeanServer locateMBeanServer(String agentId)
          Attempt to locate an existing MBeanServer.
 void prepare()
          Ensures that an MBeanServerConnection is configured and attempts to detect a local connection if one is not supplied.
 void setAgentId(String agentId)
          Set the agent id of the MBeanServer to locate.
 void setBeanClassLoader(ClassLoader beanClassLoader)
          Callback that supplies the bean class loader to a bean instance.
 void setConnectOnStartup(boolean connectOnStartup)
          Set whether or not the proxy should connect to the MBeanServer at creation time ("true") or the first time it is invoked ("false").
 void setManagementInterface(Class managementInterface)
          Set the management interface of the target MBean, exposing bean property setters and getters for MBean attributes and conventional Java methods for MBean operations.
 void setObjectName(Object objectName)
          Set the ObjectName of the MBean which calls are routed to, as ObjectName instance or as String.
 void setServer(MBeanServerConnection server)
          Set the MBeanServerConnection used to connect to the MBean which all invocations are routed to.
 void setServiceUrl(String url)
          Set the service URL of the remote MBeanServer.
 void setUseStrictCasing(boolean useStrictCasing)
          Set whether to use strict casing for attributes.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

protected final Log logger
Logger available to subclasses

Constructor Detail

MBeanClientInterceptor

public MBeanClientInterceptor()
Method Detail

setServer

public void setServer(MBeanServerConnection server)
Set the MBeanServerConnection used to connect to the MBean which all invocations are routed to.


setServiceUrl

public void setServiceUrl(String url)
                   throws MalformedURLException
Set the service URL of the remote MBeanServer.

Throws:
MalformedURLException

setAgentId

public void setAgentId(String agentId)
Set the agent id of the MBeanServer to locate.

Default is none. If specified, this will result in an attempt being made to locate the attendant MBeanServer, unless the "serviceUrl" property has been set.

See Also:
MBeanServerFactory.findMBeanServer(String)

setConnectOnStartup

public void setConnectOnStartup(boolean connectOnStartup)
Set whether or not the proxy should connect to the MBeanServer at creation time ("true") or the first time it is invoked ("false"). Default is "true".


setObjectName

public void setObjectName(Object objectName)
                   throws MalformedObjectNameException
Set the ObjectName of the MBean which calls are routed to, as ObjectName instance or as String.

Throws:
MalformedObjectNameException

setUseStrictCasing

public void setUseStrictCasing(boolean useStrictCasing)
Set whether to use strict casing for attributes. Enabled by default.

When using strict casing, a JavaBean property with a getter such as getFoo() translates to an attribute called Foo. With strict casing disabled, getFoo() would translate to just foo.


setManagementInterface

public void setManagementInterface(Class managementInterface)
Set the management interface of the target MBean, exposing bean property setters and getters for MBean attributes and conventional Java methods for MBean operations.


getManagementInterface

protected final Class getManagementInterface()
Return the management interface of the target MBean, or null if none specified.


setBeanClassLoader

public void setBeanClassLoader(ClassLoader beanClassLoader)
Description copied from interface: BeanClassLoaderAware
Callback that supplies the bean class loader to a bean instance.

Invoked after the population of normal bean properties but before an initialization callback such as InitializingBean's InitializingBean.afterPropertiesSet() method or a custom init-method.

Specified by:
setBeanClassLoader in interface BeanClassLoaderAware
Parameters:
beanClassLoader - the owning class loader; may be null in which case a default ClassLoader must be used, for example the ClassLoader obtained via ClassUtils.getDefaultClassLoader()

afterPropertiesSet

public void afterPropertiesSet()
Prepares the MBeanServerConnection if the "connectOnStartup" is turned on (which it is by default).

Specified by:
afterPropertiesSet in interface InitializingBean

prepare

public void prepare()
Ensures that an MBeanServerConnection is configured and attempts to detect a local connection if one is not supplied.


locateMBeanServer

protected MBeanServer locateMBeanServer(String agentId)
                                 throws MBeanServerNotFoundException
Attempt to locate an existing MBeanServer. Called if no "serviceUrl" was specified.

The default implementation attempts to find an MBeanServer using a standard lookup. Subclasses may override to add additional location logic.

Parameters:
agentId - the agent identifier of the MBeanServer to retrieve. If this parameter is null, all registered MBeanServers are considered.
Returns:
the MBeanServer if found
Throws:
MBeanServerNotFoundException - if no MBeanServer could be found
See Also:
JmxUtils.locateMBeanServer(String), MBeanServerFactory.findMBeanServer(String)

isPrepared

protected boolean isPrepared()
Return whether this client interceptor has already been prepared, i.e. has already looked up the server and cached all metadata.


invoke

public Object invoke(MethodInvocation invocation)
              throws Throwable
Route the invocation to the configured managed resource. Correctly routes JavaBean property access to MBeanServerConnection.get/setAttribute and method invocation to MBeanServerConnection.invoke. Any attempt to invoke a method that does not correspond to an attribute or operation defined in the management interface of the managed resource results in an InvalidInvocationException.

Specified by:
invoke in interface MethodInterceptor
Parameters:
invocation - the MethodInvocation to re-route.
Returns:
the value returned as a result of the re-routed invocation.
Throws:
InvocationFailureException - if the invocation does not match an attribute or operation on the management interface of the resource.
Throwable - typically as the result of an error during invocation

convertResultValueIfNecessary

protected Object convertResultValueIfNecessary(Object result,
                                               Class targetClass)
Convert the given result object (from attribute access or operation invocation) to the specified target class for returning from the proxy method.

Parameters:
result - the result object as returned by the MBeanServer
targetClass - the result type of the proxy method that's been invoked
Returns:
the converted result object, or the passed-in object if no conversion is necessary

destroy

public void destroy()
             throws Exception
Closes any JMXConnector that may be managed by this interceptor.

Specified by:
destroy in interface DisposableBean
Throws:
Exception - in case of shutdown errors. Exceptions will get logged but not rethrown to allow other beans to release their resources too.

The Spring Framework

Copyright © 2002-2007 The Spring Framework.