--- CircuitBreaker/src/dk/thoerup/curcuitbreaker/jmx/JMXWrapper.java 2009/10/06 21:23:49 402 +++ CircuitBreaker/src/dk/thoerup/curcuitbreaker/jmx/JMXWrapper.java 2009/10/07 05:06:42 408 @@ -1,17 +1,24 @@ package dk.thoerup.curcuitbreaker.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.curcuitbreaker.*; +import dk.thoerup.curcuitbreaker.AccountingCircuitBreaker; +import dk.thoerup.curcuitbreaker.CircuitBreaker; +import dk.thoerup.curcuitbreaker.CircuitBreakerManager; public class JMXWrapper { static Logger logger = Logger.getLogger(JMXWrapper.class.getName()); + private static Set objectNames = new TreeSet(); + + public static void registerCircuitBreaker(CircuitBreaker cb) { Object jmxBean; String className; @@ -25,18 +32,42 @@ } String name = cb.getName(); + try { - ObjectName beanName = new ObjectName("dk.thoerup.circuitbreaker." + className + ":name=" + name); + 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); } catch (Exception e) { logger.log(Level.SEVERE, "Mbean failure",e ); } + } + + 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 + } + } + } } }