WAS 특히 WebLogic에서의 classloader를 알면 EJB 및 web application의 deployment를 보다 더 잘 이해할 수 있다.
우선 classloader에 대해 공부해야 한다.
https://billy727.tistory.com/138
ClassLoader
JAVA ClassLoader란? - JVM의 구성 요소 중 하나로, 클래스가 요청될 때, '.class' 파일로부터 바이트 코드를 읽어 들여 class 객체를 생성하고 메모리로 로딩하는 역할을 한다. 즉, 각 directory에 흩어진 cla
billy727.tistory.com
위 글을 보고 대략적인 구조 및 흐름을 파악할 수 있다.
=================================================================================
그렇다면 WebLogic 상에서의 classloader는 어떠한 방식으로 되어있을까
<WebLogic ClassLoader Hierarchy> (1~ 4순)
1. System classloader
- 로드하는 클래스와 위치 :
- WebLogic 솔루션을 위한 class
- system CLASSPATH + (PRE_CLASSPATH, EXT_PRE_CLASSPATH)에 지정된 class
# CLASSPATH에 대한 팁 - 여러 개의 classpath 항목들은 ':'으로 구분되는데, classpath는 앞에서부터 읽고 들어가기에 경우에 따라서 뒷 순서에 지정된 classpath에서 앞 순서와 충돌 오류 등이 있을때, 앞 순서를 우선해서 적용하게 된다. 따라서 추가적인 classpath를 적용해야 하는 경우, classpath '앞'에 위치해야 한다. |
2. Domain classloader
- 로드하는 클래스와 위치 :
- ${DOMAIN_HOME}/lib에 존재하는 class
3. Application classloader
- 로드하는 클래스와 위치 :
- weblogic-application.xml에 설정된 J2EE 공유 library class
- application에서 지정한 module
- J2EE 5 표준의 <library-directory> 지정 directory
- <EAR>/APP-INF/lib에 존재하는 class
4. Web App classloader
- 로드하는 클래스와 위치 :
- weblogic.xml에 설정된 J2EE 공유 library class
- WEB-INF/classes나 WEB-INF/lib에 존재하는 class
# WebLogic Filtering classloader
- WebLogic Filtering classloader는 Domain classloader와 Application classloader 사이에 들어간다.
- Application에서 load되어야 했던 class를 지정할 수 있게 해준다 (Java EE shared Libraries, /lib or App-INF/lib (EAR), WEB-INF/lib(WAR) 포함)
- weblogic-application.xml 또는 weblogic.xml 파일에 설정이 가능하다 (버전 10.3.3 이후)
- <prefer-application-package>나 <prefer-web-inf-classes>를 통해 설정이 가능하며, 두개의 옵션을 같이 사용할 수 없다 (<prefer-application-package>가 더 권고됨)
- <prefer-application-package>는 web application이 WEB-INF/lib의 고유의 third-party 라이브러리를 사용할 수 있게 해준다.
- <prefer-web-inf-classes>는 WEB-INF/classes의 자신 고유 버전의 third-party 클래스를 사용할 수 있게 해준다.
(참고 : https://blueyikim.tistory.com/1181)
=================================================================================
WebLogic은 JVM level의 ClassLoader에서 작동을 하게 된다. WebLogic에서 invoke되는 ClassLoader는 크게 EJB-JAR, WAR, EAR 3 가지 형태로 구분이 된다.
- EJB-JAR : 각 파일들은 deploy 시 JAR 파일 당 Class Loader를 생성한다. 따라서 다른 JAR 파일의 Class들은 참조할 수 없다. (parent classloader나 JVM level의 classpath에 적용된 class만 참조 가능)
- WAR : 기본적으로 WAR 파일 또한 EJB-JAR 파일과 같은 특성을 갖는다. 하지만 WebLogic에서는 WAR 파일에 대해 위에서 설명한 <perfer-application-package>나 <prefer-web-inf-classes> 옵션을 통해 WEB-INF안의 lib나 classes 디렉토리에 우선순위를 부여하는 것이 가능해진다.
- EAR : EAR 파일에서는 각각 EJB-JAR와 WAR를 위한 class loader가 2개 생성된다. 이 때 EJB-JAR class loader가 parent class loader가 되기에 WAR에서 class 참조가 가능해진다.
'Oracle > Weblogic' 카테고리의 다른 글
Windows에서 WebLogic 80 port 사용 (0) | 2022.07.05 |
---|---|
WLST를 통해 Thread dump 생성 방법 (0) | 2022.06.24 |
WebLogic 버전 별 JDK 최소 지원 버전 (0) | 2022.06.14 |
WebLogic 버전 확인 (0) | 2022.06.02 |
WebLogic Derby DB (0) | 2022.05.30 |