欢迎来到天天文库
浏览记录
ID:41116420
大小:33.50 KB
页数:6页
时间:2019-08-16
《Tomcat源码分析(7)启动 关闭机制(生命周期)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、智慧人大有能力 诚信・正直・创新有知识的人力上加力Tomcat源码分析(七)--单一启动/关闭机制(生命周期)在前面的大部分文章都是讲连接器和容器的,以后的内容会偏向写一些Tomcat的其他组件以及一些细节的东西。Tomcat有很多组件,要一个一个启动组件难免有点麻烦。由于Tomcat的包含关系是Catalina->Server->Service->容器/连接器/日志器等,于是可通过父组件负责启动/关闭它的子组件,这样只要启动Catalina,其他的都自动启动了。这种单一启动和关闭的机制是通过实现Lifecycle接口来实现的。下面是Lifecycle接口的定义:[java]pu
2、blicinterfaceLifecycle{publicstaticfinalStringSTART_EVENT="start";//生命周期的六个事件类型!publicstaticfinalStringBEFORE_START_EVENT="before_start";publicstaticfinalStringAFTER_START_EVENT="after_start";publicstaticfinalStringSTOP_EVENT="stop";publicstaticfinalStringBEFORE_STOP_EVENT="before_stop";publicst
3、aticfinalStringAFTER_STOP_EVENT="after_stop";publicvoidaddLifecycleListener(LifecycleListenerlistener);//在此组件中添加一个监听器publicLifecycleListener[]findLifecycleListeners();publicvoidremoveLifecycleListener(LifecycleListenerlistener);publicvoidstart()throwsLifecycleException;//组件启动方法publicvoidstop()th
4、rowsLifecycleException;}当组件实现了Lifecycle接口,父组件启动的时候,即调用start方法时,只要在父组件的start方法中也调用子组件的start方法即可(只有实现统一的接口Lifecycle才能实现统一调用,如以下调用方式:(Lifecycle)子组件.start()),下面一步一步来看源代码,首先在Catalina启动start,部分代码如下:[java]//Startthenewserverif(serverinstanceofLifecycle){try{server.initialize();((Lifecycle)server).start
5、();//启动servertry{//RegistershutdownhookRuntime.getRuntime().addShutdownHook(shutdownHook);}catch(Throwablet){HansonTel:15360452825.Mail:hansonjan@163.com智慧人大有能力 诚信・正直・创新有知识的人力上加力//ThiswillfailonJDK1.2.Ignoring,asTomcatcanrun//finewithouttheshutdownhook.}//Waitfortheservertobetoldtoshutdownser
6、ver.await();}catch(LifecycleExceptione){System.out.println("Catalina.start:"+e);e.printStackTrace(System.out);if(e.getThrowable()!=null){System.out.println("-----RootCause-----");e.getThrowable().printStackTrace(System.out);}}}关键看((Lifecycle)server).start();这样便在启动Catalina的时候启动了Server,再看StandardS
7、erver的start方法:[java]publicvoidstart()throwsLifecycleException{//Validateandupdateourcurrentcomponentstateif(started)thrownewLifecycleException(sm.getString("standardServer.start.started"));//NotifyourinterestedLifecycleListe
此文档下载收益归作者所有