设为首页 收藏本站
查看: 212|回复: 0

[经验分享] Tomcat 源码学习 之 AprLifecycleListener

[复制链接]

尚未签到

发表于 2017-1-19 10:06:09 | 显示全部楼层 |阅读模式
  
类名org.apache.catalina.core.AprLifecycleListener
继承关系
LifecycleListener

关联类
org.apache.tomcat.jni.Library
org.apache.tomcat.jni.SSL

实现功能检查是否具有 APR/native 库,如果有则将其加载

 
 
 
 
分析
 
在StandardServer一节的学习中,我们遗漏了一个很重要的部分没有提及。那就是加载LifecycleListener。我们已经知道,继承LifecycleListener接口的类可以用来监听component的状态变化。 当StandardServer被初始化时,有一系列的标准LifecycleListener被加载并监听StandardServer的变化(这些Listener被定义在server.xml文件的Server标签下)。接下来的一系列博文中,我们会逐一介绍这些Listener。 
 
APR/native
除了提供正常的web server服务(HTTP,File I/O, etc.), Tomcat还提供了一种称之为 Apache Portable Runtime的组件为web应用提供高可扩展性,高性能以及更好的与本地服务技术整合的功能。Tomcat的文档中提到了几种典型的功能,比如sendfile,epoll和OpenSSL等高级IO功能。OS级别的功能如随机数的产生,系统状态等等。
 
 想要使用APR/native支持,以下组件需要被安装:
1. APR library
2. Tomcat 使用APR所需的JNI wapper类
3. OpenSSL libraries
 
一旦这些组件被安装并可用,Tomcat的Connector就会自动的使用APR,这里最值得关注的就是SSL的配置,我们接下来会大概的提到。详细的内容会在Connector中具体描述。
 
  
APR Lifecycle Listener配置
  APRLifecycleListener的配置项很简单,className属性配置其full name。 SSLEngine属性配置是否使用SSL,默认选项是on:

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  在Connector中,只要配置SSLEnabled为true即可,当然还有其它配置项需要关心,在这里我们不过度深入。

<Connector port="443" maxHttpHeaderSize="8192"
maxThreads="150"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
SSLEnabled="true"
SSLCertificateFile="${catalina.base}/conf/localhost.crt"
SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />
  lifecycleEvent方法
  AprLifecycleListener类的核心方法是lifecycleEvent,当StandardServer的状态发生改变时,该方法被触发:
  1. eventType == BEFORE_INIT
  a. 初始化并加载org.apache.tomcat.jni.Library, 即APR native Library的jni wrapper。
  b. 初始化并加载org.apache.tomcat.jni.SSL, 即SSL的jni wrapper。
  2. eventType == AFTER_DESTROY
  a. 终止org.apache.tomcat.jni.Library
  b. 终止org.apache.tomcat.jni.SSL
  org.apache.tomcat.jni.Library 和 SSL 属于jni的部分了,不在本文讨论之列。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-330597-1-1.html 上篇帖子: Tomcat的类载入器 下篇帖子: 多个tomcat配置多个系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表