package jp.gr.java_conf.skrb.game.trivia.mclient; import java.io.IOException; import java.net.MalformedURLException; import java.util.Arrays; import java.util.Set; import javax.management.Attribute; import javax.management.AttributeList; import javax.management.MBeanAttributeInfo; import javax.management.MBeanInfo; import javax.management.MBeanServer; import javax.management.MBeanServerConnection; import javax.management.MBeanServerFactory; import javax.management.ObjectInstance; import javax.management.ObjectName; import javax.management.AttributeNotFoundException; import javax.management.InstanceAlreadyExistsException; import javax.management.InstanceNotFoundException; import javax.management.IntrospectionException; import javax.management.InvalidAttributeValueException; import javax.management.MalformedObjectNameException; import javax.management.MBeanException; import javax.management.MBeanRegistrationException; import javax.management.NotCompliantMBeanException; import javax.management.ReflectionException; import javax.management.remote.JMXServiceURL; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import jp.gr.java_conf.skrb.game.trivia.mserver.TriviaMBeanStarter; public class TriviaMBeanClient implements MBeanClient { public static final String TRIVIA_SERVER_ADDRESS = "service:jmx:rmi:///jndi/rmi://localhost/trivia"; private MBeanServerConnection connection; private ObjectName triviaName; private ObjectName monitorName; public TriviaMBeanClient() { try { JMXServiceURL url = new JMXServiceURL(TRIVIA_SERVER_ADDRESS); JMXConnector connector = JMXConnectorFactory.connect(url, null); connection = connector.getMBeanServerConnection(); initMBeanClientView(); } catch (MalformedURLException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } public void initMBeanClientView() { try { triviaName = new ObjectName(TriviaMBeanStarter.TRIVIA_STANDARD_MBEAN_NAME); Set mbeans = connection.queryMBeans(triviaName, null); if (mbeans.size() != 0) { MBeanInfo info = connection.getMBeanInfo(triviaName); MBeanClientView triviaView = new MBeanClientView(this, triviaName, info); try { connection.addNotificationListener(triviaName, triviaView, null, null); } catch (IllegalArgumentException ex) { // ex.printStackTrace(); } } monitorName = new ObjectName(TriviaMBeanStarter.TRIVIA_MONITOR_MBEAN_NAME); mbeans = connection.queryMBeans(triviaName, null); if (mbeans.size() != 0) { MBeanInfo info = connection.getMBeanInfo(monitorName); MBeanClientView monitorView = new MBeanClientView(this, monitorName, info); try { connection.addNotificationListener(monitorName, monitorView, null, null); } catch (IllegalArgumentException ex) { // ex.printStackTrace(); } } } catch (IntrospectionException ex) { ex.printStackTrace(); } catch (ReflectionException ex) { ex.printStackTrace(); } catch (InstanceNotFoundException ex) { ex.printStackTrace(); } catch (MalformedObjectNameException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } public Object getAttribute(ObjectName name, String attribute) { return null; } public AttributeList getAttributes(ObjectName name, String[] attributes) { try { return connection.getAttributes(name, attributes); } catch (InstanceNotFoundException ex) { ex.printStackTrace(); } catch (ReflectionException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } AttributeList list = new AttributeList(); for (String attrName: attributes) { list.add(new Attribute(attrName, "")); } return list; } public Object invoke(ObjectName name, String operationName, Object[] params, String[] signature) { try { return connection.invoke(name, operationName, params, signature); } catch (InstanceNotFoundException ex) { ex.printStackTrace(); } catch (MBeanException ex) { ex.printStackTrace(); } catch (ReflectionException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } return null; } public void setAttribute(ObjectName name, Attribute attribute) { try { connection.setAttribute(name, attribute); } catch (InstanceNotFoundException ex) { ex.printStackTrace(); } catch (AttributeNotFoundException ex) { ex.printStackTrace(); } catch (InvalidAttributeValueException ex) { ex.printStackTrace(); } catch (MBeanException ex) { ex.printStackTrace(); } catch (ReflectionException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } } public static void main(String[] args) { new TriviaMBeanClient(); } }