当前位置:网站首页>JMX、MBean、MXBean、MBeanServer 入门
JMX、MBean、MXBean、MBeanServer 入门
2022-07-03 09:04:00 【单手入天象】
一、概念
1.JMX
百度百科的解释是:
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
通俗点说:
JMX 是一个 JDK 提供的框架,用来管理检测 Java 程序,提供了对 Java 应用程序和 JVM 的监控和管理功能。
JMX 通过 MBean、MXBean、MBeanServer 来实现对 java 程序的管理
2.MBean
MBean 是一种规范的 JavaBean,他集成和实现一套标准的Bean接口,这种 bean 叫 MBean,Mbean 需要注册到 MBeanServer 中被管理。
用法规范:需要定义一个名字结尾为 MBean 的接口,例如:创建一个 StudentMBean 接口,然后这个接口的实现类的名字必须叫做 Student,这时候这个 Student 的 bean 就是 MBean。
3.MXBean
MXBean 是 MBean 的广义变体,MXBean 与 MBean 的区别主要是在于在接口中会引用到一些自定义类型的类(非原生类型,int、String 等),当 JMX 使用这个 MXBean 时,这个自定义类型的类就会被转换成一种标准的类型,CompositeDataSupport 类。
用法规范:它和 MBean 的用法规范是一样的,只是接口的名字结尾为 MXBean
需要注意的是:如果你的 MXBean 自己定义了带参构造函数(无参构造被覆盖),会报错:
Do not know how to make a JavaFTP.Book from a CompositeData: no method from(CompositeData); no constructor has @ConstructorProperties annotation; does not have a public no-arg constructor; not an interface
解决办法就是:手动添加无参构造函数
4.MBeanServer
MBeanServer 是 JMX 代理层的核心管理者,所有 MBean 都需要向 MBeanServer 注册,所有对 MBean 的操作都是通过 MBeanServer 来执行的。
在 MBeanServer 中,每一个 MBean 都有一个唯一标志 ObjectName 与之绑定。
二、代码例子
1.MBean
定义一个 MBean 接口
public interface StudentMBean {
public int getAge();
public String getName();
public String getEmail();
public void setEmail(String email);
public String sayHello();
}
实现类,也就是 MBean
public class Student implements StudentMBean {
private final int age;
private final String name;
private String email;
public Student(int age, String name, String email) {
this.age = age;
this.name = name;
this.email = email;
}
@Override
public int getAge() {
return age;
}
@Override
public String getName() {
return name;
}
@Override
public String getEmail() {
return email;
}
@Override
public void setEmail(String email) {
this.email = email;
}
@Override
public String sayHello() {
return "hello " + name;
}
}
测试类:
public class MBeanServerTest {
public static void main(String[] args) throws MalformedObjectNameException, NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, InterruptedException {
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName student_objectName = new ObjectName("com.liqiye.jmx.mbean:type=Student");
Student student = new Student(26,"liqiye","[email protected]");
mBeanServer.registerMBean(student, student_objectName);
Thread.sleep(Long.MAX_VALUE);
}
}
运行 main 方法后,打开你 JDK 的 /bin 目录 下的 jconsole.exe
可以看到有 java 程序执行时 JDK 内置的 MBean,还有我们刚才定义的 Student 这个 MBean

2.MXBean
定义一个 MXBean 接口
public interface TeacherMXBean {
public int getAge();
public String getName();
public String getEmail();
public void setEmail(String email);
public String sayHello();
public List<Book> getBook();
public void addBook(Book book);
}
实现类,也就是 MXBean
public class Teacher implements TeacherMXBean {
private final int age;
private final String name;
private String email;
private List<Book> books;
public Teacher(int age, String name, String email) {
this.age = age;
this.name = name;
this.email = email;
this.books = new ArrayList<>();
}
@Override
public int getAge() {
return age;
}
@Override
public String getName() {
return name;
}
@Override
public String getEmail() {
return email;
}
@Override
public void setEmail(String email) {
this.email = email;
}
@Override
public String sayHello() {
return "hello " + name;
}
@Override
public List<Book> getBook() {
return books;
}
@Override
public void addBook(Book book) {
books.add(book);
}
}
测试类:
public class MBeanServerTest {
public static void main(String[] args) throws MalformedObjectNameException, NotCompliantMBeanException, InstanceAlreadyExistsException, MBeanRegistrationException, InterruptedException {
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName("com.liqiye.jmx.mbean:type=Student");
ObjectName teacher_objectName = new ObjectName("com.liqiye.jmx.mxbean:type=Teacher");
Book book = new Book("java书", 30L);
Teacher teacher = new Teacher(27, "小七", "11");
teacher.addBook(book);
mBeanServer.registerMBean(teacher, teacher_objectName);
Thread.sleep(Long.MAX_VALUE);
}
}
jconsole 中能看到 MXBean 中有 Book 这个自定义类的属性,并且能获取到里面的值

总结
欢迎指出我的错误!
边栏推荐
- Jetson Nano 自定义启动图标kernel Logo cboot logo
- Usage of pandas to obtain MySQL data
- UCI and data multiplexing are transmitted on Pusch - determine the bit number of harqack, csi1 and csi2 (Part II)
- LeetCode每日一题(2212. Maximum Points in an Archery Competition)
- 小王叔叔的博客目录【持续更新中】
- The rise and fall of mobile phones in my perspective these 10 years
- 一款开源的Markdown转富文本编辑器的实现原理剖析
- LeetCode每日一题(968. Binary Tree Cameras)
- Make the most basic root file system of Jetson nano and mount NFS file system on the server
- Modify idea code
猜你喜欢

Flink CDC practice (including practical steps and screenshots)

PolyWorks script development learning notes (4) - data import and alignment using file import

How does the nr-prach receiver detect the relationship between prembleid and Ta
![【顺利毕业】[1]-游览 [学生管理信息系统]](/img/91/72cdea3eb3f61315595330d2c9016d.png)
【顺利毕业】[1]-游览 [学生管理信息系统]

Hudi quick experience (including detailed operation steps and screenshots)

LeetCode每日一题(2090. K Radius Subarray Averages)

Flink学习笔记(九)状态编程

Vscode Arduino installation Library

Alibaba cloud notes for the first time

Modify idea code
随机推荐
LeetCode每日一题(968. Binary Tree Cameras)
LeetCode每日一题(2305. Fair Distribution of Cookies)
Epollet lessons
Construction and test of TFTP server under unbuntu (Debian)
LeetCode每日一题(2212. Maximum Points in an Archery Competition)
Word segmentation in full-text indexing
[csdn] C1 analyse des questions de formation Partie III Bar _ JS Foundation
Nodemcu-esp8266 development board to build Arduino ide development environment
Shell logic case
Flink learning notes (IX) status programming
QT qstring:: number apply base conversion
Design and development of biological instruments
CATIA automation object architecture - detailed explanation of application objects (III) systemservice
[CSDN] C1 training problem analysis_ Part III_ JS Foundation
Usage of pandas to obtain MySQL data
The rise and fall of mobile phones in my perspective these 10 years
Difference of EOF
全球KYC服务商ADVANCE.AI 活体检测产品通过ISO国际安全认证 产品能力再上一新台阶
Hudi quick experience (including detailed operation steps and screenshots)
Arduino handles JSON data, arduinojson assistant