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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wojiushiwo945you/article/details/73648405

关于rmiregistry的问题

问: 运行RMI应用时,可不可以不手工启动名字服务rmiregistry,而是从程序中启动之? 答: 可以. java.rmi包中提供了类java.rmi.registry.LocateRegistr...
  • cnham
  • cnham
  • 2006-08-16 11:10:00
  • 5337

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

背景“Tomcat源码分析-StandardServer类”,这一篇文章的分析中,我们知道StandardServer类的实例被注册到JMX的服务器的过程,是通过Tomcat定义的Registry类完...
  • wojiushiwo945you
  • wojiushiwo945you
  • 2017-06-23 15:29:09
  • 1195

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

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

Tomcat源码分析-JMX(终)

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

java.rmi.Naming和java.rmi.registry.LocateRegistry的区别

java.rmi.Naming Naming类提供存储和获得“远程对象注册表”上远程对象的引用的方法。 “class provides methods for storing and obtain...
  • xinghun_4
  • xinghun_4
  • 2015-05-16 23:38:04
  • 6621

tomcat7源码分析

tomcat7源码分析本篇分为六个部分: tomcat基本框架 tomcat启动流程简介 tomcat启动流程源码分析 tomcat处理一个请求过程分析 ....
  • mingliangniwo
  • mingliangniwo
  • 2017-01-16 16:21:14
  • 1361

JMX在Tomcat的应用

一、 JMX 简单介绍  Tomcat 从 5.0 版本开始引入 JMX ,力图使 JMX 成为 Tomcat 未来版本的管理工具和平台。首先,让我们来对 JMX 做一个简单了解。 JMX 是 ...
  • u013782203
  • u013782203
  • 2016-05-17 14:26:04
  • 476

spring boot 实际应用(一) 内置tomcat 实现JMX配置

项目需要增加JMX 监控,SO翻了翻官方文档,有几种实现方式,下面说一个我选择的,一是方便扩展,二是方便我底层封装 package com.ecej.nove.autoconfigure...
  • luqiang81191293
  • luqiang81191293
  • 2017-03-08 13:25:47
  • 2159

docker国内镜像拉取和镜像加速registry-mirrors配置修改

拉取docker国内镜像,加速器,修改registry-mirro,找不到/etc/default/dcoker,/etc/sysconfig/docker...
  • u014231523
  • u014231523
  • 2017-03-10 15:28:17
  • 28969

【知识库】--Dubbo ReferenceBean获取-- RegistryProtocol.Refer -- 源码过程(254)

看这里:上一篇文章介绍了ReferenceBean的获取过程,这里介绍如何根据registryUrl和RegistryFactory获取注册器,最终注册中心回调服务消费者暴露的回调接口,来对服务提供者...
  • qfzhangwei
  • qfzhangwei
  • 2017-07-09 09:22:15
  • 383
收藏助手
不良信息举报
您举报文章:Tomcat源码分析-JMX之Registry类(中)
举报原因:
原因补充:

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