--- CircuitBreaker/src/dk/thoerup/curcuitbreaker/jmx/JMXWrapper.java 2009/10/07 04:29:07 407 +++ 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,6 +32,7 @@ } String name = cb.getName(); + try { ObjectName beanName = new ObjectName("dk.thoerup.circuitbreaker:type=" + className + ",name=" + name); @@ -33,6 +41,7 @@ if (server.isRegistered(beanName)) server.unregisterMBean(beanName); server.registerMBean(jmxBean, beanName); + objectNames.add(beanName); } catch (Exception e) { logger.log(Level.SEVERE, "Mbean failure",e ); @@ -47,4 +56,18 @@ 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 + } + } + } + } }