JMX学习笔记(一)-MBean

JMX学习笔记(一)-MBean

标签: jmxstringjavainterfaceexceptionclass
 分类:
JMX(11) 

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. /**  
  4.  * JMX MBean Interface  
  5.  *   
  6.  * @author haitao.tu  
  7.  *   
  8.  */  
  9. public interface EchoMBean {   
  10.   
  11.     public void print(String yourName);   
  12.   
  13. }  
[java] view plaincopy
  1. package com.haitao.jmx;  
  2.   
  3. /** 
  4.  * JMX MBean Interface 
  5.  *  
  6.  * @author haitao.tu 
  7.  *  
  8.  */  
  9. public interface EchoMBean {  
  10.   
  11.     public void print(String yourName);  
  12.   
  13. }  

 

 

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

 

 

Java代码 复制代码
  1. package com.haitao.jmx;   
  2.   
  3. /**  
  4.  * Implements of JMX EchoMBean  
  5.  *   
  6.  * @author haitao.tu  
  7.  *  
  8.  */  
  9. public class Echo implements EchoMBean {   
  10.   
  11.     @Override  
  12.     public void print(String yourName) {   
  13.         System.out.println("Hi " + yourName + "!");   
  14.     }   
  15.        
  16. }  
[java] view plaincopy
  1. package com.haitao.jmx;  
  2.   
  3. /** 
  4.  * Implements of JMX EchoMBean 
  5.  *  
  6.  * @author haitao.tu 
  7.  * 
  8.  */  
  9. public class Echo implements EchoMBean {  
  10.   
  11.     @Override  
  12.     public void print(String yourName) {  
  13.         System.out.println("Hi " + yourName + "!");  
  14.     }  
  15.       
  16. }  

 


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

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

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

 



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方法。

更详细的内容,我们可以通过JDK自带工具jconsole或者 VisualVM 来查看MBean:

 

1.jconsole

 

jconsole的位置在%JAVA_HOME%/bin/jconsole.exe

 

开后会看到:

 

 

选择com.haitao.jmx.App,然后点击连接, 选择MBean后会看到

 

这里可以直接调用Echo的print方法, 当然大家看到这里边还有好多其他的table,包括概述、内存、线程、类、VM摘要、MBean。

 

 

2.VisualVM

 

VisualVM的位置在%JAVA_HOME%/bin/jvisualvm.exe

 

打开后经过连接我们会看到类似的效果:

 

转载于:https://www.cnblogs.com/developer-ios/p/5775762.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于大脑未必是破解智能和意识之谜的钥匙探讨

来源:刘锋的未来课堂“人脑能创造11维结构”是瑞士的研究机构蓝脑(Blue Brain)的一个研究结论,蓝脑(Blue Brain)研究所主要目标是建立一个由超级计算机驱动的人脑模型。这篇短文主要是由《崛起的超级智能》…

结构化分析和面向对象分析的区别 例子_管理游戏测评例子

在测评中心技术中,有一个非常有趣的场景的模拟测评,打造敏捷高绩效团队,提高执行力(包括人才测评),旨在帮助学生培养自主性,了解自己,以独立的意见做出决策,采取果断的行动;培养赋权…

C++获取多维数组维数

#include <iostream> using namespace std;int main(void) { int a[3][4];cout<<sizeof(a)/sizeof(a[0])<<endl; //3cout<<sizeof(a[0])/sizeof(a[0][0])<<endl; //4return 0; }

python编程购物车_python编写购物车新写法

用另一种方式完成购物车的功能实现#!/usr/bin/pythonzijin input("请输入资金&#xff1a;")if zijin.isdigit():zijin int(zijin)else:print("请输入数字&#xff01;")exit_flag Falseprint("欢迎来到本人的购物小店".center(40,"-&qu…

qtablewidget 选中不改变背景_C4D制作不一样的核壳结构

在科研绘图中&#xff0c;三维模型图相对于二维平面图片可以展示更多的信息&#xff0c;尤其是在做纳米结构设计和制备时&#xff0c;三维模型图可以直观地表现出材料的设计思路和合成路径。比如在这篇发表于Joule杂志的高水平、高颜值、将纳米美学展现的淋漓尽致的paper中(Ref…

Ubuntu学习小结(一) 基础知识,系统安装,软件安装,解压缩

这段时间&#xff0c;抽空研究了一下Ubuntu&#xff0c;虽然也有过到目前为止使用计算机最作死的经历&#xff0c;但目前已经学会了一些最基本的操作。在这里简单的记录一下&#xff0c;算是吸取的教训&#xff0c;供其他人借鉴。 1.装Ubuntu系统。装Ubuntu系统的网上教程很多&…

城科会刘朝晖:从互联网大脑模型看城市大脑

刘朝晖中国城市科学研究会城市大数据专业委员会副主任委员中国生态城市研究院首席科学家按照凯文凯利的观点&#xff0c;技术体和生命体都是一种进化现象。刘锋博士的《崛起中的超级智能》显然秉承了类似的视角&#xff0c;基于哲学高度和宇宙现象对我们这个时代正在爆发的人工…

