102 votes

Comment mettre à jour une application Web Tomcat sans redémarrer tout le service ?

Je suis nouveau sur Tomcat. Nous avons une machine de développement avec environ 5 applications en cours d'exécution. Même si c'est du développement, nos clients l'utilisent assez intensivement pendant les tests.

Disons que nous devons apporter un petit changement à un fichier de classe. Actuellement, nous devons arrêter Tomcat (ce qui affecte les quatre autres applications), supprimer le fichier WAR (et le répertoire de l'application Web), redéployer le nouveau fichier WAR et redémarrer Tomcat.

Évidemment, cela contrarie quelques personnes car cela détruit toutes les sessions connectées pour toutes les applications.

Y a-t-il un meilleur moyen de faire cela? Je veux dire, y a-t-il un moyen de recharger seulement la CLASSE qui a été modifiée au lieu de tout sur la machine de développement?

Merci.

67voto

Steve K Points 10475

Avez-vous essayé d'utiliser l'application Manager de Tomcat? Elle vous permet de déployer / retirer des fichiers war sans arrêter Tomcat.

Si vous ne voulez pas utiliser l'application Manager, vous pouvez également supprimer le fichier war du répertoire webapps, Tomcat retirera l'application après un court laps de temps. Ensuite, vous pouvez copier à nouveau un fichier war dans le répertoire, et Tomcat déploiera le fichier war.

Si vous utilisez Tomcat sur Windows, vous devrez peut-être configurer votre Context pour ne pas verrouiller divers fichiers.

Si vous ne pouvez absolument pas avoir de temps d'arrêt, vous pouvez envisager les Déploiements parallèles de Tomcat 7. Vous pouvez déployer plusieurs versions d'une application web avec le même chemin de contexte en même temps. Les règles utilisées pour faire correspondre les requêtes à une version de contexte sont les suivantes:

  • Si aucune information de session n'est présente dans la requête, utilisez la dernière version.
  • Si des informations de session sont présentes dans la requête, vérifiez le gestionnaire de session de chaque version pour une session correspondante et si une est trouvée, utilisez cette version.
  • Si des informations de session sont présentes dans la requête mais qu'aucune session correspondante n'est trouvée, utilisez la dernière version.

37voto

Chirag Katudia Points 461

Il existe plusieurs façons faciles.

  1. Il suffit de toucher web.xml de n'importe quelle webapp.

    touch /usr/share/tomcat/webapps//WEB-INF/web.xml

Vous pouvez également mettre à jour un fichier jar particulier dans WEB-INF/lib, puis toucher web.xml, plutôt que de construire l'ensemble du fichier war et le déployer à nouveau.

  1. Supprimez le répertoire webapps/VOTRE_WEB_APP, Tomcat commencera à déployer le fichier war dans les 5 secondes suivantes (en supposant que votre fichier war existe toujours dans le dossier webapps).

  2. Généralement, écraser un fichier war par une nouvelle version le redéploie automatiquement par tomcat. Sinon, vous pouvez toucher web.xml comme expliqué ci-dessus.

  3. Copiez un "répertoire" déjà extrait dans votre dossier webapps

23voto

skal Points 11

Dans le répertoire de configuration d'Apache Tomcat, vous pouvez trouver le fichier context.xml. Dans ce fichier, modifiez la balise Context reloadable="true". Cela devrait résoudre le problème et vous n'aurez pas besoin de redémarrer le serveur.

3voto

l_39217_l Points 1632

0voto

MosheElisha Points 686

Vous pouvez essayer d'utiliser LiveRebel. C'est gratuit si vous avez jusqu'à deux serveurs gérés. Je l'utilise et j'en suis très satisfait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X