Methods Summary |
---|
public void | addNotificationListener(javax.management.ObjectName name, javax.management.NotificationListener listener, javax.management.NotificationFilter filter, java.lang.Object handback)Adds a listener to a registered MBean.
mbsInterceptor.addNotificationListener(cloneObjectName(name), listener,
filter, handback);
|
public void | addNotificationListener(javax.management.ObjectName name, javax.management.ObjectName listener, javax.management.NotificationFilter filter, java.lang.Object handback)Adds a listener to a registered MBean.
mbsInterceptor.addNotificationListener(cloneObjectName(name), listener,
filter, handback);
|
private static void | checkMBeanPermission(java.lang.String classname, java.lang.String member, javax.management.ObjectName objectName, java.lang.String actions)
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
Permission perm = new MBeanPermission(classname,
member,
objectName,
actions);
sm.checkPermission(perm);
}
|
private javax.management.Attribute | cloneAttribute(javax.management.Attribute attribute)Clone attribute.
if (attribute != null) {
if (!attribute.getClass().equals(Attribute.class)) {
return new Attribute(attribute.getName(), attribute.getValue());
}
}
return attribute;
|
private javax.management.AttributeList | cloneAttributeList(javax.management.AttributeList list)Clone attribute list.
if (list != null) {
if (!list.getClass().equals(AttributeList.class)) {
// Create new attribute list
//
AttributeList newList = new AttributeList(list.size());
// Iterate through list and replace non JMX attributes
//
for (Iterator i = list.iterator(); i.hasNext(); ) {
Attribute attribute = (Attribute) i.next();
newList.add(cloneAttribute(attribute));
}
return newList;
} else {
// Iterate through list and replace non JMX attributes
//
for (int i = 0; i < list.size(); i++) {
Attribute attribute = (Attribute) list.get(i);
if (!attribute.getClass().equals(Attribute.class)) {
list.set(i, cloneAttribute(attribute));
}
}
return list;
}
}
return list;
|
private javax.management.ObjectName | cloneObjectName(javax.management.ObjectName name)Clone object name.
if (name != null) {
return ObjectName.getInstance(name);
}
return name;
|
public javax.management.ObjectInstance | createMBean(java.lang.String className, javax.management.ObjectName name)Instantiates and registers an MBean in the MBean server.
The MBean server will use its
{@link javax.management.loading.ClassLoaderRepository Default Loader Repository}
to load the class of the MBean.
An object name is associated to the MBean.
If the object name given is null, the MBean can automatically
provide its own name by implementing the
{@link javax.management.MBeanRegistration MBeanRegistration} interface.
The call returns an ObjectInstance object representing
the newly created MBean.
return mbsInterceptor.createMBean(className,
cloneObjectName(name),
(Object[]) null,
(String[]) null);
|
public javax.management.ObjectInstance | createMBean(java.lang.String className, javax.management.ObjectName name, javax.management.ObjectName loaderName)Instantiates and registers an MBean in the MBean server.
The class loader to be used is identified by its object name.
An object name is associated to the MBean.
If the object name of the loader is null, the ClassLoader that
loaded the MBean server will be used.
If the MBean's object name given is null, the MBean can
automatically provide its own name by implementing the
{@link javax.management.MBeanRegistration MBeanRegistration} interface.
The call returns an ObjectInstance object representing
the newly created MBean.
return mbsInterceptor.createMBean(className,
cloneObjectName(name),
loaderName,
(Object[]) null,
(String[]) null);
|
public javax.management.ObjectInstance | createMBean(java.lang.String className, javax.management.ObjectName name, java.lang.Object[] params, java.lang.String[] signature)Instantiates and registers an MBean in the MBean server.
The MBean server will use its
{@link javax.management.loading.ClassLoaderRepository Default Loader Repository}
to load the class of the MBean.
An object name is associated to the MBean.
If the object name given is null, the MBean can automatically
provide its own name by implementing the
{@link javax.management.MBeanRegistration MBeanRegistration} interface.
The call returns an ObjectInstance object representing
the newly created MBean.
return mbsInterceptor.createMBean(className, cloneObjectName(name),
params, signature);
|
public javax.management.ObjectInstance | createMBean(java.lang.String className, javax.management.ObjectName name, javax.management.ObjectName loaderName, java.lang.Object[] params, java.lang.String[] signature)Instantiates and registers an MBean in the MBean server.
The class loader to be used is identified by its object name.
An object name is associated to the MBean. If the object name
of the loader is not specified, the ClassLoader that loaded the
MBean server will be used.
If the MBean object name given is null, the MBean can automatically
provide its own name by implementing the
{@link javax.management.MBeanRegistration MBeanRegistration} interface.
The call returns an ObjectInstance object representing
the newly created MBean.
return mbsInterceptor.createMBean(className, cloneObjectName(name),
loaderName, params, signature);
|
private void | debug(java.lang.String clz, java.lang.String func, java.lang.String info)
Trace.send(Trace.LEVEL_DEBUG, Trace.INFO_MBEANSERVER, clz, func, info);
|
private void | debug(java.lang.String func, java.lang.String info)
debug(dbgTag, func, info);
|
public java.io.ObjectInputStream | deserialize(javax.management.ObjectName name, byte[] data)De-serializes a byte array in the context of the class loader
of an MBean.
/* Permission check */
// This call requires MBeanPermission 'getClassLoaderFor'
final ClassLoader loader = getClassLoaderFor(name);
return instantiator.deserialize(loader, data);
|
public java.io.ObjectInputStream | deserialize(java.lang.String className, byte[] data)De-serializes a byte array in the context of a given MBean class loader.
The class loader is the one that loaded the class with name "className".
if (className == null) {
throw new RuntimeOperationsException(
new IllegalArgumentException(),
"Null className passed in parameter");
}
/* Permission check */
// This call requires MBeanPermission 'getClassLoaderRepository'
final ClassLoaderRepository clr = getClassLoaderRepository();
Class theClass;
try {
if (clr == null) throw new ClassNotFoundException(className);
theClass = clr.loadClass(className);
} catch (ClassNotFoundException e) {
throw new ReflectionException(e,
"The given class could not be " +
"loaded by the default loader " +
"repository");
}
return instantiator.deserialize(theClass.getClassLoader(), data);
|
public java.io.ObjectInputStream | deserialize(java.lang.String className, javax.management.ObjectName loaderName, byte[] data)De-serializes a byte array in the context of a given MBean class loader.
The class loader is the one that loaded the class with name "className".
The name of the class loader to be used for loading the specified
class is specified.
If null, the MBean Server's class loader will be used.
// Clone ObjectName
//
loaderName = cloneObjectName(loaderName);
/* Permission check */
// Make this call just to force the 'getClassLoader'
// permission check
try {
getClassLoader(loaderName);
} catch (SecurityException e) {
throw e;
} catch (Exception e) {
}
ClassLoader myLoader = outerShell.getClass().getClassLoader();
return instantiator.deserialize(className, loaderName, data, myLoader);
|
public java.lang.Object | getAttribute(javax.management.ObjectName name, java.lang.String attribute)Gets the value of a specific attribute of a named MBean. The MBean
is identified by its object name.
return mbsInterceptor.getAttribute(cloneObjectName(name), attribute);
|
public javax.management.AttributeList | getAttributes(javax.management.ObjectName name, java.lang.String[] attributes)Enables the values of several attributes of a named MBean. The MBean
is identified by its object name.
return mbsInterceptor.getAttributes(cloneObjectName(name), attributes);
|
public java.lang.ClassLoader | getClassLoader(javax.management.ObjectName loaderName)Return the named {@link java.lang.ClassLoader}.
return mbsInterceptor.getClassLoader(cloneObjectName(loaderName));
|
public java.lang.ClassLoader | getClassLoaderFor(javax.management.ObjectName mbeanName)Return the {@link java.lang.ClassLoader} that was used for
loading the class of the named MBean.
return mbsInterceptor.getClassLoaderFor(cloneObjectName(mbeanName));
|
public javax.management.loading.ClassLoaderRepository | getClassLoaderRepository()Return the ClassLoaderRepository for that MBeanServer.
/* Permission check */
checkMBeanPermission(null, null, null, "getClassLoaderRepository");
return secureClr;
|
public java.lang.String | getDefaultDomain()Returns the default domain used for naming the MBean.
The default domain name is used as the domain part in the ObjectName
of MBeans if no domain is specified by the user.
return mbsInterceptor.getDefaultDomain();
|
public java.lang.String[] | getDomains()
return mbsInterceptor.getDomains();
|
public java.lang.Integer | getMBeanCount()Returns the number of MBeans registered in the MBean server.
return mbsInterceptor.getMBeanCount();
|
public javax.management.MBeanInfo | getMBeanInfo(javax.management.ObjectName name)This method discovers the attributes and operations that an MBean exposes
for management.
return mbsInterceptor.getMBeanInfo(cloneObjectName(name));
|
public com.sun.jmx.mbeanserver.MBeanInstantiator | getMBeanInstantiator()Return the MBeanInstantiator associated to this MBeanServer.
if (interceptorsEnabled) return instantiator;
else throw new UnsupportedOperationException(
"MBeanServerInterceptors are disabled.");
|
public javax.management.MBeanServerDelegate | getMBeanServerDelegate()
if (!interceptorsEnabled) throw new UnsupportedOperationException(
"MBeanServerInterceptors are disabled.");
return mBeanServerDelegateObject;
|
public synchronized com.sun.jmx.interceptor.MBeanServerInterceptor | getMBeanServerInterceptor()Return the MBeanServerInterceptor.
if (interceptorsEnabled) return mbsInterceptor;
else throw new UnsupportedOperationException(
"MBeanServerInterceptors are disabled.");
|
public javax.management.ObjectInstance | getObjectInstance(javax.management.ObjectName name)Gets the ObjectInstance for a given MBean registered
with the MBean server.
return mbsInterceptor.getObjectInstance(cloneObjectName(name));
|
private void | initialize()Initializes this MBeanServer, registering the MBeanServerDelegate.
This method must be called once, before using the MBeanServer.
if (instantiator == null) throw new
IllegalStateException("instantiator must not be null.");
// Registers the MBeanServer identification MBean
try {
AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() {
public Object run() throws Exception {
mbsInterceptor.registerMBean(
mBeanServerDelegateObject,
MBeanServerDelegate.DELEGATE_NAME);
return null;
}
});
} catch (SecurityException e) {
if (isDebugOn()) {
debug("new", "Unexpected security exception occurred: " +
e);
}
throw e;
} catch (Exception e) {
if (isDebugOn()) {
debug("new", "Unexpected exception occurred: " +
e.getClass().getName());
}
throw new
IllegalStateException("Can't register delegate.");
}
/* Add my class loader to the repository
This can be null if my class loader is the bootstrap
class loader. The ClassLoaderRepository knows how
to handle that case. */
ClassLoader myLoader = outerShell.getClass().getClassLoader();
final ModifiableClassLoaderRepository loaders =
instantiator.getClassLoaderRepository();
if (loaders != null) {
loaders.addClassLoader(myLoader);
/* Add the system class loader, so that if the MBean server is
loaded by the bootstrap class loader we can still load
MBeans from the classpath using
createMBean(className, objectName).
If this class (JmxMBeanServer) was not loaded by the
system class loader or a parent of it, then the caller
must have RuntimePermission("getClassLoader") for the
getSystemClassLoader() call to succeed. If the caller
does not have that permission, any call to
Class.getClassLoader() will fail. Since there are lots
of those in JMX, we better throw the exception now.
This permission question is irrelevant when JMX is part
of J2SE (as of 1.5). */
ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
if (systemLoader != myLoader)
loaders.addClassLoader(systemLoader);
}
|
public java.lang.Object | instantiate(java.lang.String className)Instantiates an object using the list of all class loaders registered
in the MBean server (using its
{@link javax.management.loading.ClassLoaderRepository Default Loader Repository}).
The object's class should have a public constructor.
It returns a reference to the newly created object.
The newly created object is not registered in the MBean server.
/* Permission check */
checkMBeanPermission(className, null, null, "instantiate");
return instantiator.instantiate(className);
|
public java.lang.Object | instantiate(java.lang.String className, javax.management.ObjectName loaderName)Instantiates an object using the class Loader specified by its
ObjectName .
If the loader name is null, the ClassLoader that loaded the
MBean Server will be used.
The object's class should have a public constructor.
It returns a reference to the newly created object.
The newly created object is not registered in the MBean server.
/* Permission check */
checkMBeanPermission(className, null, null, "instantiate");
ClassLoader myLoader = outerShell.getClass().getClassLoader();
return instantiator.instantiate(className, loaderName, myLoader);
|
public java.lang.Object | instantiate(java.lang.String className, java.lang.Object[] params, java.lang.String[] signature)Instantiates an object using the list of all class loaders registered
in the MBean server (using its
{@link javax.management.loading.ClassLoaderRepository Default Loader Repository}).
The object's class should have a public constructor.
The call returns a reference to the newly created object.
The newly created object is not registered in the MBean server.
/* Permission check */
checkMBeanPermission(className, null, null, "instantiate");
ClassLoader myLoader = outerShell.getClass().getClassLoader();
return instantiator.instantiate(className, params, signature,
myLoader);
|
public java.lang.Object | instantiate(java.lang.String className, javax.management.ObjectName loaderName, java.lang.Object[] params, java.lang.String[] signature)Instantiates an object. The class loader to be used is identified
by its object name. If the object name of the loader is null,
the ClassLoader that loaded the MBean server will be used.
The object's class should have a public constructor.
The call returns a reference to the newly created object.
The newly created object is not registered in the MBean server.
/* Permission check */
checkMBeanPermission(className, null, null, "instantiate");
ClassLoader myLoader = outerShell.getClass().getClassLoader();
return instantiator.instantiate(className,loaderName,params,signature,
myLoader);
|
public boolean | interceptorsEnabled()Tell whether {@link MBeanServerInterceptor}s are enabled on this
object.
return interceptorsEnabled;
|
public java.lang.Object | invoke(javax.management.ObjectName name, java.lang.String operationName, java.lang.Object[] params, java.lang.String[] signature)Invokes an operation on an MBean.
return mbsInterceptor.invoke(cloneObjectName(name), operationName,
params, signature);
|
private boolean | isDebugOn()
return Trace.isSelected(Trace.LEVEL_DEBUG, Trace.INFO_MBEANSERVER);
|
public boolean | isInstanceOf(javax.management.ObjectName name, java.lang.String className)Returns true if the MBean specified is an instance of the specified
class, false otherwise.
return mbsInterceptor.isInstanceOf(cloneObjectName(name), className);
|
public boolean | isRegistered(javax.management.ObjectName name)Checks whether an MBean, identified by its object name, is already
registered with the MBean server.
return mbsInterceptor.isRegistered(name);
|
private boolean | isTraceOn()
return Trace.isSelected(Trace.LEVEL_TRACE, Trace.INFO_MBEANSERVER);
|
public static javax.management.MBeanServer | newMBeanServer(java.lang.String defaultDomain, javax.management.MBeanServer outer, javax.management.MBeanServerDelegate delegate, boolean interceptors)This method creates a new MBeanServer implementation object.
When creating a new MBeanServer the
{@link javax.management.MBeanServerBuilder} first calls
newMBeanServerDelegate() in order to obtain a new
{@link javax.management.MBeanServerDelegate} for the new
MBeanServer. Then it calls
newMBeanServer(defaultDomain,outer,delegate)
passing the delegate that should be used by the
MBeanServer implementation.
Note that the passed delegate might not be directly the
MBeanServerDelegate that was returned by this implementation. It could
be, for instance, a new object wrapping the previously
returned delegate.
The outer parameter is a pointer to the MBeanServer that
should be passed to the {@link javax.management.MBeanRegistration}
interface when registering MBeans inside the MBeanServer.
If outer is null , then the MBeanServer
implementation is free to use its own this pointer when
invoking the {@link javax.management.MBeanRegistration} interface.
This makes it possible for a MBeanServer implementation to wrap
another MBeanServer implementation, in order to implement, e.g,
security checks, or to prevent access to the actual MBeanServer
implementation by returning a pointer to a wrapping object.
// This constructor happens to disregard the value of the interceptors
// flag - that is, it always uses the default value - false.
// This is admitedly a bug, but we chose not to fix it for now
// since we would rather not have anybody depending on the Sun private
// interceptor APIs - which is most probably going to be removed and
// replaced by a public (javax) feature in the future.
//
return new JmxMBeanServer(defaultDomain,outer,delegate,interceptors);
|
public static javax.management.MBeanServerDelegate | newMBeanServerDelegate()This method creates a new MBeanServerDelegate for a new MBeanServer.
When creating a new MBeanServer the
{@link javax.management.MBeanServerBuilder} first calls this method
in order to create a new MBeanServerDelegate.
Then it calls
newMBeanServer(defaultDomain,outer,delegate,interceptors)
passing the delegate that should be used by the MBeanServer
implementation.
Note that the passed delegate might not be directly the
MBeanServerDelegate that was returned by this method. It could
be, for instance, a new object wrapping the previously
returned object.
return new MBeanServerDelegateImpl();
|
public java.util.Set | queryMBeans(javax.management.ObjectName name, javax.management.QueryExp query)Gets MBeans controlled by the MBean server. This method allows any
of the following to be obtained: All MBeans, a set of MBeans specified
by pattern matching on the ObjectName and/or a Query
expression, a specific MBean. When the object name is null or no
domain and key properties are specified, all objects are to be
selected (and filtered if a query is specified). It returns the
set of ObjectInstance objects (containing the
ObjectName and the Java Class name) for
the selected MBeans.
return mbsInterceptor.queryMBeans(cloneObjectName(name), query);
|
public java.util.Set | queryNames(javax.management.ObjectName name, javax.management.QueryExp query)Gets the names of MBeans controlled by the MBean server. This method
enables any of the following to be obtained: The names of all MBeans,
the names of a set of MBeans specified by pattern matching on the
ObjectName and/or a Query expression, a specific
MBean name (equivalent to testing whether an MBean is registered).
When the object name is null or or no domain and key properties are
specified, all objects are selected (and filtered if a query is
specified). It returns the set of ObjectNames for the MBeans
selected.
return mbsInterceptor.queryNames(cloneObjectName(name), query);
|
public javax.management.ObjectInstance | registerMBean(java.lang.Object object, javax.management.ObjectName name)Registers a pre-existing object as an MBean with the MBean server.
If the object name given is null, the MBean may automatically
provide its own name by implementing the
{@link javax.management.MBeanRegistration MBeanRegistration} interface.
The call returns an ObjectInstance object representing
the registered MBean.
return mbsInterceptor.registerMBean(object, cloneObjectName(name));
|
public void | removeNotificationListener(javax.management.ObjectName name, javax.management.NotificationListener listener)
mbsInterceptor.removeNotificationListener(cloneObjectName(name),
listener);
|
public void | removeNotificationListener(javax.management.ObjectName name, javax.management.NotificationListener listener, javax.management.NotificationFilter filter, java.lang.Object handback)
mbsInterceptor.removeNotificationListener(cloneObjectName(name),
listener, filter, handback);
|
public void | removeNotificationListener(javax.management.ObjectName name, javax.management.ObjectName listener)
mbsInterceptor.removeNotificationListener(cloneObjectName(name),
listener);
|
public void | removeNotificationListener(javax.management.ObjectName name, javax.management.ObjectName listener, javax.management.NotificationFilter filter, java.lang.Object handback)
mbsInterceptor.removeNotificationListener(cloneObjectName(name),
listener, filter, handback);
|
public void | setAttribute(javax.management.ObjectName name, javax.management.Attribute attribute)Sets the value of a specific attribute of a named MBean. The MBean
is identified by its object name.
mbsInterceptor.setAttribute(cloneObjectName(name),
cloneAttribute(attribute));
|
public javax.management.AttributeList | setAttributes(javax.management.ObjectName name, javax.management.AttributeList attributes)Sets the values of several attributes of a named MBean. The MBean is
identified by its object name.
return mbsInterceptor.setAttributes(cloneObjectName(name),
cloneAttributeList(attributes));
|
public synchronized void | setMBeanServerInterceptor(com.sun.jmx.interceptor.MBeanServerInterceptor interceptor)Set the MBeanServerInterceptor.
if (!interceptorsEnabled) throw new UnsupportedOperationException(
"MBeanServerInterceptors are disabled.");
if (interceptor == null) throw new
IllegalArgumentException("MBeanServerInterceptor is null");
mbsInterceptor = interceptor;
|
private void | trace(java.lang.String clz, java.lang.String func, java.lang.String info)
Trace.send(Trace.LEVEL_TRACE, Trace.INFO_MBEANSERVER, clz, func, info);
|
private void | trace(java.lang.String func, java.lang.String info)
trace(dbgTag, func, info);
|
public void | unregisterMBean(javax.management.ObjectName name)De-registers an MBean from the MBean server. The MBean is identified by
its object name. Once the method has been invoked, the MBean may
no longer be accessed by its object name.
mbsInterceptor.unregisterMBean(cloneObjectName(name));
|