CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > Web服务子站 > Java技术

TOMCAT源码分析(启动框架)

作者: zhengsheng ,  出处:IT专家网论坛, 责任编辑: 包春林, 
2008-05-15 04:00
  本文是我阅读了TOMCAT源码后的一些心得。 主要是讲解TOMCAT的系统框架, 以及启动流程。若有错漏之处,敬请批评指教!

  2.2 历史就是那么惊人的相似! tomcat的启动就是从org.apache.catalina.startup.Bootstrap这个类悍然启动的!

  在Bootstrap里做了两件事:

  1. 指定了3种类型classloader:

  commonLoader: common/classes、common/lib、common/endorsed

  catalinaLoader: server/classes、server/lib、commonLoader

  sharedLoader: shared/classes、shared/lib、commonLoader

  2. 引导Catalina的启动。

  用Reflection技术调用org.apache.catalina.startup.Catalina的process方法, 并传递参数过去。

  2.3 Catalina.java

  Catalina完成了几个重要的任务:

  1. 使用Digester技术装配tomcat各个容器与组件。

  1.1 装配工作的主要内容是安装各个大件。 比如server下有什么样的servcie。 Host会容纳多少个context。 Context都会使用到哪些组件等等。

  1.2 同时呢, 在装配工作这一步, 还完成了mbeans的配置工作。 在这里,我简单地但不十分精确地描述一下mbean是什么,干什么用的。

  我们自己生成的对象, 自己管理, 天经地义! 但是如果我们创建了对象了, 想让别人来管, 怎么办呢? 我想至少得告诉别人我们都有什么, 以及通过什么方法可以找到 吧! JMX技术给我们提供了一种手段。 JMX里面主要有3种东西。Mbean, agent, connector.

  Mbean: 用来映射我们的对象。也许mbean就是我们创建的对象, 也许不是, 但有了它, 就可以引用到我们的对象了。

  Agent: 通过它, 就可以找到mbean了。

  Connector: 连接Agent的方式。 可以是http的, 也可以是rmi的,还可以直接通过socket。

  发生在tomcat 装配过程中的事情: GlobalResourcesLifecycleListener 类的初始化会被触发:

  protected static Registry registry = MBeanUtils.createRegistry(); 会运行

  MBeanUtils.createRegistry() 会依据/org/apache/catalina/mbeans/mbeans-descriptors.xml这个配置文件创建 mbeans. Ok, 外界就有了条途径访问tomcat中的各个组件了。(有点像后门儿)

  2. 为top level 的server 做初始化工作。 实际上就是做通常会配置给service的两条connector.(http, ajp)

  3. 从server这个容器开始启动, 点燃整个tomcat.

  4. 为server做一个hook程序, 检测当server shutdown的时候, 关闭tomcat的各个容器用。

  5. 监听8005端口, 如果发送"SHUTDOWN"(默认培植下字符串)过来, 关闭8005serverSocket。

  2.4 启动各个容器

  1. Server

  触发Server容器启动前(before_start), 启动中(start), 启动后(after_start)3个事件, 并运行相应的事件处理器。

  启动Server的子容器:Servcie.

  2. Service

  启动Service的子容器:Engin

  启动Connector

  3. Engin

  到了Engin这个层次,以及以下级别的容器, Tomcat就使用了比较一致的启动方式了。

  首先, 运行各个容器自己特有一些任务

  随后, 触发启动前事件

  立即, 设置标签,就表示该容器已经启动

  接着, 启动容器中的各个组件: loader, logger, manager等等

  再接着,启动mapping组件。(注1)

  紧跟着,启动子容器。

  接下来,启动该容器的管道(pipline)

  然后, 触发启动中事件

  最后, 触发启动后事件。

共5页。 9 1 2 3 4 5 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i