package jp.gr.java_conf.skrb.game.trivia.mclient; import java.io.IOException; import java.net.MalformedURLException; import javax.management.Attribute; import javax.management.AttributeList; import javax.management.AttributeNotFoundException; import javax.management.InstanceNotFoundException; import javax.management.IntrospectionException; import javax.management.MBeanAttributeInfo; import javax.management.MBeanException; import javax.management.MBeanInfo; import javax.management.MBeanServerConnection; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.ReflectionException; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import jp.gr.java_conf.skrb.game.trivia.mserver.TriviaMBeanStarter; public class TriviaMBeanRemoteTest2 { public static final String TRIVIA_SERVER_ADDRESS = "service:jmx:rmi:///jndi/rmi://localhost/trivia"; private MBeanServerConnection connection; private ObjectName triviaName; public TriviaMBeanRemoteTest2() { try { JMXServiceURL url = new JMXServiceURL(TRIVIA_SERVER_ADDRESS); JMXConnector connector = JMXConnectorFactory.connect(url, null); connection = connector.getMBeanServerConnection(); triviaName = new ObjectName(TriviaMBeanStarter.TRIVIA_STANDARD_MBEAN_NAME); System.out.println("Attributes:"); showAttributes(); System.out.println("\nAttribute:"); showTotalCount(); } catch (MalformedObjectNameException ex) { ex.printStackTrace(); } catch (MalformedURLException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } private void showAttributes() { try { // すべての属性の名前を取り出す MBeanInfo info = connection.getMBeanInfo(triviaName); MBeanAttributeInfo[] attributes = info.getAttributes(); String[] attributeNames = new String[attributes.length]; for (int i = 0; i < attributes.length; i++) { attributeNames[i] = attributes[i].getName(); } // 属性値の取得 AttributeList attributeList = connection.getAttributes(triviaName, attributeNames); for (int i = 0; i < attributeList.size(); i++) { Attribute attribute = (Attribute)attributeList.get(i); System.out.print(attribute.getName() + " = "); if (attributes[i].getType().startsWith("[")) { // 値が配列の場合 Object[] values = (Object[])attribute.getValue(); System.out.print("["); for (int j = 0; j < values.length - 1 ; j++) { System.out.print(values[j] + ", "); } System.out.println(values[values.length - 1] + "]"); } else { System.out.println(attribute.getValue()); } } } catch (IntrospectionException ex) { ex.printStackTrace(); } catch (ReflectionException ex) { ex.printStackTrace(); } catch (InstanceNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } private void showTotalCount() { try { // 属性値の取得 Object value = connection.getAttribute(triviaName, "TotalCount"); System.out.println("TotalCount = " + value); } catch (AttributeNotFoundException ex) { ex.printStackTrace(); } catch (MBeanException ex) { ex.printStackTrace(); } catch (ReflectionException ex) { ex.printStackTrace(); } catch (InstanceNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } public static void main(String[] args) { new TriviaMBeanRemoteTest2(); } }