package org.yamcs.yarch.management; import java.lang.management.ManagementFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.yamcs.yarch.Stream; import org.yamcs.yarch.TableDefinition; import javax.management.InstanceAlreadyExistsException; import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; public class JMXService { final MBeanServer mbeanServer; final boolean enabled; static Logger log = LoggerFactory.getLogger(JMXService.class.getName()); final String tld="yarch"; static private JMXService jmxService; static public void setup(boolean enabled) throws NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, MalformedObjectNameException, NullPointerException { jmxService = new JMXService(enabled); } static public JMXService getInstance() { return jmxService; } private JMXService(boolean enabled) throws NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, MalformedObjectNameException, NullPointerException { this.enabled=enabled; if(enabled) mbeanServer=ManagementFactory.getPlatformMBeanServer(); else mbeanServer=null; } public void registerStream(String instance, Stream stream) { if(!enabled)return; StreamControlImpl sci; try { sci = new StreamControlImpl(stream); mbeanServer.registerMBean(sci, ObjectName.getInstance(tld+"."+instance+":type=streams,name="+stream.getName())); } catch (Exception e) { log.warn("Got exception when registering a stream: ", e); } } public void unregisterStream(String instance, String streamName) { if(!enabled)return; try { mbeanServer.unregisterMBean(ObjectName.getInstance(tld+"."+instance+":type=streams,name="+streamName)); } catch (Exception e) { log.warn("Got exception when unregistering a stream: ", e); } } public void registerTable(String instance, TableDefinition table) { if(!enabled)return; try { TableControlImpl tci = new TableControlImpl(table); mbeanServer.registerMBean(tci, ObjectName.getInstance(tld+"."+instance+":type=tables,name="+table.getName())); } catch (Exception e) { log.warn("Got exception when registering a stream: ", e); } } public void unregisterTable(String instance, String tableName) { if(!enabled)return; try { mbeanServer.unregisterMBean(ObjectName.getInstance(tld+"."+instance+":type=tables,name="+tableName)); } catch (Exception e) { log.warn("Got exception when unregistering a stream: ", e); } } }