- 浏览: 203752 次
- 性别:
- 来自: 福建省
文章分类
最新评论
-
c929833623:
...
Mysql JDBC驱动源码分析(Statement,ResultSet的创建)四 -
pythonlord:
顶 很有帮助,感谢楼主,好人一生平安
Mysql JDBC驱动源码分析(加载驱动)一 -
kiaonly:
代码有错误,我戳。
解释器模式(Interpreter)---java与模式(例子) -
wyzxzws:
小鸟学习了!
JAVA编码问题记录 -
xiaotao.2010:
写的不错! 弱弱说一句 建议使用URL二次转码, 这样可以避免 ...
JAVA编码问题记录
一,tomcat中每一个容器都有其生命周期,初始化/启动/结束 等,可以在各自的生命周期内的步骤中进行一系列需要的操作如日记通知,生命周期中采用最独特的设计模式,就是适配器模式(Addapter),与命令模式(Command)
在一个周期内涉及到的类是:(Lifecycle,LifecycleSupport(适配器),LifecycleEvent,LifecycleListener(命令))
在这里以StandardServer容器为例:
在server.xml被Digester类读取时添加了四个监听器:server.xml中
<!--APR library loader. Documentation at /docs/apr.html --> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --> <Listener className="org.apache.catalina.core.JasperListener" /> <!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --> <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
StandardServer 在初始化时又作了以下操作
public final class StandardServer implements Lifecycle, Server, MBeanRegistration /** * The lifecycle event support for this component. *LifecycleSupport适配器,依赖于Lifecycle */ private LifecycleSupport lifecycle = new LifecycleSupport(this); //构造函数 public StandardServer() { super(); ServerFactory.setServer(this); globalNamingResources = new NamingResources(); globalNamingResources.setContainer(this); if (isUseNaming()) { if (namingContextListener == null) { namingContextListener = new NamingContextListener(); //添加进lifecyclesupport中,加这个support中总共有五个监听器 addLifecycleListener(namingContextListener); } } //----------------------以上步骤为监听器的添加,添加完监听器,接下去就事件触发监听 public void start() throws LifecycleException { // Validate and update our current component state if (started) { log.debug(sm.getString("standardServer.start.started")); return; } // Notify our interested LifecycleListeners //事件触发为:开始启动前以下的lifecycle(LifecycleSupport上面定义的) lifecycle.fireLifecycleEvent(BEFORE_START_EVENT(Lifecycle中定义了一系列的事件), null); //正在启动 lifecycle.fireLifecycleEvent(START_EVENT, null); started = true; // Start our defined Services synchronized (services) { for (int i = 0; i < services.length; i++) { if (services[i] instanceof Lifecycle) ((Lifecycle) services[i]).start(); } } // Notify our interested LifecycleListeners //启动完 lifecycle.fireLifecycleEvent(AFTER_START_EVENT, null); }
LifecycleSupport下查看如何触发:
// public void fireLifecycleEvent(String type, Object data) { //首先创建一个事件驱动,传到监听器中,监听器会根据事件的不同作出相应的操作 LifecycleEvent event = new LifecycleEvent(lifecycle, type, data); LifecycleListener interested[] = listeners; for (int i = 0; i < interested.length; i++) interested[i].lifecycleEvent(event); }
在这里贴出AprLifecycleListener的事件触发
public void lifecycleEvent(LifecycleEvent event) {
if (Lifecycle.INIT_EVENT.equals(event.getType())) { //日记打印. aprInitialized = init(); if (aprInitialized) { try { initializeSSL(); } catch (Throwable t) { if (!log.isDebugEnabled()) { log.info(sm.getString("aprListener.sslInit")); } else { log.debug(sm.getString("aprListener.sslInit"), t); } } } } else if (Lifecycle.AFTER_STOP_EVENT.equals(event.getType())) { if (!aprInitialized) { return; } try { terminateAPR(); } catch (Throwable t) { if (!log.isDebugEnabled()) { log.info(sm.getString("aprListener.aprDestroy")); } else { log.debug(sm.getString("aprListener.aprDestroy"), t); } } } }
日记为:
2010-3-31 7:38:50 org.apache.catalina.core.AprLifecycleListener init
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\P......
这个命令模式跟java.awt中的addActionListener()是一样的,先添加所需的监听器根据不同的事件作出响应.
UML:
-----------------------------------------------------------------------------------------------------------
tomcat中所需要的日记,错误信息以及国际化是通过StringManager管理的
他是通过组合java.util.ResourceBundle进行管理,里面最主要的特点是,tomcat是通过各个不同的包进行日记管理
private StringManager(String packageName) { String bundleName = packageName + ".LocalStrings"; try { bundle = ResourceBundle.getBundle(bundleName); ----...
发表评论
-
Nginx1.1实现Resin4集群
2011-10-17 17:56 7200一,web服务器小论 以前的公司使用的web服务器是to ... -
Apache实现Tomcat集群
2010-06-08 20:14 1385一,配置介绍 1,linux 2,tomcat6. ... -
Tomcat源码---Session的分析一
2010-03-29 11:31 3787一,前面看了大致的tomcat的请求/响应,接下来的文章对to ... -
Tomcat源码---响应处理五
2010-03-25 16:01 1775一,响应工作我们应该从CoyoteAdapter#servic ... -
Tomcat源码---请求处理四(2)
2010-03-25 15:34 1576对以上的StandardWrapperValve#invok ... -
Tomcat源码---请求处理四(1)
2010-03-25 11:08 1609一,现在到了StandardWrapperValve# ... -
Tomcat源码---请求处理三
2010-03-25 10:39 1308一,这一章节主要讲request与response通过管道,阀 ... -
Tomcat源码---请求处理二
2010-03-24 15:04 1792一,经过以上文章(JIoEndpoint$Worker#run ... -
Tomcat源码---请求处理(接收,线程分配)一
2010-03-24 14:34 2779一,在以上文章中tomcat启动已经完毕,接着要做的是消息的请 ... -
Tomcat源码---容器启动六(4)
2010-03-24 11:14 1389现在容器已经启动成功的StanderService#start ... -
Tomcat源码---容器启动六(3)
2010-03-24 10:48 2245一,容器已经启动到部暑文件(webapps),接下去是Stan ... -
Tomcat源码---容器启动六(2)
2010-03-23 16:42 1453super.start()--->org.apach ... -
Tomcat源码---容器启动六(1)
2010-03-22 16:02 1445一,完成了以上的初始化工作,现在进行容器的启动工作由 ... -
Tomcat源码---初始化容器五
2010-03-22 15:03 1768一,上面文章完成了对server.xml载入以及解析,现在主要 ... -
Tomcat源码---载入相应的资源及解析四(2)
2010-03-19 16:47 1462一,根据以上文章所讲的对server.xml的解析作下简单的分 ... -
Tomat源码---载入相应的资源及解析四(1)
2010-03-19 16:22 1359一,进行了以上的类包加载后,现在主要的工作是载入server. ... -
Tomcat源码---启动.初始化(加载类包)分析三
2010-03-19 15:37 2185一,启动 Tomcat是从org.apache.catali ... -
Tomcat的简单了解二
2010-03-19 14:40 1786在查看源代码时,在网上找了一系列的文章,在些作详解: ... -
Tomcat中server.xml的配置分析一
2010-03-19 14:07 1771最近查看了tomcat6的源代码,了解了里面的大概 ...
相关推荐
jar包,亲测可用
androidx-lifecycle-common-2.1.0.jar
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
组件的生命周期管理 用Lifecycle管理启动、停止、关闭 Lifecycle接口预览 几个核心方法 Server中的init方法示例 为啥StandardServer没有init方法 LifecycleBase中的init与initInternal方法 为什么这么设计...
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
jar包,亲测可用
androidx-lifecycle-livedata-core-2.0.0.aar
androidx-lifecycle-runtime-2.1.0.aar
生命周期配置提供了一种机制,可通过在笔记本实例的生命周期内执行的外壳程序脚本来自定义笔记本实例。 样例脚本 除了pypi.org之外,此脚本还添加了一个私有PyPi存储库。 idle-闲置超过1小时后,此脚本将停止...
Android官方activity-lifecycle生命周期例子,参考网页: http://developer.android.com/training/basics/activity-lifecycle/index.html 方便了解Activity生命周期,提供了非常形象的说明。生动讲解。可以结合官网...
PEMS开发生命周期-GB9706.1-2020文档
带Lifecycle的iDrac控制器固件v2.63.60.61,firmimg.d7用于iDrac网页控制台更新,exe用于windows
atomikos 集成 Tomcat6Integration33
androidx-lifecycle-livedata-2.0.0.aar
kie workbench:6.5 相关依赖包下载: copy following libs into TOMCAT_HOME/lib ... btm-tomcat55-lifecycle-2.1.4.jar * h2-1.3.161.jar * jta-1.1.jar * slf4j-api-1.7.2.jar * slf4j-jdk14-1.7.2.jar
服务生命周期管理应用 该应用程序以及安装已经过测试: JDK 1.7.0_45和Maven 3.0.3 架构由三个JVM组成 JVM1 = jbpm 执行服务器 JVM2 = SOA 服务器 JVM3 = 托管服务生命周期管理应用程序的服务器 所有这些服务器都...