你的位置:首页 > 软件开发 > Java > Tomcat源码分析——生命周期管理

Tomcat源码分析——生命周期管理

发布时间:2015-10-12 13:00:22
前言  从server.Tomcat生命周期类接口设计  我们先阅读图1,从中了解Tomcat涉及生命周期管理的主要类。图1  Tomcat生命周期类接口设计这里对图1中涉及的主要类作个简单介绍:Lifecycle:定义了容器生命周期、容器状态转换及容器状态迁移事件的**注册和 ...

Tomcat源码分析——生命周期管理

前言

  从server.

Tomcat生命周期类接口设计

  我们先阅读图1,从中了解Tomcat涉及生命周期管理的主要类。

Tomcat源码分析——生命周期管理

图1  Tomcat生命周期类接口设计

这里对图1中涉及的主要类作个简单介绍:

  • Lifecycle:定义了容器生命周期、容器状态转换及容器状态迁移事件的**注册和移除等主要接口;
  • LifecycleBase:作为Lifecycle接口的抽象实现类,运用抽象模板模式将所有容器的生命周期及状态转换衔接起来,此外还提供了生成LifecycleEvent事件的接口;
  • LifecycleSupport:提供有关LifecycleEvent事件的**注册、移除,并且使用经典的**模式,实现事件生成后触打**的实现;
  • MBeanRegistration:Java jmx框架提供的注册MBean的接口,引入此接口是为了便于使用JMX提供的管理功能;
  • LifecycleMBeanBase:Tomcat提供的对MBeanRegistration的抽象实现类,运用抽象模板模式将所有容器统一注册到JMX;

此外,ContainerBase、StandardServer、StandardService、WebappLoader、Connector、StandardContext、StandardEngine、StandardHost、StandardWrapper等容器都继承了LifecycleMBeanBase,因此这些容器都具有了同样的生命周期并可以通过JMX进行管理。

什么是JMX?

  java管理程序扩展(java management extensions,简称JMX),是一个可以为Java应用程序或系统植入远程管理功能的框架。为便于讲解,我从网络上找了一张JMX的架构,如图2所示。

Tomcat源码分析——生命周期管理

图2  JMX架构

这里对图2中三个分层进行介绍:

  • Probe Level:负责资源的检测(获取信息),包含MBeans,通常也叫做Instrumentation Level。MX管理构件(MBean)分为四种形式,分别是标准管理构件(Standard MBean)、动态管理构件(Dynamic MBean)、开放管理构件(Open Mbean)和模型管理构件(Model MBean)。
  • Agent Level:即MBeanServer,是JMX的核心,负责连接Mbeans和应用程序。 
  • Remote Management Level:通过connectors和adaptors来远程操作MBeanServer,常用的控制台,例如JConsole、VisualVM等。

 容器

 Tomcat容器组成

  StandardServer、StandardService、Connector、StandardContext这些容器,彼此之间都有父子关系,每个容器都可能包含零个或者多个子容器,这些子容器可能存在不同类型或者相同类型的多个,如图3所示。

Tomcat源码分析——生命周期管理

图3  Tomcat容器组成

 Tomcat容器状态

  目前,Tomcat的容器具有以下状态:

  • NEW:容器刚刚创建时,即在LifecycleBase实例构造完成时的状态。
  • INITIALIZED:容器初始化完成时的状态。
  • STARTING_PREP:容器启动前的状态。
  • STARTING:容器启动过程中的状态。
  • STARTED:容器启动完成的状态。
  • STOPPING_PREP:容器停止前的状态。
  • STOPPING:容器停止过程中的状态。
  • STOPPED:容器停止完成的状态。
  • DESTROYED:容器销毁后的状态。
  • FAILED:容器启动、停止过程中出现异常的状态。
  • MUST_STOP:此状态未使用。
  • MUST_DESTROY:此状态未使用。

这些状态都定义在枚举类LifecycleState中。

事件与监听

  每个容器由于继承自LifecycleBase,当容器状态发生变化时,都会调用fireLifecycleEvent方法,生成LifecycleEvent,并且交由此容器的事件**处理。LifecycleBase的fireLifecycleEvent方法的实现见代码清单1。

代码清单1

  /**   * Allow sub classes to fire {@link Lifecycle} events.   *   * @param type Event type   * @param data Data associated with event.   */  protected void fireLifecycleEvent(String type, Object data) {    lifecycle.fireLifecycleEvent(type, data);  }

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:Tomcat源码分析——生命周期管理

关键词:tomcat

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录