WAS/WebLogic

[Tips] WebLogic 클래스로더(ClassLoader)

투칼론 2017. 11. 7. 20:27
반응형

1. WebLogic 클래스로더 계층 구조

 클래스로더

로드하는 클래스와 위치 

 1. SYSTEM 클래스로더

 WebLogic 솔루션을 위한 클래스

 CLASSPATH에 지정된 클래스

 PRE_CLASSPATH와 EX_PRE_CLASSPATH에 지정된 클래스

 2. DOMAIN 클래스로더

 $도메인 디렉터리/lib에 있는 클래스

 3. APPLICATION 클래스로더

 weblogic-application.xml에 설정된 J2EE 공유 라이브러리 클래스

 애플리케이션에서 지정한 모듈

 J2EE 5 표준의 <library-directory> 지정 디렉터리

 <EAR>/APP-INF/lib 디렉터리에 있는 클래스

 4. WEB APP 클래스로더

 weblogic.xml에 설정된 J2EE 공유 라이브러리 클래스

 WEB-INF/classes 디렉터리

 WEB-INF/lib 디렉터리


2. WebLogic Filtering 클래스로더


  • 클래스로더 계층 구조에서 DOMAIN 클래스로더와 APPLICATION 클래스로더 사이에 들어간다.


  • FilteringClassLoader는 특정 클래스를 항상 APPLICATION 클래스로더에서 로딩하도록 한다.(예를들어, Xerces, Ant 등과 같이 WebLogic에 기본 패키징된 버전과 다른 패키지를 사용하고자 할때 애플리케이션과 함께 배포된 클래스 사용가능하도록 함)


  • EAR의 APP-INF/lib 디렉터리 또는 WAR의 WEB-INF/lib 디렉터리에서 우선으로 클래스를 로딩한다.


  • weblogic-application.xml 또는 weblogic.xml 파일에 설정 가능함(10.3.3 버전 이후)


  • 설정방법은 <prefer-application-package> 태그와 <prefer-web-inf-classes> 태그를 활용하여 설정할 수 있지만, <prefer-application-package>태그 사용을 권장한다.


<예시#1> 

아래 정의된 패키지의 클래스들을 WebLogic제품에 설치된 버전 대신에 Application과 함께 배포된 클래스들을 로딩하라는 예시임

 <prefer-application-packages>

     <package-name>org.apache.log4j.*</package-name>

     <package-name>antlr.*</package-name>

 </prefer-application-packages> 


<예시#2> 

Web App의 WEB-INF디렉터리에서 우선 클래스를 로딩하라는 예시임. 특정 패키지를 지정하지는 않음에 주의할 것

<container-descriptor>

     <prefer-web-inf-classes>true</prefer-web-inf-classes>

</container-descriptor>


[클래스로더 관련 다른글]

http://blueyikim.tistory.com/37