package jp.gr.java_conf.skrb.game.trivia.mserver; import javax.management.AttributeChangeNotification; import javax.management.ObjectName; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.Notification; import javax.management.NotificationListener; import javax.management.InstanceAlreadyExistsException; import javax.management.InstanceNotFoundException; import javax.management.MalformedObjectNameException; import javax.management.MBeanRegistrationException; import javax.management.NotCompliantMBeanException; import com.sun.jdmk.comm.HtmlAdaptorServer; public class TriviaNotificationMBeanStarter { private MBeanServer server; public TriviaNotificationMBeanStarter() { TriviaServerNotification mbean = new TriviaServerNotification(); startAgent(mbean); } public void startAgent(Object mbean) { System.out.println("MBeanServer の起動"); server = MBeanServerFactory.createMBeanServer(); registerMBean(mbean, "MBean:name=TriviaServer"); System.out.println("HTML protocol adaptor の起動"); HtmlAdaptorServer adaptor = new HtmlAdaptorServer(); registerMBean(adaptor, "Adaptor:name=adaptor,port=8082"); adaptor.start(); initNotificationListener("MBean:name=TriviaServer"); } private 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(); } } private void initNotificationListener(String name) { NotificationListener listener = new NotificationListener() { public void handleNotification(Notification notification, Object handback) { System.out.println("Received notification: " + notification); AttributeChangeNotification attrNotification = (AttributeChangeNotification)notification; System.out.println("Old Value: " + attrNotification.getOldValue()); System.out.println("New Value: " + attrNotification.getNewValue()); } }; try { server.addNotificationListener(new ObjectName(name), listener, null, null); } catch (MalformedObjectNameException ex) { ex.printStackTrace(); } catch(InstanceNotFoundException ex) { ex.printStackTrace(); } } public static void main(String[] args) { new TriviaNotificationMBeanStarter(); } }