2016-09-29 3 views
1

Tomcat (또는 웹 응용 프로그램 서버)은 하나의 JVM 프로세스에서 작동하지만 다른 WAR 파일을 별도로로드하는 방법은 무엇입니까? 동일한 클래스 및 기타 리소스를 가질 수 있지만 응용 프로그램의 일관성 및 격리를 보장해야합니다.Tomcat은 다른 war 파일을 어떻게로드합니까?

+0

하나의 스레드에서 무엇을 의미하는지 확신 할 수 없지만 일반적으로 WAR 파일은 자체 클래스 로더에로드됩니다. 이 방법으로 같은 이름의 여러 버전의 클래스를 가질 수 있습니다. 해당 클래스 로더에서 서블릿을 인스턴스화하는 것만 큼 확실해야합니다. 스레드는 클래스 로더를 컨텍스트 클래스 로더로 설정해야 할 수도 있지만 (코드에 따라 다름) 엄격하게 필요하지는 않습니다. 예를 들어 OSGi는 번들과 비슷한 개념을 가지고 있으며 기본적으로 TCCL은 설정되어 있지 않다. – eckes

+0

@ 주인, 설명해 주셔서 감사합니다. 그렇다면 Tomcat은 각 war 파일에 클래스를로드하기위한 새로운 클래스 로더를 작성합니까? 어떻게 생각하십니까, 바람둥이의 코드를 이해할만한 가치가 있습니까? 아니면 어딘가에서 읽을 수 있습니까? – VRomaN

+0

예, ClassLoader HowTo를 참조하십시오. http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html – eckes

답변

4

Tomcat은 배포 된 각 WAR에 대해 (웹) 응용 프로그램 클래스 로더를 만듭니다. 여기에는 몇 가지 공통 클래스 로더가 있습니다. 전체 hierachy은 최고의 클래스 로더 하우투에 설명되어 있습니다 :

http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html

BTW : Tomcat이 응용 프로그램을 배포 취소 할 수 있도록하기 위해 자원 관리의 엄청난 양의 작업을 수행합니다. 이 여기에 설명 : 단단히 클래스 로더 및 클래스 하역에

http://wiki.apache.org/tomcat/MemoryLeakProtection

와 관계.

관련 문제