package jp.gr.java_conf.skrb.game.trivia.mserver; import javax.management.Descriptor; import javax.management.MBeanParameterInfo; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectName; import javax.management.InstanceAlreadyExistsException; import javax.management.InstanceNotFoundException; import javax.management.MalformedObjectNameException; import javax.management.MBeanException; import javax.management.MBeanRegistrationException; import javax.management.NotCompliantMBeanException; import javax.management.modelmbean.DescriptorSupport; import javax.management.modelmbean.ModelMBeanAttributeInfo; import javax.management.modelmbean.ModelMBeanConstructorInfo; import javax.management.modelmbean.ModelMBeanInfo; import javax.management.modelmbean.ModelMBeanInfoSupport; import javax.management.modelmbean.ModelMBeanOperationInfo; import javax.management.modelmbean.RequiredModelMBean; import javax.management.modelmbean.InvalidTargetObjectTypeException; import com.sun.jdmk.comm.HtmlAdaptorServer; public class TriviaModelMBeanStarter { static final String TRIVIA_MBEAN_NAME = "MBean:name=TriviaServer"; MBeanServer server; public TriviaModelMBeanStarter() { TriviaServerInstrument instrument = new TriviaServerInstrument(); startAgent(instrument); } public void startAgent(Object managedObject) { System.out.println("MBeanServer の起動"); server = MBeanServerFactory.createMBeanServer(); try { RequiredModelMBean modelmbean = new RequiredModelMBean(createMBeanInfo()); modelmbean.setManagedResource(managedObject, "ObjectReference"); registerMBean(modelmbean, TRIVIA_MBEAN_NAME); } catch (MBeanException ex) { ex.printStackTrace(); System.exit(1); } catch(InstanceNotFoundException ex) { ex.printStackTrace(); System.exit(1); } catch(InvalidTargetObjectTypeException ex) { ex.printStackTrace(); System.exit(1); } System.out.println("HTML protocol adaptor の起動"); HtmlAdaptorServer adaptor = new HtmlAdaptorServer(); registerMBean(adaptor, "Adaptor:name=adaptor,port=8082"); adaptor.start(); } public void registerMBean(Object mbean, String name) { try { ObjectName objectName = new ObjectName(name); server.registerMBean(mbean, objectName); } catch (MalformedObjectNameException ex) { ex.printStackTrace(); System.exit(1); } catch (MBeanRegistrationException ex) { ex.printStackTrace(); System.exit(1); } catch (NotCompliantMBeanException ex) { ex.printStackTrace(); System.exit(1); } catch(InstanceAlreadyExistsException ex) { ex.printStackTrace(); System.exit(1); } } private ModelMBeanInfo createMBeanInfo() { Descriptor description = new DescriptorSupport(new String[] {"name=TotalCount", "descriptorType=attribute", "default=0", "displayName=Total Count", "getMethod=getTotalCount", "setMethod=setTotalCount"}); ModelMBeanAttributeInfo [] attributes = new ModelMBeanAttributeInfo[1]; attributes[0] = new ModelMBeanAttributeInfo("TotalCount", "int", "Total Count", true, true, false, description); ModelMBeanConstructorInfo [] constructors = new ModelMBeanConstructorInfo[1]; constructors[0] = new ModelMBeanConstructorInfo("TriviaServerModel", "constructor for Trivia Server", null); ModelMBeanOperationInfo [] operations = new ModelMBeanOperationInfo[6]; operations[0] = new ModelMBeanOperationInfo("getClientSize", "クライアント数", null, "int", ModelMBeanOperationInfo.INFO); operations[1] = new ModelMBeanOperationInfo("getTotalCount", "トータル カウント", null, "void", ModelMBeanOperationInfo.INFO); MBeanParameterInfo [] parameters = new MBeanParameterInfo[1]; parameters[0] = new MBeanParameterInfo("count", "int", "設定値"); operations[2] = new ModelMBeanOperationInfo("setTotalCount", "Set Total Count", parameters, "void", ModelMBeanOperationInfo.ACTION); operations[3] = new ModelMBeanOperationInfo("getClients","クライアントの一覧", null, "[Ljava.lang.String;", ModelMBeanOperationInfo.INFO); parameters = new MBeanParameterInfo[1]; parameters[0] = new MBeanParameterInfo("name", "java.lang.String", "クライアント名"); operations[4] = new ModelMBeanOperationInfo("getCount","クライアントのカウント", parameters, "int", ModelMBeanOperationInfo.ACTION); operations[5] = new ModelMBeanOperationInfo("reset","リセット", null, "void", ModelMBeanOperationInfo.ACTION); return new ModelMBeanInfoSupport("jp.gr.java_conf.skrb.game.trivia.server.TriviaServerModel", "ModelMBean example", attributes, constructors, operations, null); } public static void main(String[] args) { new TriviaModelMBeanStarter(); } }