package jp.gr.java_conf.skrb.game.trivia.mserver; import java.io.IOException; import java.net.MalformedURLException; import javax.management.InstanceAlreadyExistsException; import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import javax.management.monitor.CounterMonitor; import javax.management.remote.JMXConnectorServer; import javax.management.remote.JMXConnectorServerFactory; import javax.management.remote.JMXServiceURL; public class TriviaMBeanStarter { public static final String TRIVIA_STANDARD_MBEAN_NAME = "MBean:name=TriviaStandard"; public static final String TRIVIA_MONITOR_MBEAN_NAME = "MBean:name=TriviaMonitor"; public static final String TRIVIA_SERVER_ADDRESS = "service:jmx:rmi:///jndi/rmi://localhost/trivia"; MBeanServer server; JMXConnectorServer connector; public TriviaMBeanStarter() { System.out.println("MBeanServer の起動"); server = MBeanServerFactory.createMBeanServer(); startAgent(); try { System.out.println("Connector の起動"); JMXServiceURL url = new JMXServiceURL(TRIVIA_SERVER_ADDRESS); connector = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server); connector.start(); } catch (MalformedURLException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } public void startAgent() { // StandardMBean TriviaServerStandard standard = new TriviaServerStandard(); registerMBean(standard, TRIVIA_STANDARD_MBEAN_NAME); // CounterMonitor try { CounterMonitor counterMonitor = new CounterMonitor(); registerMBean(counterMonitor, TRIVIA_MONITOR_MBEAN_NAME); ObjectName objectName = new ObjectName(TRIVIA_STANDARD_MBEAN_NAME); counterMonitor.addObservedObject(objectName); counterMonitor.setObservedAttribute("TotalCount"); counterMonitor.setNotify(true); counterMonitor.setInitThreshold(20); counterMonitor.setOffset(20); counterMonitor.setGranularityPeriod(100L); counterMonitor.start(); } catch (MalformedObjectNameException ex) { ex.printStackTrace(); } } public void registerMBean(Object mbean, String name) { try { ObjectName objectName = new ObjectName(name); server.registerMBean(mbean, objectName); } catch (MalformedObjectNameException ex) { ex.printStackTrace(); } catch (MBeanRegistrationException ex) { ex.printStackTrace(); } catch (NotCompliantMBeanException ex) { ex.printStackTrace(); } catch(InstanceAlreadyExistsException ex) { ex.printStackTrace(); } } public static void main(String[] args) { new TriviaMBeanStarter(); } }