jmx之MBean入门
JMX是一个Java的管理工具,可以实现的功能主要是对Java程序的管理。
JMX需要很多MBean和很多MXBean。同时也需要一个JMX服务器。
一个MBean代表一个被管理对象。这个对象需要暴露一些供读写的属性,以及可以调用的方法。
下面介绍下MBean,分为4种:标准、动态、开放、模型。
简单介绍下标准MBean程序:
标准MBEAN是有侵入性的,他要管理的对象是符合JAVA BEAN规范的对象。但是要作为标准MBEAN而被管理,就需要实现一个接口。这个接口的名称必须是类名加上MBean。
UserMBean.java(MBEAN接口):
package jmx;
public interface UserMBean {String getName();
void SetName(String name);
String getPasswd();
void SetPasswd(String pwd);
int add(int x, int y);
}
User.java(JAVA Bean):
package jmx;
public class User implements UserMBean{
private String name;
private String passwd;
@Override
public String getName() {
return name;
}
@Override
public void SetName(String name) {
this.name=name;
}
@Override
public String getPasswd() {
return passwd;
}
@Override
public void SetPasswd(String pwd) {
this.passwd=pwd;
}
@Override
public int add(int x, int y) {
return x+y;
}
}
JMXdemo.java(main方法):
package jmx;
import java.lang.management.ManagementFactory;
import javax.management.InstanceAlreadyExistsException;
import javax.management.MBeanRegistrationException;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.NotCompliantMBeanException;
import javax.management.ObjectName;
public class JMXdemo {
/**
* @param args
* @throws NullPointerException
* @throws MalformedObjectNameException
* @throws NotCompliantMBeanException
* @throws MBeanRegistrationException
* @throws InstanceAlreadyExistsException
* @throws InterruptedException
*/
public static void main(String[] args) throws MalformedObjectNameException, NullPointerException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException, InterruptedException {
MBeanServer server=ManagementFactory.getPlatformMBeanServer();
ObjectName objectName=new ObjectName("jmx:type=User");
User bean=new User();
server.registerMBean(bean, objectName);
String oldName=null;
String oldPwd=null;
System.out.println("jmx started!!!");
while(true){
if(oldName!=bean.getName()|| oldPwd !=bean.getPasswd()){
System.out.println(bean.getName()+":"+bean.getPasswd());
oldName=bean.getName();
oldPwd=bean.getPasswd();
}
Thread.sleep(1000);
}
}
}
运行main方法:
注意:在vm arguments中添加“-Dcom.sun.management.jmxremote"
启动jconsole,到java家目录的bin下,双击jconsole.exe
如上图红框双击进入即可,
你可以通过操作的方法修改属性值,同时也可以在控制台上看到输出,刷新属性也可以看到。
通过操作可以看到如下
null:ww
root:ww
root:root