package com.rubiconproject.oss.kv; import java.io.IOException; import javax.management.InstanceAlreadyExistsException; import javax.management.MBeanServer; import javax.management.ObjectName; import com.rubiconproject.oss.kv.mgmt.BaseKeyValueStoreImplMXBean; import com.rubiconproject.oss.kv.mgmt.JMXMbeanServerFactory; public abstract class BaseManagedKeyValueStore extends BaseKeyValueStore implements ManagedKeyValueStore { public BaseManagedKeyValueStore() { initJMXBean(); } public void finalize() throws Throwable { destroyJMXBean(); super.finalize(); } public void start() throws IOException { super.start(); } public void stop() { super.stop(); } public String getMXBeanObjectName() { return String .format( "OthersOnline:entity=KeyValueStore,class=%1$s,identifier=%2$s,id=%3$d", getClass().getName(), getIdentifier(), System .identityHashCode(this)); } public Object getMXBean() { return new BaseKeyValueStoreImplMXBean(this); } protected void initJMXBean() { Object mxbean = getMXBean(); MBeanServer mbeanServer = JMXMbeanServerFactory.getMBeanServer(); String name = getMXBeanObjectName(); try { ObjectName objectName = new ObjectName(name); mbeanServer.registerMBean(mxbean, objectName); } catch (InstanceAlreadyExistsException e) { try { ObjectName objectName = new ObjectName(name); mbeanServer.unregisterMBean(objectName); mbeanServer.registerMBean(mxbean, objectName); } catch (Exception e1) { } } catch (Exception e) { e.printStackTrace(); } } protected void destroyJMXBean() { MBeanServer mbeanServer = JMXMbeanServerFactory.getMBeanServer(); String name = getMXBeanObjectName(); try { ObjectName objectName = new ObjectName(name); mbeanServer.unregisterMBean(objectName); } catch (Exception e) { e.printStackTrace(); } } }