docker如何部署python项目_Docker如何部署Python项目的实现详解

Docker 是一个开源项目&#xff0c;为开发人员和系统管理员提供了一个开放平台&#xff0c;可以将应用程序构建、打包为一个轻量级容器&#xff0c;并在任何地方运行。Docker 会在软件容器中自动部署应用程序。IBV免费资源网在本篇中&#xff0c;我将介绍如何 docker 化一个 Py…

C++ 最小堆实现

#include <bits/stdc.h> using namespace std; //[4,3,5,2,1] void tiao(vector<int>& v, int node, int leng){int left,right;int Min;while(1){leftnode*21; //左节点rightnode*22; //右节点if(left<leng){ //如果有左节点Minmin(v[node],v[left]); …

java tostring方法_Java虚拟机如执行方法调用的(二)?

虚方法调用Java里所有非私有实例方法调用都会被编译成invokevirtual指令. 接口方法调用都会被编译成invokeinterface指令.这两种指令都属于Java虚方法的调用.在大多数情况下, Java虚拟机需要根据调用者的动态类型, 来确定虚方法调用的目标方法.这个过程被称为动态绑定. 那么相对…

[笔记]cin、cout与scanf、printf的效率差异对比分析

之前上传UVa227 puzzle时&#xff0c;好不容易AC了&#xff0c;但发现自己用时50(ms)&#xff0c;而在VJ上看到人家都是40ms、20ms&#xff0c;于是打开一个20ms的代码查看人家强在哪里。但结果研究了半天感觉差不多&#xff0c;于是想着应该不是算法的问题。然后又想到&#x…

“智联网与未来”——第14届中国信息技术年会院士精彩观点辑录

来源&#xff1a;科技导报编者按 以智慧互联为目标的智联网系统是未来信息网络的发展方向&#xff0c;将引发人类社会向智慧社会的重大变革。在中国电子学会、工业和信息化部电子科学技术委员会等主办的第14届中国信息技术年会上&#xff0c;学者热议“智联网与未来”&#xf…

什么是java的元数据_学习大数据,为什么要先学习Java?

是新朋友吗&#xff1f;记得先点蓝字关注我哦&#xff5e;今日课程菜单Java全栈开发 | Web前端H5大数据开发 | 数据分析人工智能Python | 人工智能物联网来源&#xff1a;小职(z_zhizuobiao)找我&#xff1a;✅ 解锁高薪工作 ✅ 免费获取干货教程未完待续很多人初学的第一门语言…

寻找区间质数

给定一个[left,right]的范围&#xff0c;计算这个区间内的质数的个数 思路&#xff1a;定义一个isPrime数组&#xff0c;其长度为right1&#xff0c;数组的元素为bool型&#xff0c;true代表该位置索引的数字是质数。首先数组初始化为全部true&#xff0c;然后从2开始遍历到sq…

记忆的天空:“崩塌型”记忆活动原理

作者&#xff1a;钟振余宁波大学副教授&#xff0c;工科背景&#xff0c;专注于脑科学神经信息活动机制研究。记忆是大脑活动原理的重要研究内容。相对于现代科学的高速发展&#xff0c;人类对于大脑活动原理的了解仍处在初级阶段。差不多半个多世纪之前&#xff0c;意识灵魂论…

python用途适合做什么生意-PureQuant数字货币量化交易程序化交易python量化开源框架...

什么是量化交易 量化交易起源于上世纪七十年代的股票市场&#xff0c;是指借助现代统计学和数学的方法&#xff0c;利用计算机技术来进行交易的证券投资方式。量化交易从庞大的历史数据中海选能够带来超额收益的多种“大概率”事件以制定策略&#xff0c;用数量模型验证及固化这…

调整数组顺序使奇数位于偶数前面

实现一个函数来调整该数组中数字的顺序&#xff0c;使得所有的奇数位于数组的前半部分&#xff0c;所有的偶数位于数组的后半部分&#xff0c;并保证奇数和奇数&#xff0c;偶数和偶数之间的相对位置不变。 定义两个指针tail和curr&#xff0c;tail指针首先指向第一个偶数&…

python3.5和3.7可以共存吗_centos7下Python和python3共存

一、python3.7.3安装1、下载对应的版本https://www.python.org/downloads/source/2、安装依赖的包 yum install -y gcc zlib* make libffi-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel3、解压下载的文件 tar -zxvf Python-3.7.3.tgzc…

NodeJs系列二:你好,世界

安装nodejs什么是nodejs中的模块hello&#xff0c;world转载于:https://www.cnblogs.com/humaotegong/p/5642025.html

飞天智能:阿里云的 AI 落地野心

来源&#xff1a;大叔爱吐槽CSDN当下&#xff0c;AI 业界不会否认的一个事实是&#xff0c;AI实力的比拼不再是单点的算法技术能力&#xff0c;而是从底层算法到应用平台的全面AI能力。单纯的算法&#xff0c;只是实验室里的乐趣&#xff0c;唯有结合商业的数据处理能力和技术变…