tomcat启动(四)Catalina分析-server的init()方法
上一回load()方法解析讲到xml解析完成。
load()内部接下来会获取server
getServer().setCatalina(this);
这个server从createStartDigester()方法中可以看出getServer()返回的是StandardServer对象
具体请看:
Catalina.createDigester方法详细理解
1、接着执行Server.init方法
getServer().init();
看StandardServer类的关系
public final class StandardServer extends LifecycleMBeanBase implements Server
ζ
﹀
public abstract class LifecycleMBeanBase extends LifecycleBase
ζ
﹀
public abstract class LifecycleBase implements Lifecycle
Lifecycle.init()方法解释
准备组件启动。此方法应执行任何初始化所需的后期对象创建。
以下生命周期事件将按以下顺序触发:
- INIT_EVENT: On the successful completion of component initialization成功完成组件初始化
2、由LifecycleBase重写其init()方法,方法里主要调用initInternal方法。这个方法是抽象方法
initInternal();
3、LifecycleMBeanBase重写initInternal()方法
@Override
protected void initInternal() throws LifecycleException { // If oname is not null then registration has already happened via
// preRegister().
if (oname == null) {
mserver = Registry.getRegistry(null, null).getMBeanServer();
获取注册表,返回MBeanServerinstance实例 oname = register(this, getObjectNameKeyProperties());
}
}
register(this, getObjectNameKeyProperties());
这个方法使子类轻松地注册。不使用MBeanServer实现JmxEnabled的其他组件。
注意:只有在initInternal()被调用之后才能使用此方法,并且在调用destroyInternal()之前。
这个方法将Component实例注册到LifecycleMBeanBase
super.initInternal();
// Register global String cache
// Note although the cache is global, if there are multiple Servers
// present in the JVM (may happen when embedding) then the same cache
// will be registered under multiple names
onameStringCache = register(new StringCache(), "type=StringCache");
// Register the MBeanFactory
MBeanFactory factory = new MBeanFactory();
factory.setContainer(this);
onameMBeanFactory = register(factory, "type=MBeanFactory");
// Register the naming resources
globalNamingResources.init(); // Initialize our defined Services
for (int i = 0; i < services.length; i++) {
services[i].init();
}
至于这个services是怎么来了,可以看到下面:service只有一个StandardService
Catalina.createDigester方法详细理解
接下来开始执行StandardService.init()
tomcat启动(四)Catalina分析-server的init()方法的更多相关文章
- tomcat启动(五)Catalina分析-service.init
上篇写到StandardService.init() 这个方法做什么呢?一起来看看. 这个类也是实现了Lifecycle 如图.这个图中i表示Interface接口.如Lifecycle,Contai ...
- tomcat启动(三)Catalina分析-load方法分析
load()方法按从上到下顺序分析(主要分析本人所没学过的知识点,其它略过...). Digester类作用 使用sax技术对xml进行解析 未开始解析时Digester.push(this)这个用来 ...
- tomcat启动(六)Catalina分析-StandardServer.start()
从链接 Tomcat中组件的生命周期管理公共接口Lifecycle 可以知道调用的是StandardServer.startInternal() @Override protected void st ...
- [Tomcat 源码分析系列] (二) : Tomcat 启动脚本-catalina.bat
概述 Tomcat 的三个最重要的启动脚本: startup.bat catalina.bat setclasspath.bat 上一篇咱们分析了 startup.bat 脚本 这一篇咱们来分析 ca ...
- maven项目使用tomcat启动报错:Server Tomcat v8.5 Server at localhost failed to start
背景说明:1)该项目为maven项目,使用的maven的本地仓库里有不少之前使用过下载的jar包: 2)从svn下载该项目后,无报错情况: 3)部署到tomcat启动报错 如下 : 4)在网上搜索了很 ...
- Tomcat 启动提示未发现 APR 的解决方法
Tomcat 启动出现信息如下: 信息: The APR based Apache Tomcat Native library which allows optimal performance in ...
- tomcat启动(三)Catalina简要分析
上篇解析Bootstrap到 daemon.setAwait(true); daemon.load(args); daemon.start(); 这三个方法实际是反射调用org.apache.cata ...
- tomcat启动批处理——catalina.bat
这个批处理才是tomcat服务器启动跟关闭的核心脚本.其中包括....(各种变量),此节将详细讲解这个批处理的逻辑. 先看看第一部分脚本: ****************************** ...
- Tomcat启动脚本catalina.sh
1 - 概述脚本catalina.sh用于启动和关闭tomcat服务器,是最关键的脚本另外的脚本startup.sh和shutdown.sh都是使用不同的参数调用了该脚本该脚本的使用方法如下(引自该脚 ...
随机推荐
- 聚合函数、group by
聚合函数: sql语言中一种特殊的函数:聚合函数,SUM, COUNT, MAX, MIN, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多条记录上.SELECT SUM(populati ...
- hdu4417(Super Mario)—— 二分+划分树
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- cocos studio
用了几天,和之前用的cocos creator以及unity的编辑器一对比,很多地方都挺反人类的哈... 拖拽和放大场景元素竟然还要切换一下编辑模式... 移动场景元素竟然没有单独控制x或者y方向的移 ...
- Android SQLiteOpenHelper Sqlite数据库的创建与打开
Android Sqlite数据库是一个怎样的数据库? 答:是一种嵌入式小型设备,移动设备,的数据库,应用在穿戴设备(例如:智能手表,计算手环 等等),移动设备(例如:Android系统类型的手机 等 ...
- Spring Boot 应用系列 4 -- Spring Boot 2 整合log4j2
一.背景 1. log4j2传承于log4j和logback,它是目前性能最好的日志处理工具,有关它们的性能对比请看: 2. 除了性能好之外,log4j2有这么几个重要的新features: (1) ...
- 阿里巴巴集团2013实习生招聘技术类笔试卷(B)
一.单选题 1.在常用的网络协议中,___是面向连接的.有重传功能的协议. A.IP B.TCP C.UDP D.DXP 2.500张多米诺骨牌整齐地排成一列,依顺序编号为1.2.3… ...
- 显式等待-----Selenium快速入门(十)
上一篇说了元素定位过程中的隐式等待,今天我们来探讨一下显示等待.显式等待,其实就是在使用WebDriverWait这个对象,进行等待.显式等待对比隐式等待,多了一些人性化的设置,可以说是更细化的隐式等 ...
- 前端工具Rythem介绍
Rythem是一个与Fiddler同类的软件,和Fiddler一样具有 代理抓包/替换 功能,与Fiddler最大的不同是Rythem是跨平台&开源的. 另外,根据笔者的一次开发经验,Ryth ...
- JavaScript模块化与esl.js
2016-2-2 晚上 松合时代公寓中 1.前端为什么需要模块化? http://requirejs.org/docs/why.html 2.https://github.com/ecomfe/esl ...
- leetcode 75. 颜色分类 JAVA
题目: 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红色.白色和 ...