Tomcat原始碼閱讀 三 熱載入

2021-10-25 13:41:10 字數 2044 閱讀 1567

在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...