Tomcat源码分析-JMX之Registry类(中)

原创 2017年06月23日 15:29:09

背景

“Tomcat源码分析-StandardServer类”,这一篇文章的分析中,我们知道StandardServer类的实例被注册到JMX的服务器的过程,是通过Tomcat定义的Registry类完成的,那么这个类又是如何完成JMX相关功能的呢,本文就记录一下本人在源码跟踪过程中的分析结果。

流程回顾

从StandardServer类的initInternal中跟踪到,注册流程最终是通过LifecycleMBeanBase类的initInternal方法完成的,源码为:

protected void initInternal() throws LifecycleException {
    if (oname == null) {
        mserver = Registry.getRegistry(null, null).getMBeanServer();
        oname = register(this, getObjectNameKeyProperties());
    }
}

protected final ObjectName register(Object obj,
            String objectNameKeyProperties) {
 Registry.getRegistry(null, null)
           .registerComponent(obj, on, null);          
}

所以,本文就关注下Registry类。

类图结构

首先,org.apache.tomcat.util.modeler.Registry,Tomcat中源码注释是这样的:

Registry for modeler MBeans.
This is the main entry point into modeler. It provides methods to create
and manipulate model mbeans and simplify their use。
(用于组装ManagedBean实体,它是构建ManagedBean实体的主要入口。它提供的方法用来创建、操控实体,以及简化他们的使用。个人理解:就是Tomcat关联JMX功能的实现类)

其次,我们来看看它的类图吧,结构算不上复杂,但是关联用到了很多javax.management包中的类,分析出来也就弄清楚了JMX底层支持的体系结构了。

类图如下:

这里写图片描述

最后,从包结构可以看出,上面三个类都是Tomcat项目自定义的类,简单的依赖management包中的主要的类,Registry类下面的都是JDK原生的JMX功能支撑类。

Registry类分析

跟踪源码,我们可以得到以下几点信息:
第一,Registry类应用了单例模式,它提供的获取该类实例的方法为getRegistry。

第二,它提供的注册、注销MBean(即 registerComponent和unregisterComponent方法)的功能,是通过委派调用它的成员属性server对象完成的。

第三,它维护了两个集合descriptor和descriptorsByClass,存储所有向它注册的ManagedBean对象。前者以name为key ,后者以class类型为key.

第四,它依赖MBeanServerFactory类来获取MBeanServer实例,而这个类也很简单,它关联了一个所谓的MBeanServerBuilder类,直接调用JmxMBeanServer类的newMBeanServer方法来获取MBeanServer对象。

MBeanServerFactory和MBeanServerBuilder类是如此的简单,且如此的懒,以至于我都感觉它们有点多余的了,为什么不直接在Registry中调用JmxMBeanServer类的newMBeanServer方法来获取MBeanServer对象呢?

结论

总的来说Registry类还是比较简单的,它不过是假JmxMBeanServer之手完成MBean的注册、注销功能,下次本人将继续分析其他真正干活的各个类的情况。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Tomcat7中的JMX使用(二)Dynamic MBean

如上一篇文章所见Standard MBean在Tomcat的例子并不多,在jconsole中所看到的大量MBean(如Catalina下的Connector、Engine、Server、Service...
  • caomiao2006
  • caomiao2006
  • 2016年05月29日 00:52
  • 1405

JMX实现远程服务器Tomcat系统监控之三

JMX对Tomcat远程服务器监控,配置用户名密码,实现如下 1、编辑Tomcat/bin中的catalina.bat。如果配置权限,需要将autenticate设置为true,将1中的下面两行代...
  • fengshizty
  • fengshizty
  • 2014年12月05日 11:47
  • 2675

Java之——使用JMX监控Tomcat

2016年5月的最后一天,今天我将和大家分享Java中如何使用JMX来监控Tomcat的各种状态。好了,不多说了,我们直接进入主题 一、激活Tomcat的JMX远程配置 要通过JMX远程监控Tomca...
  • l1028386804
  • l1028386804
  • 2016年05月31日 17:25
  • 18610

使用Idea 16远程部署调试tomcat

坑啊。。。远程服务器的配置: 1、在远程服务器安装jdk和tomcat2、配置环境变量PATH=PATH:PATH:HOME/binJAVA_HOME=/root/jdk1.8.0_101CATAL...
  • jane1229
  • jane1229
  • 2016年09月01日 17:45
  • 3963

Tomcat源码分析-JMX(终)

背景前几节分析了Tomcat中跟JMX有关的内容,昨天继续分析了JMX的架构图,以及JVM启动JMX的流程,整理出JDK中相关的类图,以巩固对JMX的理解。架构图sun公司定义的JMX架构图,百来的图...
  • wojiushiwo945you
  • wojiushiwo945you
  • 2017年06月27日 11:37
  • 1328

Tomcat源码分析-JMX(上)

背景从LifecycleMBeanBase 类分析那一篇文章中,我们已经知道 Tomcat的所有的组件都实现了JmxEnable接口,并且在初始化过程中通过Registry类注册成为Java Man...
  • wojiushiwo945you
  • wojiushiwo945you
  • 2017年06月22日 18:09
  • 382

tomcat源码解读三(2) tomcat中JMX的源码分析

在这里我是将tomcat中的jmx给拆分出来进行单独分析,希望通过此种方式能够尽可能的出现更多的问题,以便对其有更多的了解,首先需要声明的是tomcat的JMX是在jsvase原有的基础上做了一些复用...
  • qq_32541407
  • qq_32541407
  • 2017年12月02日 21:49
  • 63

Tomcat源码阅读之JMX部分的设计与实现

Tomcat通过读取XML文件中的描述,动态的通过JMX来注册对象,将一些属性以及方法暴露出来,可以很方便的实现对当前Tomcat服务器的监控和管理。。。 本文详细分析了Tomcat实现的这部分的细节...
  • fjs_cloud
  • fjs_cloud
  • 2014年02月28日 16:01
  • 1972

tomcat源码解读三(1) tomcat的jmx管理

JMX即Java 管理扩展(Java Management Extensions,JMX)用来管理检测 Java 程序(同时 JMX 也在 J2EE 1.4 中被发布)它的作用是可以在程序运行的时候对...
  • qq_32541407
  • qq_32541407
  • 2017年12月02日 19:19
  • 43

Distribution源码分析(四):registry push操作详细流程

1. 前言仓库的设计初衷就是为了存储镜像数据并提供上传下载镜像服务的,所以与镜像存储以及镜像数据传输是非常重要的方面。本节中将对镜像存储以及与docker端的数据传输过程做出详细解析。2. 本文分析内...
  • yuanfang_way
  • yuanfang_way
  • 2016年01月17日 17:13
  • 540
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tomcat源码分析-JMX之Registry类(中)
举报原因:
原因补充:

(最多只允许输入30个字)