클래스 로더는 클래스 파일을 찾고 로드합니다.
클래스 로더는 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 클래스 로더의 모드를 정의합니다.
댓글 없음:
댓글 쓰기