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

背景

“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的注册、注销功能,下次本人将继续分析其他真正干活的各个类的情况。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值