JMX需要很多MBean和很多MXBean。同时也需要一个JMX服务器。
一个MBean代表一个被管理对象。
JMX平台定义了五种MBean。
1 标准
2 动态
3 开放
4 模型
写一个标准MBEAN。
标准MBEAN是有侵入性的,他要管理的对象是符合JAVA BEAN规范的对象。但是要作为标准MBEAN而被管理,就需要实现一个接口。这个接口的名称必须是类名加上MBean。而且
比如我先写一个普通的JAVABean和它对应的MBean接口。
package jmxdemo;
public class User implements UserMBean {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Override
public String getPassword() {
return password;
}
@Override
public void setPassword(String password) {
this.password = password;
}
public int add(int x, int y) {
return x+y;
}
}
package jmxdemo;
public interface UserMBean {
String getUsername();
void setUsername(String username);
String getPassword();
void setPassword(String password);
int add(int x,int y);
}
然后我们写个MAIN函数,注册这个BEAN,然后观察结果。
public class JMXDemo {
public static void main(String[] args) throws MalformedObjectNameException, InstanceAlreadyExistsException,
MBeanRegistrationException, NotCompliantMBeanException, InterruptedException {
MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName objectName = new ObjectName("jmxdemo:type=User");
User user = new User();
beanServer.registerMBean(user, objectName);
String oldusername = null;
String oldpassword = null;
while(true){
if(oldusername!=user.getUsername()||oldpassword!=user.getPassword()){
System.out.println(user.getUsername()+","+user.getPassword());
oldusername = user.getUsername();
oldpassword= user.getPassword();
}
Thread.sleep(1000);
}
}
}
先运行main函数。
然后启动控制台命令。
然后找到我们的MBean。
随后任意修改用户名和密码,敲回车结束,控制台就会打印数据。
这是控制台结果
null,123456
admin,123456
所以JMX的强大之处在于可以任意修改注册的MBEAN对象的属性,任意调用方法。简直逆天,这让我想起金山游侠了。哈哈!