| 
                         Background process 
 
    - 后台进程的作用就是处理一下 Servlet 引擎中的周期性事件,处理周期默认是 10s。
 
    - 特别的 StandardHost 的 backgroundProcess() 方法会触发 Host 的 PERIODIC_EVENT 生命周期事件。然后  HostConfig 会调用其 check() 方法对已加载并进行过重新部署的应用程序进行 reload  或对新部署的应用程序进行热部署。热部署跟之前介绍的部署步骤一致, reload() 过程只是简单的顺序调用  setPause(true)、stop()、start()、setPause(false),其中 setPause(true)  的作用是暂时停止接受请求。
 
 
How to read excellent open source projects 
真正的第一次阅读开源项目源代码,收获还是很大的。让我在架构设计、面向对象思想、设计模式、Clean  Code等等各个方面都有了进步。阅读优秀的开源项目其实是一件很爽的事,因为时不时的会发现一个新的设计思路,然后不由自主的感叹一声居然还可以这样!当然了,读的时候还是会有一些痛点的,比如说碰到一个变量,但是死活就是找不到初始化的位置,有时通过  Find Usage  工具可以找到,但有些找不到的只能从头开始再过一边源码。有时碰到一个设计思路死活都想不明白为什么这样设计等等,这种情况就只能通过分析更高一层的架构来解决了等等。 
下面我简单分享一下我是如何阅读开源项目源码的。 
    - 先找一些介绍该项目架构的书籍来看,项目架构是项目核心中的核心,读架构读的是高层次的设计思路,读源码读的是低层次的实现细节。有了高层次的设计思路做指导,源码读起来才会得心应手,因为读的时候心里很清楚现在在读的源码在整个项目架构中处于什么位置。我在读  Tomcat 源码之前先把 《How Tomcat works》 一书过了一边,然后又看了一下 《Tomcat 架构解析》 的第二章,对 Tomcat  的架构有了初步了解。(PS:《How Tomcat works》一书是全英文的,但读起来非常流畅,虽然它是基于 Tomcat 4 和 5 的,但 Tomcat  架构没有非常大的变化,新版的 Tomcat 只是增加了一些组件,如果你要学习 Tomcat 的话,首推这本书!)
 
    - 如果实在找不到讲架构的书,那就自己动手画类图吧!一般来说,开源项目都是为了提供服务的,我们把提供服务的流程作为主线来分析源代码,这样目的性会更强一些,将该流程中涉及到的类画到类图中,最后得到的类图就是架构!不过分析之前你要先找到流程的入口点,否则分析就无从开始。以  Tomcat 为例,他的主线流程大致可以分为 3 个:启动、部署、请求处理。他们的入口点就是 Bootstrap 类和 接受请求的 Acceptor  类!
 
    - 有了阅读思路我们下面来说说工具吧。我使用的阅读工具是 IntelliJ IDEA,一款十分强大的 IDE,可能比较重量级,如果你有其他更加轻量级的  Linux 平台源码阅读工具,可以推荐给我~
 
 
    - Structure  栏目可以自定义列出类中的域、方法,然后还可以按照继承结构对域和方法进行分组,这样就可以直接看出来域和方法是在继承结构中哪个类里定义的。当你点击方法和域时,还可以自动滚动到源代码等等。
 
    - 在源代码中 点击右键 -> Diagrams -> show Diagram  可以显示类的继承结构,图中包含了该类所有的祖先和所有的接口。在该图中选择指定的父类和接口,点击右键 -> show Implementations,  IDEA 会列出接口的实现类或该类的子类。
 
    - FindUsage、Go To Declaration 等等就不再多说了。
 
 
Reference 
《How Tomcat works》 
https://www.amazon.com/How-Tomcat-Works-Budi-Kurniawan/dp/097521280X 
《Tomcat 架构解析》– 刘光瑞 
http://product.dangdang.com/25084132.html 
Tomcat-9.0-doc 
https://tomcat.apache.org/tomcat-9.0-doc/index.html 
apache-tomcat-9.0.0.M22-src 
http://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.0.M22/src/                         (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |