论坛首页 入门技术论坛

Java Management Extensions (JMX) 学习笔记

浏览 3595 次
该帖已经被评为新手帖
作者 正文
   发表时间:2012-04-07   最后修改:2012-04-09
不好意思,本人是在写博客的时候选择发布到论坛的,在下不知道写在博客里的文章,后期的更新不会自动同步到论坛。只是在第一次发布的时候发送到论坛。本人绝对不是标题党。还请各位谅解。只希望大家可以自由交流,共同进步。下面我把内容补充完整了。欢迎交流。

在学习Tomcat 7 的源代码的时候发现,大量运用到了JMX, MBeans,所以决定先学习一下。
介绍
JMX是Java 5开始引入的API。这个API意在帮助管理和监控资源: applications, devices, services, and the Java virtual machine. 你可以用JMX API来:
  •     查询和修改应用配置
  •     应用行为统计
  •     状态改变和出错通知

你也可以远程的访问JVM,从而远程管理和监控。
MBean, managed bean,受管的bean
Mbean其实也是一种Java Bean,特别之处就在于它是在管理之下的。所谓受管就是说它提供了读写的API。有四种MBean:standard MBeans, dynamic MBeans, open MBeans and model MBeans. 下面是一个standard MBeans的例子:
先定义接口:
package com.example.mbeans; 
 
public interface HelloMBean { 
 
    public void sayHello(); 
    public int add(int x, int y); 
 
    public String getName(); 
 
    public int getCacheSize(); 
    public void setCacheSize(int size); 
} 

再定义实现:
package com.example.mbeans; 
 
public class Hello implements HelloMBean { 
    public void sayHello() { 
        System.out.println("hello, world"); 
    } 
 
    public int add(int x, int y) { 
        return x + y; 
    } 
 
    public String getName() { 
        return this.name; 
    } 
 
 
    public int getCacheSize() { 
        return this.cacheSize; 
    } 
 
    public synchronized void setCacheSize(int size) { 
        this.cacheSize = size; 
 
        System.out.println("Cache size now " + this.cacheSize); 
    } 
 
    private final String name = "Reginald"; 
    private int cacheSize = DEFAULT_CACHE_SIZE; 
    private static final int DEFAULT_CACHE_SIZE = 200; 
} 

JMX agent, MBean server
MBean是通过注册在JMX agent,也就是 MBean server中,从而被暴露出去而被管理的。
下面是这个agent 的使用实例:
package com.example.mbeans; 
 
import java.lang.management.*; 
import javax.management.*; 
 
public class Main { 
 
   public static void main(String[] args) throws Exception { 
 
      MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
 
      ObjectName name = new ObjectName("com.example.mbeans:type=Hello"); 
 
      Hello mbean = new Hello(); 
 
      mbs.registerMBean(mbean, name); 
 
      System.out.println("Waiting forever..."); 
      Thread.sleep(Long.MAX_VALUE); 
   } 
} 


运行Main类,之后它就等待被访问和修改。你可以用jconsole去尝试查询和修改。



控制台输出:

Waiting forever...
hello, world
Cache size now 300
hello, world



  • 大小: 58.8 KB
   发表时间:2012-04-08  
有标题党嫌疑。
望lz继续补充内容。
0 请登录后投票
   发表时间:2012-04-08  
我已经添加了内容,为什么这里不更新呢?难道有bug?还是我用法不当?
http://jackycheng2007.iteye.com/admin/blogs/1478182
0 请登录后投票
   发表时间:2012-04-08  
JackyCheng2007 写道
我已经添加了内容,为什么这里不更新呢?难道有bug?还是我用法不当?
http://jackycheng2007.iteye.com/admin/blogs/1478182



还是看不到。
是不是你添加内容后没有发布出来啊?
0 请登录后投票
   发表时间:2012-04-08  
caoxudong818 写道
JackyCheng2007 写道
我已经添加了内容,为什么这里不更新呢?难道有bug?还是我用法不当?
http://jackycheng2007.iteye.com/admin/blogs/1478182



还是看不到。
是不是你添加内容后没有发布出来啊?

第一次发布以后,后面再修改都只有一个保存按钮了。你用我给你link也打不开吗?
0 请登录后投票
   发表时间:2012-04-08  
JackyCheng2007 写道
我已经添加了内容,为什么这里不更新呢?难道有bug?还是我用法不当?
http://jackycheng2007.iteye.com/admin/blogs/1478182


你应该是发表博客 自动选择发布到论坛,它们是不同步的,(属于两篇不同的东西)
0 请登录后投票
   发表时间:2012-04-08  
JackyCheng2007 写道
caoxudong818 写道
JackyCheng2007 写道
我已经添加了内容,为什么这里不更新呢?难道有bug?还是我用法不当?
http://jackycheng2007.iteye.com/admin/blogs/1478182



还是看不到。
是不是你添加内容后没有发布出来啊?

第一次发布以后,后面再修改都只有一个保存按钮了。你用我给你link也打不开吗?



用你给的链接会有一个权限错误,然后进入到你的博客列表,在里面可以看到文章内容了。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics