클래스를 언로드 할 수있는 유일한 방법은 사용 된 클래스 로더가 가비지 수집 된 경우입니다. 즉, 모든 단일 클래스와 클래스 로더 자체에 대한 참조는 dodo의 길을 가야합니다.
문제에 대한 한 가지 가능한 해결책은 모든 jar 파일에 대해 Classloader를, 클래스의 실제로드를 특정 Jar 클래스 로더에 위임하는 각 AppServer에 대한 Classloader를 갖는 것입니다. 이렇게하면 모든 App 서버에 대해 다른 버전의 jar 파일을 가리킬 수 있습니다.
그러나 이것은 사소한 것이 아닙니다. OSGi 플랫폼은 각 번들에 서로 다른 클래스 로더가 있고 종속성이 플랫폼에 의해 해결되므로이를 수행하려고 노력합니다. 아마도 좋은 해결책은 그것을 살펴 보는 것입니다.
OSGI를 사용하지 않으려는 경우 가능한 모든 구현은 모든 JAR 파일에 대해 하나의 JarClassloader 클래스 인스턴스를 사용하는 것일 수 있습니다 .
그리고 Classloader를 확장하는 새로운 MultiClassloader 클래스를 작성하십시오. 이 클래스는 내부적으로 JarClassloaders의 배열 (또는 List)을 가지며, defineClass () 메소드에서 정의를 찾을 수 있거나 NoClassDefFoundException이 발생 될 때까지 모든 내부 클래스 로더를 반복합니다. 새로운 JarClassloader를 클래스에 추가하기 위해 몇 가지 접근 자 메소드를 제공 할 수 있습니다. 멀티 클래스 로더를위한 네트에는 여러 가지 구현이 가능하므로 직접 작성하지 않아도됩니다.
서버에 대한 모든 연결에 대해 MultiClassloader를 설치하는 경우 원칙적으로 모든 서버가 동일한 클래스의 다른 버전을 사용할 수 있습니다.
사용자 정의 스크립트가 포함 된 클래스를 메모리에서로드 및 언로드 해야하는 프로젝트에서 MultiClassloader 아이디어를 사용했습니다.