dans Serveur, Tomcat

Le classpath tomcat

Aujourd’hui je vous propose un petit tour d’horizon sur le fonctionnement du classpath tomcat.

C’est quoi un classpath?

Il s’agit d’un argument de la jvm qui qui indique à cette dernière ou charger les classes  dont le programme aura besoin pour fonctionner.

Tout d’abord rappelons que Tomcat ne résoud pas le classpath comme les autres programmes java, cela veut dire que tomcat a une manière bien spécifique de charger ses classes.

Plutôt que d’utiliser la variable d’environnement CLASSPATH communément utilisée .

Le script de démarrage Tomcat  ignore cette variable et génère son propre classpath au moment de la creation du system classloader : (org.apache.catalina.loader.WebappClassLoader).

 

La variable CLASSPATH est une des façons d’instruire des applications ainsi que les outils du JDK ou rechercher les classes utilisateurs.

Classpath Tomcat vue d’ensemble

Voici un petit récapitulatif de la manière dont  le classpath Tomcat est résolu :

Lorsque Tomcat démarre il crée un certain nombre de classloader que nous détaillerons plus ci-dessous.

Attention a ne pas confondre classloader et classpath.

Classloader : Classe java dont le but est de charger des classes

Classpath: Chemin indiquant a partir de ou le ou les classloader doivent charger leur classes.

Les différents classloader de Tomcat

1 Bootstrap classloader:

Ce classloader charges les classes basques de la jvm ex : rt.jar ainsi que toutes les classes présentes dans JAVA_HOME/jre/lib/ext

Notez ici que ce classloader utilise la variable d’environnement JAVA_HOME et qu’il ne peut êtres instancié depuis un code java , il est implémenté nativement dans la jvm.

2 System classloader :

Ce classloader est normalement initialisé à partir de la variable CLASSPATH cependant le script de démarrage de Tomcat ignore cette variable et construit ce classloader à partir des répertoires suivants:

  • CATALINA_HOME/bin/bootstrap.jar (contient la méthode main qui permet de démarrer le serveur tomcat)
  • CATALINA_BASE/bin/tomcat-juli.jar or $CATALINA_HOME/bin/tomcat juli.jar (Les classes liées au logging tomcat)
  • CATALINA_HOME/bin/commons-daemon.jar (contient les classes pour le projet apache common deamon)

3 Common classloader

Ce classloader contient des classes à la fois visibles pour toutes les webapps et les classes internes à tomcat. Le chemin de recherche utilisé par ce classloader est spécifié par la variable de propriété common.loader située dans le fichier CATALINA_BASE/conf/catalina.properties. La configuration par défaut recherchera dans les chemins suivants dans l’ordre:

  •  classes et resources non archivées dans $CATALINA_BASE/lib
  • Archives JAR dans $CATALINA_BASE/lib
  • classes et resources non archivées dans $CATALINA_HOME/lib
  • Archives JAR dans $CATALINA_HOME/lib

4 Un classloader par application

Un classloader est crée pour chaque webapp déployée dans  une instance de serveur tomcat.Toutes les classes et ressources non archivées seront recherchées à partir du répertoire WEB-INF/classes et toutes les archives jar à partir du répertoire WEB-INF/lib. les classes et ressources chargées ne sont visibles qu’au sein de l’application WEB.

https://www.mulesoft.com/tcat/tomcat-classpath

https://docs.oracle.com/javase/tutorial/essential/environment/paths.html

Ecrire un Commentaire

Commenter