`
longgangbai
  • 浏览: 7331480 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

 以前在华为项目使用到JMX全部是同事在jmx配置文件配置的自己根据实例应用,现在有时间,研究一下!

一、JMX简介

  JMX是一种JAVA的正式规范,它主要目的是让程序且有被管理的功能,那么怎么理解所谓的“被管理”呢?试想你开发了一个软件(如WEB网站),它是在24小时不简断运行的,那么你可能会想要“监控”这个软件的运行情况,比如收到了多少数据,有多少人登录等等。或者你又想“配置”这个软件,比如现在访问人数比较多,你想把数据连接池设置得大一些。

  当然,你也许会专门为这些管理来开发软件,但如果你借助JMX,则会发现创建这样的管理程序是如此简单。因为你无需为管理程序来开发界面,已经有通用的JMX管理软件,如MC4J,或者是用一般都附带提供的HTML网页来管理,你要做的仅仅是将自己要被管理和监控类的按照JMX规范修改一下即可。

  中间件软件WebLogic的管理页面就是基于JMX开发的,而JBoss则整个系统都基于JMX构架。下面将JMX的一些概念,从JMX规范转帖如下:

二、JMX构架中的各层及相关的组件

  1. 工具层(Instrumentation Level)
        (a) MBeans(标准的,动态的,开放的和模型MBeans)
        (b) 通知模型:Notification、NotificationListener等类
        (c) MBean元数据类:Attribute、Opreator等类
  2. 代理层(Agent Level)
        (a) MBean Server
        (b) 代理服务。如前一篇的HtmlAdaptorServer等。

 

MBean中有getter和setter的就是属性,如前一篇的Hello类中Name。如果只有getter则表示该属性只读。一共有四种MBean,如下:

  1. 标准MBeans(Standard MBeans)设计和实现是最简单的,这类MBean使用自己的方法名作为管理接口;
  2. 动态MBeans(Dynamic MBeans)必须实现一个指定的接口,由于动态MBeans在运行期间暴露它们的管理接口,因此更为灵活;
  3. 开放MBeans(Open MBeans)属于动态MBeans,这类MBean依靠基础数据类型来实现通用管理,并为友情用户进行自我声明;
  4. 模型MBeans(Model MBeans)同样也是动态MBeans,这类MBeans是完全可配置的,在运行期间进行自我声明;它们为资源动态工具提供一个一般性的,有默认行为的MBeans类。

 

package com.vnvtrip;

/**
 * JMX的标准MBean的接口必须以XxxxMXBean格式名称
 *
 * @author longgangbai
 *
 */
public interface MonitorMXBean {

 public int getStatus();

 public void setStatus(int status);

 public double getNumber();

 public void setNumber(double number);

 public String getUsername();

 public void setUsername(String username);

}

 

 

 

package com.vnvtrip;

/**
 *
 * JMX的实现类的实现JMX的接口类
 *
 * @author longgangbai
 *
 */
public class MonitorCPU implements MonitorMXBean {
 private String username = "xiao66li";
 /**
  * CPU的使用状态
  */
 private int status;
 /**
  * CPU的使用量
  */
 private double number;

 /*
  * (non-Javadoc)
  *
  * @see com.vnvtrip.IMonitorCPU#getStatus()
  */
 public int getStatus() {
  return status;
 }

 /*
  * (non-Javadoc)
  *
  * @see com.vnvtrip.IMonitorCPU#setStatus(int)
  */
 public void setStatus(int status) {
  this.status = status;
 }

 /*
  * (non-Javadoc)
  *
  * @see com.vnvtrip.IMonitorCPU#getNumber()
  */
 public double getNumber() {
  return number;
 }

 /*
  * (non-Javadoc)
  *
  * @see com.vnvtrip.IMonitorCPU#setNumber(double)
  */
 public void setNumber(double number) {
  this.number = number;
 }

 /*
  * (non-Javadoc)
  *
  * @see com.vnvtrip.IMonitorCPU#getUsername()
  */
 public String getUsername() {
  return username;
 }

 /*
  * (non-Javadoc)
  *
  * @see com.vnvtrip.IMonitorCPU#setUsername(java.lang.String)
  */
 public void setUsername(String username) {
  this.username = username;
 }
}

 

package com.vnvtrip;

import javax.management.Attribute;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;

/**
 * JMX的测试类的应用
 *
 * @author longgangbai
 *
 */
public class MonitorCPUAgent {

 public static void main(String args[]) {
  try {
   /**
    * 通过JMX的MBean服务工厂获取JMX的服务
    */
   MBeanServer mbeanserver = MBeanServerFactory.createMBeanServer();
   // 创建一个实例的名称
   ObjectName objectName = new ObjectName("bean:type=MonitorCPU");
   // 创建原始对象
   MonitorMXBean cpu = new MonitorCPU();
   // 注册JMX的MBean对象
   mbeanserver.registerMBean(cpu, objectName);
   Object atrris = mbeanserver.getAttribute(objectName, "Username");
   System.out.println(" username= " + atrris);
   // 设置对象的各种属性(可能在客户端设置)
   mbeanserver.setAttribute(objectName, new Attribute("Username",
     "xiaobai"));
   // 服务端根据实例信息监测是否变化
   atrris = mbeanserver.getAttribute(objectName, "Username")
     .toString();
   System.out.println(" Username= " + atrris);

  } catch (Exception e) {
   e.printStackTrace();
  }

 }
}

 

输出结果如下:

 username= xiao66li
 Username= xiaobai

 

注意如果你的JMX的MXBean命名有问题:发生此类异常:主要原因JMX的MXBean的命名规则不符合标准。

javax.management.NotCompliantMBeanException: MBean class com.vnvtrip.MonitorCPU does not implement DynamicMBean, neither follows the Standard MBean conventions (javax.management.NotCompliantMBeanException: Class com.vnvtrip.MonitorCPU is not a JMX compliant Standard MBean) nor the MXBean conventions (javax.management.NotCompliantMBeanException: com.vnvtrip.MonitorCPU: Class com.vnvtrip.MonitorCPU is not a JMX compliant MXBean)
 at com.sun.jmx.mbeanserver.Introspector.checkCompliance(Introspector.java:160)
 at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:305)
 at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:482)
 at com.vnvtrip.MonitorCPUAgent.main(MonitorCPUAgent.java:27)

分享到:
评论
3 楼 daxiaoli123 2014-05-27  
帅哥你好
请问 我一个系统中在启动初始化的时候 就启动一个jmx服务  这个mbserver中没有任何 mbean  我想动态添加一个mbean   怎么搞啊

这个mbean里面 包含我统计的数据啊
我刚才试下了下  拿到我的mbserver  然后register进去一个  但是在jconsle里面看不到
定远前方(448485223)  19:14:34
有一个是 mbserver.creatembean(“com.....dynaimicmbean”,objname);的 这个说我的这个mbean加载不了啊

两种方法我都用了 一个是regesitermbean  一个是creatembean



请问我怎么动态注册一个mbean进去啊  
2 楼 asialee 2010-03-15  
lz这个是一个model mbean的例子,还有能不能写一下项目中使用MBean的意图呢? 还有lz对MBean的Notification熟悉不,那天请教一下。
1 楼 wuliupo 2010-01-21  
引用
JMX的标准MBean的接口必须以XxxxMXBean格式名称


或者以XxxxMBean格式
类名以MXBean或MBean结尾都可以

相关推荐

    JMX(一)-------MBean server

    总的来说,JMX和MBean Server提供了一种标准、灵活的管理方式,使得Java应用的管理和监控变得更加便捷。通过结合Spring框架,开发者可以更轻松地在应用中集成JMX功能,实现对应用的全方位管理。

    JMX一步一步来,快速学会开发JMX应用

    它提供了一套标准的接口和服务,使得开发者能够轻松地在Java应用中集成管理和监控的能力。JMX的核心概念包括MBeans(Managed Beans)、Servers、Agents以及Connectors,它们共同构成了一个灵活的管理架构。 1. **...

    JMX IN ACTION(四)

    在本章《JMX实战(四)》中,我们将深入探讨最简单的MBean类型:标准MBean。标准MBean适用于具有稳定、已知接口的资源。这一章将介绍如何使用标准MBean来配置应用程序资源(如日志工具和应用属性),以及如何将应用...

    JMX学习,开发文档

    它提供了一种标准的方式来管理和监控应用程序,包括配置、性能和资源管理。JMX允许开发者创建可管理和自描述的组件,称为Managed Beans(MBeans),这些组件可以被操作系统或网络管理系统用来监控和配置。 ### JMX ...

    JMX 在GlassFish中的应用

    AMX在保留JMX原有的优势基础上,增加了更多的面向对象特性和简化了MBean的开发过程,使得在GlassFish环境中管理和监控应用变得更加直观和高效。 #### JMX的基本概念 - **MBeans**:这是JMX的核心组成部分,用来...

    论文研究-JMX技术在网络监控中的应用.pdf

    在当前网络监控的领域中,随着网络技术的快速发展,...借助JBoss等应用服务器的支持,JMX已经成为了网络监控和管理的重要工具之一,它为开发和运维人员提供了丰富的手段来构建、部署和维护高性能的网络监控解决方案。

    jmx 入门文档,附有开发实例文档

    Java Management Extensions(JMX)是Java平台上的一个标准,用于创建和管理应用程序的管理资源,如服务、设备、系统组件等。JMX 提供了一种框架和API来监控和管理运行时的应用程序,使得开发者可以轻松地添加管理...

    JMX实用例子详解(包括各种Mbean)

    Java Management Extensions(JMX)是Java平台上的一个标准管理框架,它允许开发人员创建、注册和管理名为MBeans(Managed Beans)的对象,这些对象代表了系统、应用程序或服务的可管理资源。通过JMX,我们可以远程...

    JMX与Spring 结合

    **JMX(Java Management Extensions)** 是Java平台提供的一种管理和监控的标准框架,它允许开发者对应用程序、设备和服务进行管理,提供了动态发现、监控和管理的能力。JMX 可以帮助我们远程控制应用,查看其运行...

    JMX应用技术架构系统(包括具体开发说明)

    在开发JMX应用时,首先需要定义MBean接口,然后创建实现该接口的类。接着,注册MBean到MBean Server,最后配置连接器以便客户端访问。MX4J的使用通常涉及以下步骤: 1. 添加MX4J依赖到项目。 2. 创建MBean接口和实现...

    JMX开发入门

    1. **Instrumentation层**:定义了MBean开发所需的接口和规范,MBean可以是Java组件或包装其他语言资源的Java Wrapper。 2. **Agent层**:建立在Instrumentation层之上,包含MBeanServer,并提供Adapter和Connector...

    jmx技术介绍(ppt)

    MBean是对任何可管理对象(如Java应用、服务或设备)的抽象,它们可以是Java开发的,或者至少可以通过Java进行包装。MBean具有属性、操作和可发出的通知,使得管理应用程序能够访问和操作这些资源。 **代理层** ...

    网络管理之jmx开发实战

    JMX(Java Management Extensions)是一种标准的Java技术,用于管理和监控应用程序、设备、系统等资源。它提供了多种方式来管理Java应用,包括使用MBeans(Managed Beans)进行远程监控及控制。 #### JMX的开发步骤...

    基于Spring+JMX+Tomcat实现资源动态管理

    Java Management Extensions (JMX) 是Java平台的一个标准API,用于创建、管理和监控各种资源,如Java应用程序、网络设备、操作系统等。JMX提供了一种标准的方式来注册MBeans(Managed Beans),这些MBeans是代表可...

    jmx.rar_jmx

    综上所述,"JMX开发步骤.doc"可能涵盖了JMX的基本概念、MBean的创建与注册、MBeanServer的使用、管理接口设计、连接器配置、安全管理实践以及如何在实际项目中应用JMX等详细内容。这份文档对于学习和理解JMX技术,...

    JMX官方文档 - 概览,入门,规范

    1. JMX API:包括MBean服务器接口、MBean接口、MBean信息类和连接器接口等,供开发人员创建和管理MBeans。 2. jconsole:JDK自带的图形化管理工具,通过JMX连接到目标应用程序,展示性能数据和MBean信息。 3. jinfo...

    jmxri.jar和jmxtools.jar 1.2.1

    Java Management Extensions (JMX) 是Java平台上的一个标准技术,用于管理和监控应用程序、操作系统和网络设备。它提供了统一的接口来管理Java应用,使得开发者能够创建可管理的组件,并通过管理代理(Management ...

Global site tag (gtag.js) - Google Analytics