OSSW(Open Source System SoftWare 2009. 6. 5. 14:16

JEUS Class Loader에는 JEUS 만의 특징을 가지고 있다. 크게 가지 방식이 존재 합니다. 기존 버전의 Jar class loading mode 해당하는 Shared classloader JEUS 5부터 추가된 Isloated classloader 있습니다. 하지만 기존에 사용하는 DIR mode 해당하는 classloader 구조는 제거 되었습니다. 하지만 DIR에서의 장점 이었던 디렉토리의 class file 이용한 deploy JEUS5 에서도 가능합니다.

Shared classloader

                

[그림] Sharded ClassLoader

1.Root Class Loader 에서는 JEUS Manager 레벨이며 class loader 시스템 라이브러리와 JDBC 드라이버, user class path 로딩할 사용됩니다.

2.Servlet(Web) Class Loader 어플리케이션에서 사용되는 클래스를 로드 사용됩니다.

3.JSP(Web context) Class Loader Web Context 해당되는 Servlet 클래스를 로딩합니다.

4.EJB Root Class Loader EJB Engine 자체에서 필요한 클래스와 EJB 클래스를 로딩합니다.

5.EJB Jar Class Loader 특정 EJB 모듈 클래스와 라이브러리를 로딩합니다.

구조의 Shared classloader에서는 Web classloader에서 EJB classloader class 요청 하거나 EJB classloader 하나가 class 요청 때에는 모든 EJB classloader에게 class 요청 합니다. 이렇게 하나의 application 다른 application classloader 공유하기 때문에 shared classloader라고 합니다.

이렇게 함으로써 4.x대의 JEUS에서는 EJB 사용하는 application EJBinterface class들이 없어도 EJB classloader 공유함으로써 필요한 class들을 읽어 있습니다.

하지만 이런 때문에 application class 다른 application class linking 이루어지므로 redeploy 경우에는 연관되어 있는 application들을 모두 undeploy deploy해야 하는 문제가 발생하고 class들을 공유함으로써 여러 가지 문제가 발생 수도 있습니다.

Isolated classloader


[
그림] Isolated Class Loader

구조에서는 application 마다 application 내의 web module classloader application EJB classloader 하위에 존재하고 application classloader 다른 application classloader에게 class 요청하지 않습니다.

 J2EE 1.4 spec application 자신이 사용하는 다른 application interface class들을 같이 packaging하도록 규정하고 있고 이를 따른다면 다른 application classloader에게 interface class 요청하지 않아도 자신의 classloader에서 class들을 읽을 있으므로 ClassNotFoundException 발생하지 않게 됩니다.

다만 class 공유할 없으므로 다른 EJB application local interface 사용할 없게 됩니다. 경우에는 remote interface 사용 가능합니다. Class 공유하지 않기 때문에 class 공유로 생길 있는 문제가 존재하지 않고 application redeploy 다른 application undeploy 필요가 없어집니다.

  classloader 구조를 제대로 사용하기 위해서는 연관된 application끼리 EAR 묶어 하나의 application으로 만드는 작업이 필요합니다. 하나의 application 하나의 classloader delegation 구조를 가지기 때문에 서로 class공유가 가능하므로 같은 EAR 내의 EJB 대해서는 local interface 사용이 가능합니다.