JMX(JAVA Management Extensions)技术是java5的新特性,它提供一种简单,标准的方式去管理应用程序,设备,服务等资源。
1什么是JMX
JMS定义了一些设计模式,api和一些服务来进行应用程序和网络的监控,这些都是基于java语言环境的。
使用JMS技术,资源被一种叫做MBeans(Managed Beans)监控,这些MBean都在一个核心对象管理server上注册。叫做MBean server.
2.为什么要使用JMS
JMS给java开发者提供了自由的方式去监控java代码,创建智能java agents,实现分布式管理的中间件和管理者,并且能够快速整合这些方案到的管理和监控系统。
通过一个简单的例子来创建一个JMX agent来管理MBean。
首先创建一个MBean接口:
public interface HelloMBean {
public void sayHello();
public int add(int x,int y);
public String getName();
public void setCacheSize(int size);
public int getCacheSize();
}
根据JMX描述,MBean接口包括一些可读或者可写的属性,还有一些定义好的方法,这些方法能够被MBean管理应用程序调用。
实现类,类名必须为接口sufixMBean的前缀。也就是Hello。如果不按这个命名注册MBean就会有问题。
public class Hello implements HelloMBean {
//可读属性 不可写
private final String name = "gittudou";
private int DEFUALT_CACHE_SIZE = 200;
//可读写属性
private int cacheSize = DEFUALT_CACHE_SIZE;
public void sayHello() {
System.out.print("hello jmx");
}
public int add(int x, int y) {
return x+y;
}
public String getName() {
return this.name;
}
//使用synchronized 同步控制 防止多个线程同时调用set方法
public synchronized void setCacheSize(int size) {
this.cacheSize = size;
System.out.println("Cache size now "+this.cacheSize);
}
public int getCacheSize() {
return this.cacheSize;
}
}
现在一个简单的MBean类写好了。然后需要再MBean server上注册
public class Main {
public static void main(String args[]) throws Exception{
//获取MBeanServer 如果没有MBean server存在那么下面会自动调用ManagementFactory.createMBeanServer()
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
//包名加 类名 创建一个ObjectName
ObjectName name = new ObjectName("git.tudou.manage.jmx.test.essential:type=Hello");
//创建一个Hello实例
Hello mbean = new Hello();
//在MBean server上注册MBean
mBeanServer.registerMBean(mbean,name);
System.out.println("Waiting forever...");
//线程等待 management 操作
Thread.sleep(Long.MAX_VALUE);
}
}
执行这个main方法,接下来我们可以通过JDK提供的一个jconsole去连接这个本地进程。打开MBean,点击Hello
![](https://i-blog.csdnimg.cn/blog_migrate/e948018efde85924f54508faf9f87c75.jpeg)
这是一个简单的MBean,使用jconsole去连接,当然也可以使用RMI进行远程连接MBean server,来进行管理和执行操作。在我的代码中还有几种类型的MBean,比如MXBean,加入notification的MXBean,这里没有提到如何自己连接MBean server,接下来用自己实现的代码连接MBean server.
代码附件