`

(转)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应用。 首先,JMX是一种Java标准,它允许开发者创建可管理的Java组件,并提供了一种统一的方式来管理和监控这些组件。在Spring中,我们可以利用JMX来创建MBeans(Managed Beans...

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

    总结一下,这个JMX入门例子展示了如何创建一个简单的MBean,将其注册到MBean服务器,并通过`jconsole`进行交互。了解JMX对于任何需要管理和监控Java应用的开发者来说都是一项重要技能,它提供了强大的灵活性和可扩展...

    jmx入门

    在这个入门指南中,我们将深入探讨JMX的核心概念、API以及如何通过一个简单的示例来理解它的应用。 **一、JMX核心概念** 1. **MBean(Managed Beans)**:MBean是JMX中的核心组件,代表了可管理的资源。它可以是...

    webservice入门教程(含例子源码)

    5. **发布Web服务**:使用XFire的API,将服务部署到一个Servlet容器,如Tomcat,或者直接通过JMX发布。发布的服务可以通过WSDL文件进行描述,供客户端调用。 6. **消费Web服务**:客户端可以使用XFire提供的客户端...

    hession入门例子

    本入门例子将引导你了解如何使用Hession进行服务端和客户端的开发。首先,我们从服务端开始。 1. **服务端实现** - 创建服务接口:定义你需要对外提供的服务方法,例如`IService`接口,包含一个`sayHello`方法。 ...

    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会报一个错误

    Xdoclet入门教程

    除了 Hibernate 支持,Xdoclet 还可以生成 EJB、JMS、JMX 等多种 Java EE 相关的配置文件。只需在 Java 类中添加相应的注释,Xdoclet 就会自动生成相应的部署描述符。 ### 总结 Xdoclet 是一种强大的工具,它通过 ...

    HelloWorldService:HelloWorldService是MBean服务的简单示例

    总的来说,`HelloWorldService`是一个入门级的JMX和MBean教程,它可以帮助开发者快速掌握JMX的核心概念,为进一步探索更复杂的Java应用程序管理打下基础。通过阅读和实践这个示例,你可以深入了解Java的管理功能,并...

    HIBERNATE - 符合Java习惯的关系数据库持久化.docx

    1. **Hibernate入门** - **前言**:这部分介绍了Hibernate的基本概念和目标,以及它如何简化Java应用程序的数据库交互。 - **第一个Hibernate应用程序**:涵盖创建基本的Java类、映射文件、配置文件、构建过程、...

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

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

    Spring4,中文版

    6. **与其他开源技术的集成**:Spring框架可以轻松集成其他流行的技术,如 Quartz 定时任务、Quartz Spring、JMS、JMX等,为开发者提供了一站式的解决方案。 在《Spring4 中文版》这份文档中,你将深入了解到如何...

    hibernate中文官方文档3.6

    - **描述**:“这是Hibernate的中文官方文档,是最新的版本Hibernate 3.6,适合作为Hibernate使用者的参考手册和入门帮助文档。”这句话进一步明确了文档的内容为Hibernate 3.6版本的官方指南,适合新用户作为学习...

    hibernate3.6.7中文参考手册

    - **JMX 整合**:探讨如何使用 JMX 监控和管理 Hibernate 实例。 - **上下文相关的会话**:解释如何在不同的应用上下文中管理和使用 Hibernate Session。 ### 3. 配置 - **可编程的配置方式**:介绍如何使用 Java ...

    Hibernate手册

    - **JMX整合**:描述如何通过JMX监控和管理Hibernate运行时的行为。 - **对JCA的支持**:解释Hibernate如何集成企业级的资源适配器。 - **上下文相关的会话**:介绍如何在Web应用中管理会话的上下文。 #### 配置 -...

Global site tag (gtag.js) - Google Analytics