public class MBeanClientInterceptor extends java.lang.Object implements MethodInterceptor, BeanClassLoaderAware, InitializingBean, DisposableBean
MethodInterceptor
that routes calls to an
MBean running on the supplied MBeanServerConnection
.
Works for both local and remote MBeanServerConnection
s.
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.
This functionality is usually used through MBeanProxyFactoryBean
.
See the javadoc of that class for more information.
MBeanProxyFactoryBean
,
setConnectOnStartup(boolean)
Modifier and Type | Field and Description |
---|---|
protected Log |
logger
Logger available to subclasses
|
Constructor and Description |
---|
MBeanClientInterceptor() |
Modifier and Type | Method and Description |
---|---|
void |
afterPropertiesSet()
Prepares the
MBeanServerConnection if the "connectOnStartup"
is turned on (which it is by default). |
protected java.lang.Object |
convertResultValueIfNecessary(java.lang.Object result,
MethodParameter parameter)
Convert the given result object (from attribute access or operation invocation)
to the specified target class for returning from the proxy method.
|
void |
destroy()
Invoked by the containing
BeanFactory on destruction of a bean. |
protected java.lang.Object |
doInvoke(MethodInvocation invocation)
Route the invocation to the configured managed resource.
|
java.util.Map<java.lang.String,?> |
getEnvironment()
Allow Map access to the environment to be set for the connector,
with the option to add or override specific entries.
|
protected java.lang.Class<?> |
getManagementInterface()
Return the management interface of the target MBean,
or
null if none specified. |
protected java.lang.Object |
handleConnectFailure(MethodInvocation invocation,
java.lang.Exception ex)
Refresh the connection and retry the MBean invocation if possible.
|
java.lang.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.
|
void |
prepare()
Ensures that an
MBeanServerConnection is configured and attempts
to detect a local connection if one is not supplied. |
void |
setAgentId(java.lang.String agentId)
Set the agent id of the
MBeanServer to locate. |
void |
setBeanClassLoader(java.lang.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 |
setEnvironment(java.util.Map<java.lang.String,?> environment)
Specify the environment for the JMX connector.
|
void |
setManagementInterface(java.lang.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(java.lang.Object objectName)
Set the
ObjectName of the MBean which calls are routed to,
as ObjectName instance or as String . |
void |
setRefreshOnConnectFailure(boolean refreshOnConnectFailure)
Set whether to refresh the MBeanServer connection on connect failure.
|
void |
setServer(javax.management.MBeanServerConnection server)
Set the
MBeanServerConnection used to connect to the
MBean which all invocations are routed to. |
void |
setServiceUrl(java.lang.String url)
Set the service URL of the remote
MBeanServer . |
void |
setUseStrictCasing(boolean useStrictCasing)
Set whether to use strict casing for attributes.
|
protected final Log logger
public void setServer(javax.management.MBeanServerConnection server)
MBeanServerConnection
used to connect to the
MBean which all invocations are routed to.public void setServiceUrl(java.lang.String url) throws java.net.MalformedURLException
MBeanServer
.java.net.MalformedURLException
public void setEnvironment(@Nullable java.util.Map<java.lang.String,?> environment)
JMXConnectorFactory.connect(javax.management.remote.JMXServiceURL, java.util.Map)
@Nullable public java.util.Map<java.lang.String,?> getEnvironment()
Useful for specifying entries directly, for example via "environment[myKey]". This is particularly useful for adding or overriding entries in child bean definitions.
public void setAgentId(java.lang.String agentId)
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.
Specifying the empty String indicates the platform MBeanServer.
public void setConnectOnStartup(boolean connectOnStartup)
MBeanServer
at creation time ("true") or the first time it is invoked ("false").
Default is "true".public void setRefreshOnConnectFailure(boolean refreshOnConnectFailure)
Can be turned on to allow for hot restart of the JMX server, automatically reconnecting and retrying in case of an IOException.
public void setObjectName(java.lang.Object objectName) throws javax.management.MalformedObjectNameException
ObjectName
of the MBean which calls are routed to,
as ObjectName
instance or as String
.javax.management.MalformedObjectNameException
public void setUseStrictCasing(boolean useStrictCasing)
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
.
public void setManagementInterface(@Nullable java.lang.Class<?> managementInterface)
@Nullable protected final java.lang.Class<?> getManagementInterface()
null
if none specified.public void setBeanClassLoader(java.lang.ClassLoader beanClassLoader)
BeanClassLoaderAware
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.
setBeanClassLoader
in interface BeanClassLoaderAware
beanClassLoader
- the owning class loaderpublic void afterPropertiesSet()
MBeanServerConnection
if the "connectOnStartup"
is turned on (which it is by default).afterPropertiesSet
in interface InitializingBean
public void prepare()
MBeanServerConnection
is configured and attempts
to detect a local connection if one is not supplied.protected boolean isPrepared()
@Nullable public java.lang.Object invoke(MethodInvocation invocation) throws java.lang.Throwable
invoke
in interface MethodInterceptor
invocation
- the MethodInvocation
to re-routejava.lang.Throwable
- an invocation error propagated to the userdoInvoke(org.aopalliance.intercept.MethodInvocation)
,
handleConnectFailure(org.aopalliance.intercept.MethodInvocation, java.lang.Exception)
@Nullable protected java.lang.Object handleConnectFailure(MethodInvocation invocation, java.lang.Exception ex) throws java.lang.Throwable
If not configured to refresh on connect failure, this method simply rethrows the original exception.
invocation
- the invocation that failedex
- the exception raised on remote invocationjava.lang.Throwable
- an exception raised by the new invocation,
if it failed as wellsetRefreshOnConnectFailure(boolean)
,
doInvoke(org.aopalliance.intercept.MethodInvocation)
@Nullable protected java.lang.Object doInvoke(MethodInvocation invocation) throws java.lang.Throwable
MBeanServerConnection.get/setAttribute
and method invocation to
MBeanServerConnection.invoke
.invocation
- the MethodInvocation
to re-routejava.lang.Throwable
- an invocation error propagated to the user@Nullable protected java.lang.Object convertResultValueIfNecessary(@Nullable java.lang.Object result, MethodParameter parameter)
result
- the result object as returned by the MBeanServer
parameter
- the method parameter of the proxy method that's been invokedpublic void destroy()
DisposableBean
BeanFactory
on destruction of a bean.destroy
in interface DisposableBean