package org.limewire.util;
import java.lang.management.ManagementFactory;
import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import org.limewire.logging.Log;
import org.limewire.logging.LogFactory;
/**
* A utility class to register and unregister JMX Beans
*/
public class JmxUtils {
private static final Log LOG = LogFactory.getLog(JmxUtils.class);
private JmxUtils() {}
/**
* Creates and returns a JMX {@link ObjectName} from the given arguments.
*/
public static ObjectName createName(Class<?> clazz, String property)
throws MalformedObjectNameException {
Package pkg = clazz.getPackage();
String type = clazz.getSimpleName();
if (pkg != null) {
return ObjectName.getInstance(pkg.getName()
+ ":type=" + type + ",name=" + property);
}
return ObjectName.getInstance(type + ":name=" + property);
}
/**
* Registers the given JMX Bean
*/
public static boolean add(Class<?> clazz, String property, Object bean) {
try {
return add(createName(clazz, property), bean);
} catch (MalformedObjectNameException e) {
LOG.error("MalformedObjectNameException", e);
}
return false;
}
/**
* Registers the given JMX Bean
*/
public static boolean add(String name, Object bean) {
try {
return add(ObjectName.getInstance(name), bean);
} catch (MalformedObjectNameException e) {
LOG.error("MalformedObjectNameException", e);
}
return false;
}
/**
* Registers the given JMX Bean
*/
public static boolean add(ObjectName name, Object bean) {
Objects.nonNull(name, "name");
Objects.nonNull(bean, "bean");
MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
try {
beanServer.registerMBean(bean, name);
return true;
} catch (InstanceAlreadyExistsException e) {
LOG.error("InstanceAlreadyExistsException", e);
} catch (MBeanRegistrationException e) {
LOG.error("MBeanRegistrationException", e);
} catch (NotCompliantMBeanException e) {
LOG.error("NotCompliantMBeanException", e);
}
return false;
}
/**
* Unregisters the given JMX Bean
*/
public static boolean remove(Class<?> clazz, String property) {
try {
return remove(createName(clazz, property));
} catch (MalformedObjectNameException e) {
LOG.error("MalformedObjectNameException", e);
}
return false;
}
/**
* Unregisters the given JMX Bean
*/
public static boolean remove(String property) {
try {
return remove(ObjectName.getInstance(property));
} catch (MalformedObjectNameException e) {
LOG.error("MalformedObjectNameException", e);
}
return false;
}
/**
* Unregisters the given JMX Bean
*/
public static boolean remove(ObjectName name) {
Objects.nonNull(name, "name");
MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
try {
beanServer.unregisterMBean(name);
return true;
} catch (MBeanRegistrationException e) {
LOG.error("MBeanRegistrationException", e);
} catch (InstanceNotFoundException e) {
LOG.error("InstanceNotFoundException", e);
}
return false;
}
}