热门标签 | 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其实什么活都没干,就是维护三个小弟干活而已。





















推荐阅读
  • 本文介绍了Python字典视图对象的示例和用法。通过对示例代码的解释,展示了字典视图对象的基本操作和特点。字典视图对象可以通过迭代或转换为列表来获取字典的键或值。同时,字典视图对象也是动态的,可以反映字典的变化。通过学习字典视图对象的用法,可以更好地理解和处理字典数据。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文整理了Java中org.gwtbootstrap3.client.ui.Icon.addDomHandler()方法的一些代码示例,展示了Icon.ad ... [详细]
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社区 版权所有