web-dev-qa-db-fra.com

Comment mettre à jour une application Web Tomcat sans redémarrer l'ensemble du service?

Je suis nouveau à Tomcat. Nous avons une machine de développement avec environ 5 applications en cours d'exécution. Même s'il s'agit de dev, nos clients l'utilisent beaucoup lors des tests.

Donc, disons que nous devons faire une petite modification sur un fichier de classe. Pour le moment, nous devons arrêter Tomcat (affectant les quatre autres applications), supprimer le fichier WAR (et le répertoire des applications Web), redéployer le nouveau fichier WAR et redémarrer Tomcat. .

Bien sûr, cela dérange quelques personnes car il détruit toutes les sessions connectées pour toutes les applications.

Y a-t-il une meilleure manière de faire cela? Je veux dire, y at-il un moyen de ne recharger que la classe qui a changé au lieu de tout sur la machine de développement?

Merci.

89
cbmeeks

Avez-vous essayé d'utiliser application Tomcat's Manager ? Il vous permet de supprimer/déployer des fichiers war sans éteindre Tomcat.

Si vous ne souhaitez pas utiliser l'application Manager, vous pouvez également supprimer le fichier war du répertoire webapps. Tomcat annulera le déploiement de l'application après une courte période. Vous pouvez ensuite copier un fichier war dans le répertoire et Tomcat déploiera le fichier war.

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

Si vous ne pouvez absolument pas avoir de temps d'arrêt, vous pouvez consulter 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 demandes à une version de contexte sont les suivantes:

  • Si aucune information de session n'est présente dans la demande, utilisez la dernière version.
  • Si des informations de session sont présentes dans la demande, recherchez dans le gestionnaire de session de chaque version une session correspondante et, le cas échéant, utilisez cette version.
  • Si les informations de session sont présentes dans la demande mais qu'aucune session correspondante ne peut être trouvée, utilisez la dernière version.
55
Steve K

Il y a plusieurs façons simples.

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

    touch /usr/share/Tomcat/webapps/<WEBAPP-NAME>/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 créer un fichier war complet et de le déployer à nouveau.

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

  2. Généralement, le remplacement du fichier war par la nouvelle version est automatiquement redéployé par Tomcat. Sinon, vous pouvez toucher web.xml comme expliqué ci-dessus.

  3. Copier sur un "répertoire" déjà éclaté dans votre dossier webapps

26
Chirag Katudia

Dans le répertoire conf d'Apache Tomcat, vous pouvez trouver le fichier context.xml. Dans cette balise d'édition en tant que <Context reloadable = "true">. cela devrait résoudre le problème et vous n'avez pas besoin de redémarrer le serveur

20
skal