JMX学习笔记(一)-MBean

来源:http://blog.csdn.net/qiao000_000/article/details/6061808

JMX        即 Java Management Extensions   Java管理扩展
MBean   即 managed beans                         被管理的Beans

一个MBean是一个被管理的Java对象,有点类似于JavaBean,一个设备、一个应用或者任何资源都可以被表示为MBean,MBean会暴露一个接口对外,这个接口可以读取或者写入一些对象中的属性,通常一个MBean需要定义一个接口,以MBean结尾, 例如: EchoMBean, 格式为XXXMBean,这个是规范,必须得遵守。例如:

Java代码 

  1. package com.haitao.jmx;
  2. /**
  3. * JMX MBean Interface
  4. *
  5. * @author haitao.tu
  6. *
  7. */
  8. public interface EchoMBean {
  9. public void print(String yourName);
  10. }

很简单的,在EchoMBean接口中,定义了一个print方法,带一个yourName的String类型参数,只有接口貌似没什么用,下边我们实现这个接口

Java代码 

  1. package com.haitao.jmx;
  2. /**
  3. * Implements of JMX EchoMBean
  4. *
  5. * @author haitao.tu
  6. *
  7. */
  8. public class Echo implements EchoMBean {
  9. @Override
  10. public void print(String yourName) {
  11. System.out.println("Hi " + yourName + "!");
  12. }
  13. }

Echo实现了EchoMBean接口,很简单我们只是print了hi yourName!

按照JMX的定义,是被管理的对象,现在我们只是定义了该对象,并没有被管理,接着我们让这个Echo类的实例对象被管理起来:

Java代码 

  1. package com.haitao.jmx;
  2. import java.lang.management.ManagementFactory;
  3. import javax.management.MBeanServer;
  4. import javax.management.ObjectName;
  5. /**
  6. * JMX App Demo
  7. *
  8. * @author haitao.tu
  9. */
  10. public class App {
  11. public static void main(String[] args) throws Exception {
  12. // 创建MBeanServer
  13. MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
  14. // 新建MBean ObjectName, 在MBeanServer里标识注册的MBean
  15. ObjectName name = new ObjectName("com.haitao.jmx:type=Echo");
  16. // 创建MBean
  17. Echo mbean = new Echo();
  18. // 在MBeanServer里注册MBean, 标识为ObjectName(com.tenpay.jmx:type=Echo)
  19. mbs.registerMBean(mbean, name);
  20. // 在MBeanServer里调用已注册的EchoMBean的print方法
  21. mbs.invoke(name, "print", new Object[] { "haitao.tu"}, new String[] {"java.lang.String"});
  22. Thread.sleep(Long.MAX_VALUE);
  23. }
  24. }

1. 首先我们在App类中向ManagementFactory申请了一个MBeanServer对象
2. 接着我们即然要使Echo的实例对象被管理起来,我们就需要给这个对象一个标识,这个标识是ObjectName.注意这个ObjectName构造函数,这里使用了(包名:type=类名)的形式.
3. 然后我们通过mbs.registerMBean方法注册了echo,并传入了ObjectName在MBeanServer中标识该MBean.
4. 随后我们通过mbs.invoke方法调用了已经注册的Echo的print方法,通过ObjectName找到该MBean, 并通过最后两个参数,传入print方法执行的参数,与参数的类型。
5. 最后我们sleep主线程,等待其他线程的调用.

通过这个例子我们可以看出,MBean的好处,在Echo的实例对象未被管理之前,我们只能通过Echo对象的句柄,来调用Echo里的public方法,在被管理之后,我们可以通过MBeanServer的句柄mbs来调用Echo对象的print方法。

时间: 2024-08-03 23:24:47

JMX学习笔记(一)-MBean的相关文章

Spring Batch学习笔记二

此系列博客皆为学习Spring Batch时的一些笔记: Spring Batch的架构 一个Batch Job是指一系列有序的Step的集合,它们作为预定义流程的一部分而被执行: Step代表一个自定义的工作单元,它是Job的主要构件块:每一个Step由三部分组成:ItemReader.ItemProcessor.ItemWriter:这三个部分将执行在每一条被处理的记录上,ItemReader读取每一条记录,然后传递给ItemProcessor处理,最后交给ItemWriter做持久化:It

Docker 学习笔记【2】 Docker 基础操作实,Docker仓库、数据卷,网络基础学习

Docker 学习笔记[3] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,实操 网络基础  ---------高级网络配置和部分实战案例学习 ============================================================= Docker 学习笔记[1]Docker 相关概念,基本操作--------实操记录开始 ============================================================= 被

springmvc学习笔记---idea创建springmvc项目

前言: 真的是很久没搞java的web服务开发了, 最近一次搞还是读研的时候, 想来感慨万千. 英雄没落, Eclipse的盟主地位隐隐然有被IntelliJ IDEA超越的趋势. Spring从2.x到现在4.x, 一眨眼已是二代的积淀. 本文想借助Idea, 来简单搭建一个基于springmvc的web程序, 一为体验, 二为技术积累. 环境配置: idea版本为14.0.2, tomcat版本为8.0.23, idea创建的springmvc为4.1.1.RELEASE. 网上有很多图文并

Spring3.0官网文档学习笔记(一)

Part 1 Spring框架概述 Spring是模块化的,在应用中只需要引入你所需要用到的模块的jar包,其余的jar包不用引入. spring框架支持声明式的事务管理,通过RMI或web service访问你的逻辑,还有许多种方式保存数据. spring被设计成非侵入式的. 1.Spring框架简介 Spring框架提供了应用开发的基础部分,使得我们可以集中精神在业务开发层上. POJOS:plain old Java objects Spring允许创建非侵入式的POJO.这个特性支持Ja

Hadoop学习笔记(二)——zookeeper使用和分析

分布式架构是中心化的设计,就是一个主控机连接多个处理节点,因此保证主控机高可用性十分关键.分布式锁是解决该问题的较好方案,多主控机抢一把锁.Zookeeper就是一套分布式锁管理系统,用于高可靠的维护元数据. 一.应用 1.集群模式 集群模式下配置多个Zookeeper节点,启动Zookeeper集群,Zookeeper会根据配置投票选举一个节点获得分布式锁. 关键配置举例: # The Cluster servers #server.1=192.168.1.10:2887:3887 #serv

spring学习笔记(一) Spring概述

博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书.  强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring的优势在哪里?怎么系统的学习Spring? 一.什么是Spring? Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发. 那有人就会问了,Spring是如何简化开发的? 在传统开发中,一个应用是需

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu

jQuery学习笔记(一):入门

jQuery学习笔记(一):入门 一.JQuery是什么 JQuery是什么?始终是萦绕在我心中的一个问题: 借鉴网上同学们的总结,可以从以下几个方面观察. 不使用JQuery时获取DOM文本的操作如下: 1 document.getElementById('info').value = 'Hello World!'; 使用JQuery时获取DOM文本操作如下: 1 $('#info').val('Hello World!'); 嗯,可以看出,使用JQuery的优势之一是可以使代码更加简练,使开