注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

0与1构筑世界,程序员创造时代

软件架构设计 Java编程

 
 
 

日志

 
 

使用jmx-util简单、快速地进行JMX服务开发  

2013-12-19 19:31:54|  分类: JMX |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
四年之前,正在做大型邮件系统的项目,主要负责基础组件的开发和维护,如:线程池、连接池、基于TCP自实现的HTTP长连接。当时,想实时了解生产环境中各个组件的内部运行状态和定时获取状态数据生成报表,从而分析和掌控系统的健康状况趋势,就利用JMX实现了该功能。
从公司离职后,利用空闲时间自己写一些东西,想到了一种更高效的实现JMX服务的方法,几行代码就可以搞定一个JMX服务,也就是现在的jmx-util。

功能

  • 封装普通的Java对象,使之成为符合JMX规范的MBean。
  • 根据指定的接口,暴露方法和属性。
  • 可自定义过滤器,过滤指定的方法和属性。

类关系图

使用jmx-util简单、快速地进行JMX服务开发 - 傲风 - 0与1构筑世界,程序员创造时代
  • IntrospectionMBean。实现了javax.management.DynamicMBean,负责将普通Java对象封装成MBean,它会调用IntrospectionFilter的实现类,过滤属性和方法。
  • IntrospectionFilter。过滤器接口定义,默认实现类有AbstractFilterAttributeFilterMethodFilter。可根据自已的需要继承AbstracFilter类或IntrospectionFilter接口实现属性和方法过滤器。
  • Description。描述注解,可应用于类和方法。

使用说明

1、jmx-util-1.0.0.jar加入项目的classpath

2、编写一个POJO类。源代码

3、编写注册MBean对象的代码。完整的源代码

public class HelloJmx {

    public static void main(String[] args) throws Exception {
        People zhs = new People();
        zhs.setUserName("张三");
        zhs.setAge(16);
        zhs.setSex('M');

        People ls = new People();
        ls.setUserName("李四");
        ls.setAge(18);
        ls.setSex('M');

        MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();

        // 张三使用默认的方法和属性过滤器
        ObjectName zhsObjectName = new ObjectName("cn.aofeng.jmx", "name", "张三");
        Object zhsMBean = new IntrospectionMBean(zhs, People.class);
        mbeanServer.registerMBean(zhsMBean, zhsObjectName);

        // 李四使用自定义的方法和属性过滤器
        IntrospectionFilter attributeFilter = new CustomAttributeFilter();
        IntrospectionFilter methodFilter  = new CustomMethodFilter();
        ObjectName lsObjectName = new ObjectName("cn.aofeng.jmx", "name", "李四");
        Object lsMBean = new IntrospectionMBean(ls, People.class, attributeFilter, methodFilter);
        mbeanServer.registerMBean(lsMBean, lsObjectName);     

        Thread.sleep(1000 * 1000);
    }
}
public static class CustomAttributeFilter extends AttributeFilter {

    public CustomAttributeFilter() {
        super();
        super.filterNames.add("Class");
    }
}
public static class CustomMethodFilter extends MethodFilter {

    public CustomMethodFilter() {
        super();
        super.filterNames.add("equals");
        super.filterNames.add("hashCode");
        super.filterNames.add("toString");
        super.filterNames.add("wait");
        super.filterNames.add("notify");
        super.filterNames.add("notifyAll");
    }
}

4、运行HelloJmx。

5、打开JConsole,选择HelloJmx的进程。

使用jmx-util简单、快速地进行JMX服务开发 - 傲风 - 0与1构筑世界,程序员创造时代

6、点击连接按钮,选择MBean选项卡

使用jmx-util简单、快速地进行JMX服务开发 - 傲风 - 0与1构筑世界,程序员创造时代

下载

binary

source

JMX相关参考资料



<正文结束>

文章声明


作者:傲风(aofengblog@163.com)       编写时间:2013年12月19日

网址:http://aofengblog.blog.163.com

作者保留所有权利,转载请保留文章全部内容或者说明原作者和转载地址!

  评论这张
 
阅读(558)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017