Tomcat源码分析:6——Engine容器

6.Engine容器

Tomcat一共有四个容器,Engine是最大的。

Engine是全局的引擎容器,它的标准实现是StandardEngine

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kBYdkhSn-1619271794419)(Tomcat源码分析:6——Engine容器
)]

Engine都包括什么呢?

6.1 Host——组件

Host是Engine的子容器,表示为一个虚拟主机。

6.2 AccessLog—— 访问日志

记录客户端访问记录的。

6.3 Pipeline——管道

Tomcat每个容器都有自己独立的PipeLine,通过PipeLine可以将四个级别的容器连起来。

该图讲解的很明白,来自书《Tomcat内核设计剖析》。

Tomcat源码分析:6——Engine容器

PipeLine的实现类

Tomcat源码分析:6——Engine容器

详解请看后面笔记。

6.4 Cluster——Engine集群

集群:集群通信系统是一种用于集团调度指挥通信的移动通信系统,主要应用在专业移动通信领域。该系统具有的可用信道可为系统的全体用户共用,具有自动选择信道功能,它是共享资源、分担费用、共用信道设备及服务的多用途、高效能的无线调度通信系统。

Tomcat主要有两个集群,Host与Engine。

关于集群参考笔记:(TODO)

6.5 Realm——域

Realm对象就是一个存储了用户、密码及权限等的数据对象,他的存储方式可以是内存、xml、数据库等。作用是配合Tomcat实现资源认证模块。详细内容参见后续笔记。

6.6 LifeCycleListener——生命周期监听器

第一次debug到Engine的生命周期监听器EngineConfig的时候非常疑惑,为什么只做了一件输出Log日志的事?

下面是EngineConfig的lifecycleEvent的实现方法。

@Override
public void lifecycleEvent(LifecycleEvent event) {

    // Identify the engine we are associated with
    try {
        engine = (Engine) event.getLifecycle();
    } catch (ClassCastException e) {
        log.error(sm.getString("engineConfig.cce", event.getLifecycle()), e);
        return;
    }

    // Process the event that has occurred
    if (event.getType().equals(Lifecycle.START_EVENT))
        start();
    else if (event.getType().equals(Lifecycle.STOP_EVENT))
        stop();

}


// -------------------------------------------------------- Protected Methods


/**
 * Process a "start" event for this Engine.
 */
protected void start() {

    if (engine.getLogger().isDebugEnabled())
        engine.getLogger().debug(sm.getString("engineConfig.start"));

}


/**
 * Process a "stop" event for this Engine.
 */
protected void stop() {

    if (engine.getLogger().isDebugEnabled())
        engine.getLogger().debug(sm.getString("engineConfig.stop"));

}

可以看出来这个监听器只是输出了一点日志,仅此而已。

后来才想明白,因为Tomcat只用一个Engine容器,然后这个容器已经在用digester解析server.xml等xml文件的时候建立并初始化了。

6.7 Log——日志

具体内容后续笔记推出

上一篇:super顺序


下一篇:有关并发编程里的Volatile关键字的使用