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 :

mon appli ne marche qu'au démarrage de tomcat


Sujet :

Tomcat et TomEE Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut mon appli ne marche qu'au démarrage de tomcat
    Bonjour à tous

    Je suis en train de développer une application java utilisant des servlets. Voila en résumé comment ça marche :

    Il y a une première servlet qui affiche une page web grace à laquelle l'utilisateur fait une requête. Elle appelle une deuxième servlet qui traite la requête et utilise une librairie spécifique que j'ai téléchargée spécialement pour downloader les données correspondant à la requête sur un serveur en amérique.

    Et voici ce qui m'ennuie beaucoup : Lorsque l'appli démarre et que le client fait sa requête, tout baigne. Mais dés que je veux relancer une requête à partir de la première servlet, la deuxième me retourne une exception. Je suis alors obligé de redémarrer tomcat pour que ça remarche, c'est vraiment casse pieds.

    Alors je me disais que visiblement il y a un problème au niveau de l'initialisation. Est-ce que quelqu'un sait quel type d'erreur on peut avoir fait lorsqu'une appli ne marche qu'à la première utilisation?


    (je suis désolé, je sais que la question est pas super bien posée, mais j'ai du mal moi même à piger le problème et je me dis que peut être quelqu'un à qui c'est arrivé comprendra tout de suite..)

    [edit] : Question posée différemment et d'un autre point de vue ici :
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Aldian Voir le message
    Mais dés que je veux relancer une requête à partir de la première servlet, la deuxième me retourne une exception.
    Si on avait déjà l'exception, non?

  3. #3
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut
    C'est vrai que ça peut paraitre évident, mais en fait c'est une exception compliquée, je m'explique : La librairie que j'ai téléchargée utilise une classe main, que l'on peut appeler en ligne de commande avec des arguments.


    Mais cette classe main ne faisant pas ce que je veux, j'ai ajouté une classe à mon projet qui contient le code de cette classe main (comme ça je ne modifie pas la librairie), que j'ai légèrement modifié, et notamment la méthode main est devenue une méthode statique banale. Pour l'appeler, et afin de ne pas avoir à modifier toute la librairie, je fais comme si j'étais en ligne de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String [] args={"-u","MY_NAME","-h","SERVEUR_ADRESS","-f","temp/"+fileName,"-n","-v","-t","5"};
    String myData = AncMainClass.ancMain(args,requestCache,myJobID);
    (c'est moi qui ait rajouté les deux derniers arguments pour pouvoir tracer un thread.)

    Rappelons que la première fois tout marche bien. Et au deuxième coup (c'est filename qui change), j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Error: Unknown option -u
     
    Usage: program [-h <String>] [-p <Int>] -u <String> [-f <String>] [-v ] [-b <String>] [-a <String>] [-n ] [-t <Int>] [-d <Int>] [-l <String>] [-P <String>] [-s ] [-E ] [-N <String> ...] 
     
     
    Exception while attempting to start gdm: java.lang.IllegalArgumentException: Unknown option -u
    java.lang.IllegalArgumentException: Unknown option -u
            at my.library.ApplicationSettings.printUsage(ApplicationSettings.java:112)
            at my.library.ApplicationSettings.parseInternal(ApplicationSettings.java:166)
            at my.library.ApplicationSettings.parseArgs(ApplicationSettings.java:82)
            at AncMainClass.ancMain(AncMainClass.java:329)
            at CheckAndProcess.processRequest(CheckAndProcess.java:66)
            at CheckAndProcess.doPost(CheckAndProcess.java:266)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
            at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
            at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
            at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
            at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
            at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
            at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
            at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
            at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
            at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
            at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
            at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
            at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
            at java.lang.Thread.run(Thread.java:619)
    voila voilou Je ne l'avais pas mise directement parce que je ne voyais pas trop ce que vous pourriez en tirer, mais c'est vrai que ça va sans doute clarifier le problème. Si vous avez d'autres questions, n'hésitez pas



    [edit] : Question posée différemment et d'un autre point de vue ici :
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ton problème viens du fait que tu appelle une application complète, plusieurs fois, or l'auteur de l'application en questio s'attends probablement pas à ce que son main soit appelé plusieurs fois. Tu vas devoir modifier l'application en question pour en retirer les informations statique, de manière à pouvoir l'appeler plusieurs fois voir "en parallèle!" avec des paramètres différents. Ce problème n'est ni lié à tomcat, ni au servlet, c'est le code que tu appel qui n'est pas "multiusage" .

  5. #5
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut
    Bon merci beaucoup pour ton aide. Au début quand j'ai lu ça je me suis dit misère il va falloir que je décompile toute la librairie (open-source bien sûr) pour traquer les trucs statiques. Mais je viens de regarder plus en détail, et la classe mère est bourrée de trucs statiques, donc il y a moyen qu'en les déstaticant, ça résolve le bug. L'ennui, c'est que pour appeler l'ancienne méthode main statique, il va maintenant falloir commencer par créer l'objet qu'elle va modifier, c'est à dire quand même pas mal de complications en plus, mais ça devrait le faire (j'espère).


    Sinon, concernant mon autre sujet, tu as une idée? Car vu qu'une fois le traitement sur le fichier terminé, je n'ai plus besoin ni de la servlet, ni des méthodes qu'elle appelle, peut être qu'en détruisant les objets, ça permettrait d'appeler le programme plusieurs fois de suite, à défaut de permettre plusieurs usages concurrents, non?


    (ceci dit je suis concient que ça ne résolvera pas tous mes problèmes, vu que je fais une application web pouvant être interrogée par pleins de gens à la fois)
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre chevronné

    Homme Profil pro
    Développeur J2EE Senior
    Inscrit en
    Mai 2008
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur J2EE Senior
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2008
    Messages : 419
    Par défaut


    je viens de terminer de chambouler ma classe. Et oh joie, tout marche nickel impec

    beaucoup
    Mes cours sur l'écosystème Java EE - N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Le problème se situe dans les classes de l'appli que tu utilise, pas celles de la servlet. Ces classes contiennent des champs statiques et tant que la classe sera en mémoire, le données y resteront. Le seul moyen de les nettoyer, c'est de nettoyer le classloader. Tu peux, éventuellement, appeler le programme externe comme n'importe quel programme, avec Runtime.exec(). C'est moins performant, mais au moins tu tombe dans les caractéristiques prévues à la base par l'auteur du prog.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/11/2014, 20h39
  2. [AC-2003] Message d alerte au démarrage de mon appli
    Par adelsunwind dans le forum IHM
    Réponses: 1
    Dernier message: 06/04/2009, 12h24
  3. Mon appli au démarrage de l'OS
    Par demando77 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 03/01/2009, 15h11
  4. Débutant NetBeans et java : mon appli ne marche pas ailleurs
    Par Cazaux-Moutou-Philippe dans le forum NetBeans
    Réponses: 4
    Dernier message: 07/06/2008, 12h59
  5. afficher un GIF transparent au démarrage de mon appli
    Par bandito dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/10/2006, 11h22

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