热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:JMX系列之JmxMBeanServer

本文由编程笔记#小编为大家整理,主要介绍了JMX系列之JmxMBeanServer相关的知识,希望对你有一定的参考价值。我们使用MBeanServer时候通常是下面这样的使用方
本文由编程笔记#小编为大家整理,主要介绍了JMX系列之JmxMBeanServer相关的知识,希望对你有一定的参考价值。


我们使用MBeanServer时候通常是下面这样的使用方式:

MBeanServer server = MBeanServerFactory.createMBeanServer("domain");
最近利用台风“温比亚”路过大连的时候,研究了一下MBeanServer到底是什么鬼?
首先看我整理的UML的类图;

技术分享图片

从下往上看
MBeanServerFactory维护了一个MBeanServerBuilder类型的builder,

MBeanServerFactory的createMBeanServer方法调用自己的newMBeanServer方法,然后调用builder的newMBeanServer方法,
而builder的newMBeanServer直接关联的是JmxMBeanServer.newMBeanServer()方法,此方法内部创建自己的对象,并对维护的三个成员变量赋值操作;

JmxMBeanServer的三个成员变量(图中我只画出了拦截器的关系):
  ① MBeanInstantiator instantiator 实例化工具
    主要负责MBean的实例化
    维护了clr = new ClassLoaderRepositorySupport()的对象,通过clr来管理MBean的类加载器

  ② MBeanServerDelegate mBeanServerDelegateObject 用来监控自己的MBean
  ③ MBeanServer mbsInterceptor 的拦截器
    拦截器→顾名思义我们从上图可以看到JmxMBeanServer和mbsInterceptor都是实现了MBeanServer的接口,mbsInterceptor又是JmxMBeanServer的依赖,
    这样的设计作用是什么呢?源代码我们可以看出,JmxMBeanServer的ObjectInstance createMBean方法,是直接委托mbsInterceptor的ObjectInstance createMBean去工作的。
    mbsInterceptor引用对应的默认实现类:DefaultMBeanServerInterceptor维护了一个Repository类型repository,
    repository算是至关重要的了他维护了一个存放MBean的Map:

      Map> domainTb:
        外层Map的key是域,默认是字符串类型的"domain",通常是被初始化的。里层的Map的key是MBean的name,value当然是我们注册的MBean对象了。

从源代码可以看出JmxMBeanServer其实什么活都没干,就是维护三个小弟干活而已。





















推荐阅读
  • 本文详细介绍了如何使用C#实现不同类型的系统服务账户(如Windows服务、计划任务和IIS应用池)的密码重置方法。 ... [详细]
  • 深入解析C++ Atomic编程中的内存顺序
    在多线程环境中,为了防止多个线程同时修改同一数据导致的竞争条件,通常会使用内核级同步对象,如事件、互斥锁和信号量等。然而,这些方法往往伴随着高昂的上下文切换成本。本文将探讨如何利用C++11中的原子操作和内存顺序来优化多线程编程,减少不必要的开销。 ... [详细]
  • 华为云openEuler环境下的Web应用部署实践
    本文详细记录了在华为云openEuler系统上进行Web应用部署的具体步骤,包括配置yum源、安装Apache、MariaDB、PHP及其相关组件,并完成WordPress的安装与配置过程。 ... [详细]
  • 本文介绍如何通过Java代码调用阿里云短信服务API来实现短信验证码的发送功能,包括必要的依赖添加和关键代码示例。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • 本文探讨了Java中有效停止线程的多种方法,包括使用标志位、中断机制及处理阻塞I/O操作等,旨在帮助开发者避免使用已废弃的危险方法,确保线程安全和程序稳定性。 ... [详细]
  • 本文详细解析 Skynet 的启动流程,包括配置文件的读取、环境变量的设置、主要线程的启动(如 timer、socket、monitor 和 worker 线程),以及消息队列的实现机制。 ... [详细]
  • 本文介绍了一个基本的同步Socket程序,演示了如何实现客户端与服务器之间的简单消息传递。此外,文章还概述了Socket的基本工作流程,并计划在未来探讨同步与异步Socket的区别。 ... [详细]
  • 深入解析Nacos服务自动注册机制
    本文将探讨Nacos服务自动注册的具体实现方法,特别是如何通过Spring事件机制完成服务注册。通过对Nacos源码的详细分析,帮助读者理解其背后的原理。 ... [详细]
  • 本文探讨了如何在Sitecore 9环境中通过Postman使用API密钥发送请求,包括解决常见错误的方法。 ... [详细]
  • 本文是对《敏捷软件开发:原则、模式与实践》一书的深度解析,书中不仅探讨了敏捷方法的核心理念及其应用,还详细介绍了面向对象设计的原则、设计模式的应用技巧及UML的有效使用。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • 本文介绍了基于Java的在线办公工作流系统的毕业设计方案,涵盖了MyBatis框架的应用、源代码分析、调试与部署流程、数据库设计以及相关论文撰写指导。 ... [详细]
author-avatar
LIU在笑_139
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有