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
  • 1408

Java之——使用JMX监控Tomcat

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

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

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

linux下使用JMX监控tomcat

1、JMX: JMX(Java Management Extensions)Java管理扩展,是一个为应用程序植入管理功能的框架,是一套标准的代理跟服务。总而言之,它可以使得基于java语言开发的程...
  • liuxiao723846
  • liuxiao723846
  • 2015年12月15日 18:06
  • 1967

使用JMX监控Tomcat

1,什么是JMX        JMX是一种JAVA的正式规范,它主要目的是让程序有被管理的功能,那么怎么理解所谓的“被管理”呢?试想你开发了一个软件(如WEB网站),它是在24小时不间断运行的,那...
  • done58
  • done58
  • 2016年04月13日 15:45
  • 638

Tomcat源码分析-JMX(上)

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

JMX在Tomcat中的应用

原文:http://my.oschina.net/itjava/blog/102001 一、JMX简单介绍         Tomcat从5.0版本开始引入,力图使JMX成为Tomcat未来版...
  • Kingson_Wu
  • Kingson_Wu
  • 2015年09月12日 15:25
  • 735

linux操作系统,tomcat如何开启JMX

linux操作系统,tomcat如何开启JMX
  • liang_love_java
  • liang_love_java
  • 2016年01月16日 12:40
  • 3378

Jvisualvm使用JMX和jstatd远程连接主机监测tomcat

使用JMX的配置方式: 在 tomcat 的 catalina.sh 中添加如下参数 Java代码  JAVA_OPTS='-Dcom.sun.management....
  • t227hou
  • t227hou
  • 2014年10月11日 17:52
  • 1518

Tomcat启动解析web.xml源码分析

Tomcat启动解析web.xml源码分析
  • Architect0719
  • Architect0719
  • 2016年12月09日 15:28
  • 1214
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Tomcat源码分析-JMX之Registry类(中)
举报原因:
原因补充:

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