`

(转)JMX 入门例子

    博客分类:
  • Java
阅读更多

转自:http://rabbit9898.iteye.com/blog/1009198

 

   JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。

 

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

1、初级程序员一般是写死在程序里,到要改变时就去改程序,然后再编译发布;

2、程序熟手则一般把这些信息写在一个配置文件里(JAVA一般都是*.properties文件),
    到要改变时只要改配置文件,但还是重新启动系统,以便读取配置文件里的新值;

3、程序好手则会写一个段代码,把配置值缓存起来,系统在读值的时候,先看看配置文件有
    没有更动。如有更改则重读一遍,否则从缓存里读取值

4、程序高手则懂得取物为我所用,用JMX!把配置属性集中在一个类,然后写一个叫MBean
    的东东,再配置一下就轻松搞定了。而且JMX自动提供了一个WEB页面来给你来改变这些
    配置信息。

 

参考Java提供的例子(需要 jdk1.6):

http://download.oracle.com/javase/6/docs/technotes/guides/jmx/examples.html

 

1. 需要被管理类的接口  HelloMBean.java  (规范一般是***MBean.java)

 

Java代码 复制代码 收藏代码
  1. /* HelloMBean.java - MBean interface describing the management  
  2.    operations and attributes for the Hello World MBean.  In this case  
  3.    there are two operations, "sayHello" and "add", and two attributes,  
  4.    "Name" and "CacheSize". */  
  5.   
  6. package com.example.mbeans;   
  7.   
  8. public interface HelloMBean {   
  9.     // operations   
  10.   
  11.     public void sayHello();   
  12.     public int add(int x, int y);   
  13.   
  14.     // attributes   
  15.   
  16.     // a read-only attribute called Name of type String   
  17.     public String getName();   
  18.   
  19.     // a read-write attribute called CacheSize of type int   
  20.     public int getCacheSize();   
  21.     public void setCacheSize(int size);   
  22. }  
/* HelloMBean.java - MBean interface describing the management
   operations and attributes for the Hello World MBean.  In this case
   there are two operations, "sayHello" and "add", and two attributes,
   "Name" and "CacheSize". */

package com.example.mbeans;

public interface HelloMBean {
    // operations

    public void sayHello();
    public int add(int x, int y);

    // attributes

    // a read-only attribute called Name of type String
    public String getName();

    // a read-write attribute called CacheSize of type int
    public int getCacheSize();
    public void setCacheSize(int size);
}

 

2. 需要管理的类  Hello.java  (通常是实现**MBean.java)

Java代码 复制代码 收藏代码
  1. /* Hello.java - MBean implementation for the Hello World MBean.  
  2.    因篇幅所限,把examples带的注释去掉了,自己可以下载看  */  
  3.   
  4. package com.example.mbeans;   
  5.   
  6. public class Hello implements HelloMBean {   
  7.     public void sayHello() {   
  8.     System.out.println("hello, world");   
  9.     }   
  10.   
  11.     public int add(int x, int y) {   
  12.     return x + y;   
  13.     }   
  14.   
  15.     public String getName() {   
  16.     return this.name;   
  17.     }   
  18.   
  19.      public int getCacheSize() {   
  20.     return this.cacheSize;   
  21.     }   
  22.   
  23.     public synchronized void setCacheSize(int size) {   
  24.     this.cacheSize = size;   
  25.   
  26.     System.out.println("Cache size now " + this.cacheSize);   
  27.     }   
  28.   
  29.     private final String name = "Reginald";   
  30.     private int cacheSize = DEFAULT_CACHE_SIZE;   
  31.     private static final int DEFAULT_CACHE_SIZE = 200;   
  32. }  
/* Hello.java - MBean implementation for the Hello World MBean.
   因篇幅所限,把examples带的注释去掉了,自己可以下载看  */

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;
}

 

 

3. 代理/注册类 Main.java

Java代码 复制代码 收藏代码
  1. package com.example.mbeans;   
  2.   
  3. import java.lang.management.*;   
  4. import javax.management.*;   
  5.   
  6. public class Main {   
  7.     /* For simplicity, we declare "throws Exception".  Real programs  
  8.        will usually want finer-grained exception handling.  */  
  9.     public static void main(String[] args) throws Exception {   
  10.     // Get the Platform MBean Server   
  11.     MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();   
  12.   
  13.     // Construct the ObjectName for the MBean we will register   
  14.     ObjectName name = new ObjectName("com.example.mbeans:type=Hello");   
  15.   
  16.     // Create the Hello World MBean   
  17.     Hello mbean = new Hello();   
  18.   
  19.     // Register the Hello World MBean   
  20.     mbs.registerMBean(mbean, name);   
  21.   
  22.     // Wait forever   
  23.     System.out.println("Waiting forever...");   
  24.     Thread.sleep(Long.MAX_VALUE);   
  25.     }   
  26. }  
package com.example.mbeans;

import java.lang.management.*;
import javax.management.*;

public class Main {
    /* For simplicity, we declare "throws Exception".  Real programs
       will usually want finer-grained exception handling.  */
    public static void main(String[] args) throws Exception {
	// Get the Platform MBean Server
	MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

	// Construct the ObjectName for the MBean we will register
	ObjectName name = new ObjectName("com.example.mbeans:type=Hello");

	// Create the Hello World MBean
	Hello mbean = new Hello();

	// Register the Hello World MBean
	mbs.registerMBean(mbean, name);

	// Wait forever
	System.out.println("Waiting forever...");
	Thread.sleep(Long.MAX_VALUE);
    }
}

 

4. 编译、测试运行上面的程序

 

javac com/example/mbeans/*.java

# 启动程序

java com.example.mbeans.Main

另起一个命令行或者cmd:

运行jconsole  (# JConsole is located in $(J2SE_HOME)/bin/jconsole) 可以看到,选择本地的进程 com.example.mbeans 连接 就可以进行管理了。

 


 

管理界面:

 



 
修改cacheSize 大小,可以在启动Main的命令行窗口看到修改生效。

 


 

分享到:
评论

相关推荐

    spring框架下jmx入门例子

    在spring框架下使用jmx,可以动态修改远程服务端的属性,使用http协议,可以直接通过IE查看运行结果

    jmx入门例子源码 (含jmxtools.jar包)

    jmx入门的源码例子,包括所需jar包,下载后把jmxtools.jar加入classpath中,然后启动程序, 可以在IE中查看mbean,也可以jconsole中查看

    最简单JMX例子

    入门好例子,希望对大家有用,eclipse下导入直接可以运行。

    jmx入门

    一份文档和一个简单的例子,希望对大家有用

    kafka_pepper_box.jmx

    这是一个Jmeter对Kafka压测的小例子,里面使用了pepper-box插件,实现了Kafka的生产者和消费者,对于入门者来说看这个就够了,如有疑问请移步博客:https://blog.csdn.net/shan286/article/details/105216381。

    activeMQ 入门级demo

    首先去...⒉ 有的时候由于端口被占用,导致ActiveMQ错误,ActiveMQ可能需要以下端口1099(JMX),61616(默认的TransportConnector) ⒊ 如果没有物理网卡,或者MS的LoopBackAdpater Multicast会报一个错误

    jmeter-prometheus-plugin:Apache JMeter的Prometheus侦听器,可在http API中公开结果

    这是一个使我们入门的简单示例。 这个例子。 本自述文件的所有文档均来自此jmx文件。 如果我们仔细观察第一个Prometheus监听器,它看起来像下面的图片。 让我们逐一浏览所有列。 名称:指标的名称。 帮助:度量...

    springMongodb参考文档中文版

    执行一个例子 9.7.5。无类型示例 9.8。减少地图操作 9.8.1。使用示例 9.9。脚本操作 9.9.1。使用示例 9.10。集团运营 9.10.1。使用示例 9.11。聚合框架支持 9.11.1。基本概念 9.11.2。支持的聚合操作 9.11.3。投影...

    Hibernate3的帮助文档

    2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 ...

    Hibernate参考文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    hibernate 框架详解

    2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二...

    hibernate3.04中文文档.chm

    2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. ...

    Hibernate教程

    2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 ...

    Hibernate中文详细学习文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    (2.0版本)自己写的struts2+hibernate+spring实例

    common.jar jboss-jmx.jar jboss-system.jar jacc-1_0-fr.jar jgroups-2.2.8.jar oscache-2.1.jar proxool-0.8.3.jar swarmcache-1.0rc2.jar classes12.jar spring.jar ...

    hibernate 体系结构与配置 参考文档(html)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate+中文文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate 中文 html 帮助文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    HibernateAPI中文版.chm

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

Global site tag (gtag.js) - Google Analytics