在standardengine啟動時,會呼叫父類containerbase的threadstart()方法,就是在此方法中開啟了containerbackgroundprocessor 執行緒!此方法**如下:
protected
void
threadstart()
containerbackgroundprocessor:
protected
class
containerbackgroundprocessor
implements
runnable
catch
(interruptedexception e)if(
!threaddone)}}
catch
(runtimeexception
|error e)
finally}}
protected
void
processchildren
(container container)
originalclassloader =
((context) container)
.bind
(false
, null);}
// standercontext重寫了backgroundprocess(),就是在這個重寫方法中進行了熱載入
container.
backgroundprocess()
; container[
] children = container.
findchildren()
;for
(int i =
0; i < children.length; i++)}
}catch
(throwable t)
finally}}
}
standardcontext的backgroundprocess()方法:注意執行完之後還會呼叫父類containerbase的backgroundprocess()方法。
public
void
backgroundprocess()
catch
(exception e)
} manager manager =
getmanager()
;if(manager != null)
catch
(exception e)
} webresourceroot resources =
getresources()
;if(resources != null)
catch
(exception e)
} instancemanager instancemanager =
getinstancemanager()
;if(instancemanager instanceof
defaultinstancemanager
)catch
(exception e)
}// 呼叫父類containerbase的backgroundprocess()方法
super
.backgroundprocess()
;}
public
void
backgroundprocess()
}finally}}
}
standardcontext#reload
public
synchronized
void
reload()
catch
(lifecycleexception e)
trycatch
(lifecycleexception e)
// 設定開啟,重新接收請求
setpaused
(false);
}
Tomcat原始碼閱讀系列
再過十來天,就要不再是大三,而步入大四的殿堂了,求職面試的事會接踵而至,鑑於春招時的教訓,自己的學習比較缺乏系統性地整理,向他人交流自己所掌握的技術能力仍有待提高,為此將自己閱讀tomcat原始碼的過程記錄一下,並分享到部落格中,讓有同樣興趣的同學一起交流討論。注 如沒有特別說明的地方,tomcat...
tomcat原始碼閱讀16
org.apache.catalina.session包 該包包括標準manager和session的實現,用於表示活動的session和獨立的session,他們都與相應的上下文相關聯。constants 該包的常量 filestore store介面的實現,將session儲存到配置目錄的檔案中...
tomcat原始碼閱讀5
org.apache.catalina.cluster.authenticator包 clustersinglesignon 每個valve支援使用者單點登入在集群節點上,使用者在web應用程式上經過驗證的安全標誌可以在同乙個安全域的其它集群節點上使用 clustersinglesignonlist...