1.jmx是什麼
JMX是Java Management Extensioins的縮寫,功能是對java程序的管理。不太好理解,下面給出一個例子來說明。
2.實例
package swim;
public interface UserMBean {
public void changeName(String name);
public void printName();
}
package swim;
public class User implements UserMBean {
public String name = "default";
@Override
public void changeName(String name) {
this.name = name;
}
@Override
public void printName() {
System.out.println(this.name);
}
}
package swim;
import java.lang.management.ManagementFactory;
import javax.management.InstanceAlreadyExistsException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
public class jmx1_1 {
public static void main(String args[]) {
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
try {
ObjectName name = new ObjectName("swim:type=User");
User uBean = new User();
mbs.registerMBean(uBean, name);
while(true){
System.out.println(mbs.invoke(name, "printName", null, null));
Thread.sleep(5000);
}
} catch (MalformedObjectNameException e) {
e.printStackTrace();
} catch (InstanceAlreadyExistsException e) {
e.printStackTrace();
} catch (MBeanRegistrationException e) {
e.printStackTrace();
} catch (NotCompliantMBeanException e) {
e.printStackTrace();
} catch (InstanceNotFoundException e) {
e.printStackTrace();
} catch (ReflectionException e) {
e.printStackTrace();
} catch (MBeanException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
可以看到對User的操作可以通過MBeanServer 來控制,這個就很強大了啦。進一步來說還可以這樣。運行Jconsole命令。
點擊printName,可以執行程序中的printName函數。試試changeName,可以看到值也變了。是不是厲害了。
3.概念上的東西
一個MBean代表一個被管理對象。這個對象需要暴露一些供讀寫的屬性,以及可以調用的方法。JMX平臺定義了4種MBean,標準、動態、開放、模型。上面的實例是標準型的MBean,這裏給出一個入門級的瞭解,至於其它類型的MBean,請參看http://blog.csdn.net/u013256816/article/details/52800742(從零開始玩轉JMX系列)
本文是在zookeeper代碼閱讀中看到的關於JMX部分代碼後,不瞭解其意義然後瞭解而形成的文章。