一、JMX简介

由于需要解决一个JMX的问题,回顾并总结了一下JMX相关的知识。

 

1. JMX架构

简单来说,JMX的组成以及关系如下:

JMX客户端代码   --->   JMX connector --->   {.........网络........} ---> MBean Server --->  MBean(被调用对象)

其中JMX connector和MBean Server在JDK里面已经提供,我们只需要实现被调用对象,已经调用的代码。而且,在JDK里面已经提供了非常多的MBean,可以直接使用。

 

2. 启用JMX

JMX的用处就是远程监控和管理。最普遍的就是JVM的运行状态的监控。

在我们的系统中,也可以有很多用处,例如,需要对一些运行状态或者参数进行查看或修改,特别是系统调优时,有几种处理方法或算法,可以通过JMX提供方便的修改,可以实时的看到结果。

 

要启用JMX,只需要在java的启动参数里面加上下面的参数

-Dcom.sun.management.jmxremote.port=8888 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

 

如果是tomcat,就用ctalena.sh start -Dcom......  这样就可以。

 

然后就可以运行jconsole,连接到远程的tomcat server。

 

3. MBean类型

在JMX标准中,定义了5中类型的MBean:

 

  • Standard MBeans
  • Dynamic MBeans
  • Open MBeans
  • Model MBeans
  • MXBeans

 

至于各种类型是什么意思,在JDK的tutorial中没有说明,我也懒得找其他资料,我觉得只是使用的话,就只需要知道标准的MBeans和MXBeans就可以。Standard MBeans就是最基础的MBean,通过它可以了解MBea的工作方式,对MBean有一个了解。

如果大家了解远程调用,就应该知道,一般远程的客户端的代码中要包含所要调用对象的存根(stub),也就是要包含远程对象的interface。在使用Standard MBeans时,我们就需要在调用端包含被调用的远程的MBean对象的接口。

 

而在MXBeans类型中,客户端不需要知道远程对象的类型,更不需要包含它的接口,就能够通过一些MXBeans中预定义的集合类型,就能够知道如何调用远程对象,需要的参数以及类型等。

在后面的例子中就可以看到MXBeans和普通MBean的区别。

 

 

3. Standard MBeans

使用这种类型的MBeans,首先,需要定义一个接口,也就是MBean接口,如下:

 

 

 一、JMX简介

  什么是JMX?在一篇网文中是这样说的:"JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架。JMX是一套标准的代理和服务,实际上,用户可以在任何Java应用程序中使用这些代理和服务实现管理",这句话我现在看着还是不知所云,云里雾里。

  我们还是从JMX能给我们提供什么好处入手来理解吧。举一个应用实例:在一个系统中常常会有一些配置信息,比如服务的IP地址,端口号什么的,那么如何来写这些代码呢?

   1. 程序初哥一般是写死在程序里,到要改变时就去改程序,然后再编译发布;
   2. 程序熟手则一般把这些信息写在一个配置文件里(JAVA一般都是*.properties文件),到要改变时只要改配置文件,但还是重新启动系统,以便读取配置文件里的新值;
   3. 程序好手则会写一个段代码,把配置值缓存起来,系统在读值的时候,先看看配置文件有没有更动。如有更改则重读一遍,否则从缓存里读取值
   4. 程序高手则懂得取物为我所用,用JMX!把配置属性集中在一个类,然后写一个叫MBean的东东,再配置一下就轻松搞定了。而且JMX自动提供了一个WEB页面来给你来改变这些配置信息。

二、准备工作


  JMX是一份规范,SUN依据这个规范在JDK(1.3、1.4、5.0)提供了JMX接口。而根据这个接口的实现则有很多种,比如Weblogic的JMX实现、MX4J、JBoss的JMX实现。在SUN自己也实现了一份,不过在JDK1.4之前,这件JMX实现(一些JAR包)是可选的,你得去它的网站上下载。JDK5.0则内嵌了进来,安装JDK5.0就可以开发基于JMX的代码了。
  但JDK5.0并非包含所有SUN的关于JMX的代码,有一些工具类是排除在JDK5.0之外的。下面根据所使用的JDK版本情况,谈一谈开发环境的准备。
1、JDK1.3、1.4
  去SUN网站下载SUN的JMX实现,共两个ZIP文件,下载网址:http://java.sun.com/products/JavaManagement/download.html。
(1)jmx-1_2_1-ri.zip
   解压后的lib目录包含:jmxri.jar、jmxtools.jar
(2)jmx_remote-1_0_1_03-ri.zip
   解压后的lib目录包含:jmxremote.jar、jmxremote_optional.jar、rmissl.jar
  如果在DOS下用命令行开发,则把这五个JAR包加入到classpath系统变量中。如果你用Eclipse开发,则把JAR包加入到项目属性的Libratries(库)引用中。
2、JDK5.0
  JDK5.0的jre\lib\rt.jar已经包含了jmxri.jar、jmxremote.jar、rmissl.jar三个包的代码。如果你用到jmxtools.jar、jmxremote_optional.jar的类,则需要将这两个类加入到classpath或 Eclipse的项目库引用中。
3、我使用的开发环境:JDK5.0 + Eclipse3.2。
  注:因为用到jmxtools.jar中的HtmlAdaptorServer类,所以将此包加入到项目库引用中。jmxremote_optional.jar暂时不用到,不管它。


 

 

http://mavlarn.iteye.com/blog/1485677

 

你可能感兴趣的:(jmx)