org.jolokia.util.JmxUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jolokia-core Show documentation
Show all versions of jolokia-core Show documentation
jar file containing servlet and helper classes
package org.jolokia.util;
import java.io.IOException;
import javax.management.*;
import javax.management.relation.MBeanServerNotificationFilter;
/**
* Utilit class for dealing with JMX's {@link ObjectName}
*
* @author roland
* @since 05.03.13
*/
public final class JmxUtil {
// Utility class with static methods
private JmxUtil() {}
/**
* Factory method for creating a new object name, mapping any checked {@link MalformedObjectNameException} to
* a runtime exception ({@link IllegalArgumentException})
* @param pName name to convert
* @return the created object name
*/
public static ObjectName newObjectName(String pName) {
try {
return new ObjectName(pName);
} catch (MalformedObjectNameException e) {
throw new IllegalArgumentException("Invalid object name " + pName,e);
}
}
/**
* Register a notification listener which listens for registration and deregistration of MBeans at a certain server
*
* @param pServer server to register to
* @param pListener listener to register
* @param pObjectNameToFilter object name which should be listen for. If null, listens for any MBean registration
*/
public static void addMBeanRegistrationListener(MBeanServerConnection pServer, NotificationListener pListener,
ObjectName pObjectNameToFilter) {
MBeanServerNotificationFilter filter = new MBeanServerNotificationFilter();
if (pObjectNameToFilter == null) {
filter.enableAllObjectNames();
} else {
filter.enableObjectName(pObjectNameToFilter);
}
try {
pServer.addNotificationListener(getMBeanServerDelegateName(), pListener, filter, null);
} catch (InstanceNotFoundException e) {
throw new IllegalStateException("Cannot find " + getMBeanServerDelegateName() + " in server " + pServer,e);
} catch (IOException e) {
throw new IllegalStateException("IOException while registering notification listener for " + getMBeanServerDelegateName(),e);
}
}
/**
* Remove a notification listener from the given MBeanServer while listening for MBeanServer registration events
* @param pServer server from where to unregister
* @param pListener listener to unregister
*/
public static void removeMBeanRegistrationListener(MBeanServerConnection pServer,NotificationListener pListener) {
try {
pServer.removeNotificationListener(JmxUtil.getMBeanServerDelegateName(), pListener);
} catch (ListenerNotFoundException e) {
// We silently ignore listeners not found, they might have been deregistered previously
} catch (InstanceNotFoundException e) {
throw new IllegalStateException("Cannot find " + getMBeanServerDelegateName() + " in server " + pServer,e);
} catch (IOException e) {
throw new IllegalStateException("IOException while registering notification listener for " + getMBeanServerDelegateName(),e);
}
}
/**
* Lookup the server delegate name, which works for sure for Java 1.6 but maye not for Java 1.5.
* This method should be removed when dropping Java 1.5 support
* @return the objectname of the MBeanServer delegate present in every MBeanServer
*/
private static ObjectName getMBeanServerDelegateName() {
try {
return MBeanServerDelegate.DELEGATE_NAME;
} catch (NoSuchFieldError error) {
// For Java 1.5 we return the fixed name
return newObjectName("JMImplementation:type=MBeanServerDelegate");
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy