1
Tomcat(或任何Web應用程序服務器)如何分別加載不同的WAR文件,儘管它可以在一個JVM進程中運行?他們可能擁有相同的類和其他資源,但必須保證應用程序的一致性和隔離性。Tomcat如何加載不同的war文件?
Tomcat(或任何Web應用程序服務器)如何分別加載不同的WAR文件,儘管它可以在一個JVM進程中運行?他們可能擁有相同的類和其他資源,但必須保證應用程序的一致性和隔離性。Tomcat如何加載不同的war文件?
Tomcat爲每個部署的WAR創建(Web)應用程序類加載器。它有一些普通的類加載器。整體層次結構最好的類加載器HOWTO描述:
http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html
BTW:Tomcat的確實爲了讓應用程序能夠取消部署資源管理數量驚人的。這說明如下:
http://wiki.apache.org/tomcat/MemoryLeakProtection
和關係緊密地類加載器和類卸載。
不確定你的意思與一個線程,但通常WAR文件被加載到他們自己的類加載器。這樣你可以擁有多個具有相同名稱的類版本。所有你需要確保的是從相應的類加載器實例化servlet。線程可能需要將類加載器設置爲上下文類加載器(具體取決於你不能使用的代碼),但那不是嚴格需要的。例如,OSGi對捆綁包有類似的概念,默認情況下沒有設置TCCL。 – eckes
@eckes,謝謝你的解釋。那麼,Tomcat是否爲每個war文件創建一個新的類加載器來加載類?你如何看待,是否值得看看tomcat的代碼來理解,還是我可以在某處閱讀它? – VRomaN
是的,請參閱ClassLoader HowTo:http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html – eckes