IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tomcat et TomEE Java Discussion :

Code HTTP pour les applications non démarrées


Sujet :

Tomcat et TomEE Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Par défaut Code HTTP pour les applications non démarrées
    Bonjour,
    Voici mon problème: j'ai un webservice REST en Java sur Tomcat qui est accédé par des processes automatiques. Ces processes demandent des informations sur des objets métiers et prennent des actions en conséquence.
    Notamment, lorsque l'objet métier demandé n'est pas disponible, le webservice retourne le code HTTP 404.
    Le problème est que Tomcat retourne également 404 lorsque la webapp en question n'est pas démarrée. C'est logique du point de vue de tomcat, mais pas du point de vue de l'application cliente: d'un point de vue plate-forme globale, il est "normal" d'avoir un objet métier non trouvé, mais il est anormal de ne pas avoir la webapp qu'on demande (quelle qu'en soit la raison, crash, maintenance, etc.). De ce point de vue, il serait plus adéquat que tomcat retourne un code HTTP 5xx (500, 501, 503).
    La question est donc: est-il possible de dire à Tomcat de retourner un 50x au lieu d'un 404 lorsqu'une webapp demandée n'est pas disponible?
    Merci pour votre aide,
    Emmanuel
    PS: la version de tomcat est la 6.0.24

  2. #2
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Tomcat non démarré devrait... être en mesure de retourner quelque chose????

    En pure Tomcat, non, tu ne peux rien faire... une appli non démarrée ne peut rien retourner... Par contre, la solution est de mettre en place un reverse proxy Apache, et en jouant avec la config, tu pourras retourner un code d'erreur plus parlant... Par exemple, un 503 - Service Unavailable qui est fait pour...

    C'est de toute façon plutôt une bonne pratique de cacher Tomcat (ou n'importe quel serveur JEE) derrière un proxy...

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Par défaut
    Hello Pill_S,

    Merci pour ta réponse, mais je pense que je me suis mal exprimé: Tomcat est bien démarré, mais pas la webapp qu'il hoste.

    Imaginons que mon tomcat possède 2 webapp: mywebapp1 (démarrée) et mywebapp2 (non démarrée).
    1. Si je demande http://myhost/mywebapp1/index.jsp, j'aurai le résultat de index.jsp, puisque la webapp est démarrée.
    2. Si je demande http://myhost/mywebapp2/index.jsp, Tomcat est bien up mais me retournera un 404 puisque la webapp n'est pas démarrée => Ma question est de savoir si on peut forcer tomcat à retourner 503 dans ce cas précis uniquement.

    Merci,
    Emmanuel

  4. #4
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    Hello,

    j'en doute fortement... On peut lire ici: http://tomcat.apache.org/tomcat-8.0-...er-howto.html:

    Stop an Existing Application

    http://localhost:8080/manager/text/stop?path=/examples
    Signal an existing application to make itself unavailable, but leave it deployed. Any request that comes in while an application is stopped will see an HTTP error 404, and this application will show as "stopped" on a list applications command.
    ... ils ne laissent pas vraiment entendre que c'est quelque chose de configurable...

    De toute façon, tu auras beaucoup plus de souplesse avec un Apache frontal, à la limite qui saura si un chemin est légal ou pas et qui saura retourner un 404 ou un 503...

    A noter aussi, que certains outils, comme http://www.modsecurity.org/rules.html, font justement de la réécriture de codes http afin de rendre la tâche plus difficile aux intrus (ie. il n'est pas fondamentalement faux d'avoir du 404 par défaut, que la resources soit indisponible, non trouvée, ou non autorisée)...

  5. #5
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Salut,

    J'imagine que ce n'est pas possible de forcer Tomcat à changer sa réponse..

    Mais si c'est dans le cas de test automatique, tu peux toujours avant de lancer le test sur ton objet, faire un GET sur une Servlet de ton application qui te retourne un message prédéfini (genre "coucou c'est moi!") et qui, en cas d’erreur 404 te permet toi d'en déduire que ton service n'est pas accessible.

    En gros tu ping une servlet avant de lancer ton test.

    Edit : Bon en fait c'est con puisque tu auras le même résultat si Tomcat n'est pas démarré et tu auras le même problème dans l'autre sens..

  6. #6
    Candidat au Club
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mars 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 4
    Par défaut
    Bonjour,

    Une solution qui m'a été proposée est la suivante: déclarer une webapp ROOT qui réponde 503 à toutes les requêtes sur l'ensemble du Tomcat. Si Tomcat est démarré avec cette application, on aura 503. Si on démarre une webapp sur un contexte donné, alors ce contexte va surcharger la webapp root et répondre normalement. Et si cette webapp est arrêtée, alors on récupèrera le 503.
    Qu'en pensez-vous?
    Merci

    Emmanuel

  7. #7
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut
    J'en pense que c'est un hack, et que, comme tout hack, même si ça marche, c'est une mauvaise idée... il se passe quoi si par mégarde on supprime la webapp root? si le tomcat se plante?

    En fonction de ton besoin et du contexte, ça peut suffire... Mais la seule vraie bonne réponse, qui restera valide quel que soit le contexte et le niveau d'exigence en terme de qualité, c'est le proxy...

Discussions similaires

  1. [Outil] Zenerator, générateur de code pour les applications ZF
    Par Janitrix dans le forum Zend Framework
    Réponses: 31
    Dernier message: 05/11/2009, 21h30
  2. [WinForms] Skin pour les applications .net
    Par algerian dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 30/06/2006, 11h31
  3. Réponses: 8
    Dernier message: 22/05/2006, 09h25
  4. [C#] Skin pour les applications .net
    Par algerian dans le forum Windows Forms
    Réponses: 2
    Dernier message: 25/04/2006, 11h13
  5. Réponses: 3
    Dernier message: 04/10/2005, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo