Coin163

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

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

相关标签: tomcat 源码

2020腾讯云限时秒杀,爆款1核2G云服务器99元/年!(领取2860元代金券),
地址https://cloud.tencent.com/act/cps/redirect?redirect=1062

2020阿里云最低价产品入口+领取代金券(老用户3折起),
入口地址https://www.aliyun.com/minisite/goods

相关推荐:Tomcat源码分析-JMX(下)

背景 上一节分析了Registry类的功能,其引用management包中所有的类,也就是JDK支持JMX功能的类,本节将继续分析类图的其他部分。 类图分析 JMX的类图截取如下: 分析类图得到几点信息如下: 第一,JmxBeanServer和DefaultMBeanServerInterceptor类,它们都是

背景

“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 源码分析

转载于:http://www.uml.org.cn/j2ee/201306285.asp 一、架构 下面谈谈我对Tomcat架构的理解 总体架构: 1、面向组件架构 2、基于JMX 3、事件侦听 1)面向组件架构 tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成,如Server、Servi

这里写图片描述

最后,从包结构可以看出,上面三个类都是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的注册、注销功能,下次本人将继续分析其他真正干活的各个类的情况。

原文

背景 “Tomcat源码分析-StandardServer类”,这一篇文章的分析中,我们知道StandardServer类的实例被注册到JMX的服务器的过程,是通过Tomcat定义的Registry类完成的,那么这个类又是如何完成JMX

------分隔线----------------------------