package me.test.first.jmx; import java.lang.management.ManagementFactory; import java.rmi.registry.LocateRegistry; import java.util.Date; import javax.management.MBeanServer; import javax.management.ObjectName; import javax.management.remote.JMXConnectorServer; import javax.management.remote.JMXConnectorServerFactory; import javax.management.remote.JMXServiceURL; // http://docs.oracle.com/javase/1.5.0/docs/guide/management/overview.html // http://docs.oracle.com/javase/tutorial/jmx/mbeans/mxbeans.html // http://docs.oracle.com/javase/tutorial/jmx/index.html // http://baike.soso.com/v7649834.htm // http://weblogs.java.net/blog/emcmanus/archive/2006/11/a_real_example.html // Standard MBeans, DynamicMBean Open MBeans, Model MBeans, MXBeans /** * JMX约定: 1. 接口名一定时 XxxMBean 2. 实现类的名称一定是 Xxx */ public class MyServer implements MyServerMBean { public static void main(String[] args) throws Exception { // start RMI server // or CMD/> rmiregistry 9999 LocateRegistry.createRegistry(9999); // setup MBeanServer MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); MyServer s = new MyServer(); ObjectName objName = new ObjectName("MyServer:type=Hello"); mbs.registerMBean(s, objName); // start JMXConnectorServer JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi"); JMXConnectorServer cs = JMXConnectorServerFactory .newJMXConnectorServer(url, null, mbs); cs.start(); System.out.println("MBeanServer start"); } private Thread t = null; public void start() { stop(); t = new Thread(new Runnable() { public void run() { while (true) { System.out.println("Hello~ " + new Date()); try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("Stopping..."); break; } } } }); t.start(); } public void stop() { if (t != null && t.isAlive()) { t.interrupt(); } } }