http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/crun_classload.html
클래스 로더는 클래스 파일을 찾고 로드합니다.
클래스 로더는 Name Space를 갖습니다.
런타임 환경은 클래스 로더를 사용하여
응용프로그램에 대한 새 클래스를 찾고 로드합니다.
JVM 클래스 로더
- 부트스트랩 클래스 로더(= Bootstrap 클래스 로더 = primordial 클래스 로더)는 부팅 클래스
경로(jre/lib,-Xbootclasspath) 상의 클래스를 찾고 로드합니다.
- 확장자
클래스 로더(= extension 클래스 로더 = standard extensions 클래스 로더)는 시스템 특성 java.ext.dirs(=jre/lib/ext) 상의 클래스를 찾고 로드합니다.
- CLASSPATH 클래스 로더(= system 클래스 로더 = application 클래스 로더)는 환경 변수 CLASSPATH 상의 클래스를 찾고 로드합니다.
WebSphere 확장 클래스 로더
- 런타임에 필요한 WebSphere Application Server
클래스를 로드합니다.
- 시스템 특성 ws.ext.dirs 상의 클래스를 찾고 로드합니다.
응용프로그램 모듈 클래스 로더
- 응용프로그램의 클래스 및
JAR 파일을 로드하며 Java EE 클래스 로딩 규칙을 준수합니다.
웹 모듈 클래스 로더
- WEB-INF/classes 및 WEB-INF/lib를 로드합니다.
클래스를
로드해야 할 때마다 클래스 로더는 대개 요청을 상위 클래스 로더에
위임합니다.
어떤 상위 클래스 로더도 클래스를 찾을 수 없는 경우,
원래 클래스 로더가 클래스를 로드하려 시도합니다.
요청은 상위
클래스 로더로만 이동하며 하위 클래스 로더로 이동할 수 없습니다.
클래스 로더 정책 (하나의 로더/다수의 로더_
예 1)
Server's application class-loader policy: Single
Application's WAR class-loader policy: Module
Application 1
Module: EJB1.jar
Module: WAR1.war
MANIFEST Class-Path: Dependency1.jar
WAR Classloader Policy = Module
Application 2
Module: EJB2.jar
MANIFEST Class-Path: Dependency2.jar
Module: WAR2.war
WAR Classloader Policy = Application
예2)
Server's application class-loader policy: Multiple
Application's WAR class-loader policy: Module
Application 1
Module: EJB1.jar
Module: WAR1.war
MANIFEST Class-Path: Dependency1.jar
WAR Classloader Policy = Module
Application 2
Module: EJB2.jar
MANIFEST Class-Path: Dependency2.jar
Module: WAR2.war
WAR Classloader Policy = Application
클래스 로드 모드 (상위 로더/ 하위 로더)
클래스 로더 위임 모드는 클래스 로더 순서라고도 하며,
클래스 로드시 상위 클래스 로더로 위임하는지 여부를 결정합니다.
다음 설정은 클래스 로더의 모드를 판별합니다.
- Application Server의 응용프로그램 클래스 로더 정책이 Single인 경우에는
서버 레벨 모드 값이 응용프로그램 클래스 로더의 모드를 정의합니다.
- Application Server의 응용프로그램 클래스 로더 정책이 Multiple인 경우에는
응용프로그램 레벨 모드 값이 응용프로그램 클래스 로더의 모드를
정의합니다.
- 응용프로그램의 WAR 클래스 로더 정책이 Module인 경우에는
모듈 레벨 모드 값이 WAR 클래스 로더의 모드를 정의합니다.