Tomcat6中jmx对组件进行关联和管理

5 篇文章 0 订阅

1.jmx和Catalina各组件的关联主要是通过StandServer类。

Catalina在启动的时候使用Digester对server.xml文件进行解析生成相应组件,主要是通过org.apache.catalina.core包中的StandServer类建立jmx和各组件之间的关联,StandServer类无参数的构造函数如下代码所示:

 public StandardServer() {

        super();
        ServerFactory.setServer(this);

        globalNamingResources = new NamingResources();
        globalNamingResources.setContainer(this);

        if (isUseNaming()) {
            if (namingContextListener == null) {
                namingContextListener = new NamingContextListener();
                addLifecycleListener(namingContextListener);
            }
        }

    }

红色部分即为关联的主要代码,ServerFactory类很简单,主要是使用单例模式设置和获得Server实例,Server实例一经设置无法更改。

2.jmx模块的分析:

启动jmx是通过建立Server的监听器,可在server.xml文件中看到,如下

  <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html -->
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
ServerLifecycleListener监听Server的各种事件,在监听到Lifecycle.START_EVENT并且是Server发出的话,调用createMBeans()建立我们Server树上存在结点的Mbean。代码如下:
    /**
     * Create the MBeans that correspond to every existing node of our tree.
     */
    protected void createMBeans() {

        try {

            MBeanFactory factory = new MBeanFactory();
            createMBeans(factory);
            createMBeans(ServerFactory.getServer());

        } catch (MBeanException t) {

            Exception e = t.getTargetException();
            if (e == null)
                e = t;
            log.error("createMBeans: MBeanException", e);

        } catch (Throwable t) {

            log.error("createMBeans: Throwable", t);

        }

    }
红色部分代码即获得已建立的Server实例,往红色部分代码的下层分析可看到会建立Server管理的NamingResources和Service的Mbean,在创建他们的Mbean后又会创建它们下属的子结点。在ServerLifecycleListener类里有创建各种Mbean的函数,如下图:


ps:本人初探tomcat源码,好记性不如烂笔头,大家如有问题,可以一起交流学习


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值