Salut à tous,
J'ai une application à déployer sous Tomcat/5.0.28 pour plusieurs clients.
On m'impose d'avoir des urls de la forme :
www.monsite.com/client1
www.monsite.com/client2
...etc
(le nombre de clients peut aller au delà de 200 !)
qui doivent tous attaquer la même webapp.
La 1ère idée qui vient à l'esprit est de créer autant de contextes dans le server.xml que de clients pour un même host, tous ces contextes pointant vers le même war, ce qui donne par exemple :
<Context path="/client1" docBase="monPath\appli.war">
...
</Context>
<Context path="/client2" docBase="monPath\appli.war">
...
</Context>
...etc.
Malheureusement, au démarrage, Tomcat va dézipper dans son répertoire webapps 200 fois le contenu du fichier appli.war dans 200 répertoires nommés client1, client2, etc. (ce qui parait complètement stupide puisque chaque répertoire contiendra exactement les mêmes fichiers)
Qui plus est, il va faire la même chose dans son dossier work pour compiler les jsp et autres.
Autant vous dire que Tomcat ne se lance même pas : OutOfMemory au bout de 37 contextes déployés sous Linux (pourtant la machine est pas si mal, 1 Giga de ram et un bon processeur, c'est une machine de test bien sûr).
Avez-vous une idée pour éviter cette duplication inutile et n'avoir véritablement qu'une seule appli déployée dans les répertoires webapps et work tout en conservant les urls décrites au début ?
Que pensez-vous de ne créer qu'un seul context root (path vide) :
<Context path="" docBase="monPath\appli.war">
...
</Context>
et de créer autant de répertoires clientXX que de clients à la racine de ma webapp avec dans chacun un fichier index.jsp par exemple (qui serait défini dans le <welcome-file-list> de mon web.xml) qui redirigerait vers une page d'accueil globale en passant en paramètre le nom du client récupéré dans l'URL.
(sachant qu'à partir de la redirection, je perds la partie "nom du client" dans la barre d'adresse, ce qui me gêne un peu).
Si vous avez d'autres idées ou des critiques/suggestions sur cette 2ème solution, merci d'avance pour votre réponse !
Lôlö
Partager