Un classloader commun pour plusieurs WAR
Ceci est un petit rappel pour les retardataires qui souhaitent utiliser un classloader commun pour plusieurs webapp[1].
Tout d’abord, il faut savoir que la gestion du classloader dépend énormément du serveur d’applications. Par exemple, JBoss possède un seul et unique classloader utilise une hiérarchie de classloaders, mais par défaut c’est un référentiel de classes commun[2][3] pour tout le serveur qui est utilisé. Alors que JOnAS utilise une hiérarchie[4] de classloaders (serveur, application d’entreprise, application web, …).
Donc, en fonction du serveur d’application utilisé, cette question ne se pose pas toujours. Néanmoins, si vous rencontrez ce problème, il est possible de définir des JAR dans le classloader de votre EAR. Et donc d’avoir accès au classloader commun pour plusieurs WAR.
Notes
[1] Chacune contenue dans un fichier WAR différent.
[2] Appelé plus fréquement Unified Class Loader
[3] Merci à Emmanuel d’avoir précisé que ce comportement par défaut peut-être modifié pour obtenir un comportement JavaEE plus classique. 🙂
[4] Un arbre de définition.
Petite correction: JBoss utilise une hierarchie de classloaders qui soit ont un repository de class commun (aka unified class loader) ou un repository de class indépendant (JavaEE classique)
Emmanuel,
Merci pour tes remarques. Je viens de corriger le billet en y intégrant tes précisions sur la gestion du classloader par JBoss. J’avais pris un raccourci maladroit. :-/