package dk.thoerup.circuitbreaker.jmx; import java.lang.management.ManagementFactory; import java.util.Set; import java.util.TreeSet; import java.util.logging.Level; import java.util.logging.Logger; import javax.management.MBeanServer; import javax.management.ObjectName; import dk.thoerup.circuitbreaker.CircuitBreaker; import dk.thoerup.circuitbreaker.CircuitBreakerManager; public class JMXWrapper { static Logger logger = Logger.getLogger(JMXWrapper.class.getName()); private static Set objectNames = new TreeSet(); public static ObjectName registerCircuitBreaker(CircuitBreaker cb) { Object jmxBean; String className; jmxBean = new JmxCircuitBreaker(cb); className = "CircuitBreaker"; String name = cb.getName(); try { ObjectName beanName = new ObjectName("dk.thoerup.circuitbreaker:type=" + className + ",name=" + name); MBeanServer server = ManagementFactory.getPlatformMBeanServer(); if (server.isRegistered(beanName)) server.unregisterMBean(beanName); server.registerMBean(jmxBean, beanName); objectNames.add(beanName); return beanName; } catch (Exception e) { logger.log(Level.SEVERE, "Mbean failure",e ); return null; } } public static void registerAllCircuitBreakers() { CircuitBreakerManager mgr = CircuitBreakerManager.getManager(); for (String cbName : mgr.getCircuitBreakerNames()) { CircuitBreaker cb = mgr.getCircuitBreaker(cbName); registerCircuitBreaker(cb); } } public static void unregisterAllCircuitBreakers() { MBeanServer server = ManagementFactory.getPlatformMBeanServer(); for (ObjectName objName : objectNames) { if (server.isRegistered(objName)) { try { server.unregisterMBean(objName); } catch (Exception e) { //At this point we don't care why it wasn't in the system - all that matter is that it's gone } } } } }