现在的位置: 首页 > 综合 > 正文

How Tomcat Works 6

2018年05月22日 ⁄ 综合 ⁄ 共 1323字 ⁄ 字号 评论关闭

这章讲的是tomcat如何控制内部
各组件的生命周期。tomcat内部有很多组件,比如loader,manager等等,在启动或关闭时,tomcat需要让这些组件依次做一些初始化工作或善后工作,这就靠org.apache.catalina.Lifecycle接口。

 

 

说说tomcat管理各组件生命周期的机制。在tomcat里,一个组件可以包含其它多个组件,比如一个context可以包含loader,manager等组件,那么context就负责这些组件的生命周期。

这种负责制度是普遍且坚决执行的,所以把所有组件拼装完成后你会发现,你只需要管理最上层组件的生命周期,然后让它来管理它所负责的从属组件,这些从属组件又管理自己负责的组件,以此类推,所有的组件都被照顾到。

实现方法就是让所有组件都实现org.apache.catalina.Lifecycle接口提供的方法start和stop,例如context的start方法里,可以调用loader和manager的start方法。

 

除此之外,lifecycle接口中定义了6个事件类型,LifecycleEvent代表一个事件,而LifecycleListener负责监听事件。

 

LifecycleEvent的典型构造方法是public LifecycleEvent(Lifecycle lifecycle, String type, Object data)。其中第一个参数通常把组件本身传入,比如context对象。第二个参数是event类型,就是lifecycle接口中定义的那些,当然也可以使别的。第三个参数可以传递数据,用于listener中的操作。

LifecycleListener接口的实现类,会实现public void lifecycleEvent(LifecycleEvent event);方法,在方法体内根据参数的不同做不同的操作。

 

一个类如果实现了Lifecycle接口,那么就可以用public void addLifecycleListener(LifecycleListener listener);方法为自己添加0到多个listener,Lifecycle接口还提供了findLifecycleListeners,removeLifecycleListener方法用来操作这些listener。所以这个类通常要实现这些方法,无非是用一个数组或者map存储这些listener,这个工作是枯燥的,因此tomcat提供了LifecycleSupport类,它用来负责维护listeners,而Lifecycle的实现类只需在那些实现方法里简单的调用LifecycleSupport类的对应方法即可。

 

LifecycleSupport类维护了一个listener的数组,并相应提供了对这个数组的add,find,remove操作。除此之外,还提供了一个方法:public void fireLifecycleEvent(String type, Object data)。这个方法中组装一个LifecycleEvent,之后遍历listener数组,依次调用它们的lifecycleEvent方法。

 

 

【上篇】
【下篇】

抱歉!评论已关闭.