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

Servlets/JSP Java Discussion :

servlet et threads


Sujet :

Servlets/JSP Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Points : 44
    Points
    44
    Par défaut servlet et threads
    Bonjour,

    J'ai:
    1 navigateur avec formulaire <form> méthode POST
    1 servlet (de nom Search)
    1 programme java multithreadé.

    Ca me fait ... une application web (enfin j'aimerais bien).

    Mon formulaire html communique par méthode POST avec la servlet.
    Celle-ci est censée démarrer le programme Java (en appelant la méthode letsgo() de l'objet StartSearch):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     
    StartSearch myStart = new StartSearch(userLogin);
    myStart.letsgo();

    Dans la classe StartSearch se trouve la méthode letsgo():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public void letsgo() throws IOException{
     
    ...
     
    new Thread(new SearchFrom(Provider.XXX, "country", thisUser, userequest)).start();
     
    ...
     
    }
    Mon problème: le Thread qui crée l'objet SearchFrom(...) ne démarre pas ...

    Quelqu'un a une idée, ou est-ce que, en étant débutant en développement de servlets, j'omets quelque chose ?


    Merci d'avance

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    A mon avis il démarre, mais ça ne se voit pas sur le retour de la servlet.

    Je ne sais pas ce que fait ton objet SearchForm, il implémente Runnable je suppose, peut-être en as-tu besoin ailleurs... ce qui est sûr, c'est que tu te complique la vie dans le cadre d'une servlet qui est déjà multi-thread.
    A chaque request correspond un thread, du coup, as-tu vraiment besoin d'une méthode de Thread ?

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Points : 44
    Points
    44
    Par défaut Re: servlet et thread
    Hello,

    Merci pour la réponse rapide.

    Le thread ne démarre pas puisque il est censé écrire des choses en BDD, chose qu'il ne fait pas lorsque je le lance depuis la servlet.

    Toutefois, lorsque je lance le letsgo() depuis eclipse "Run as Java Application", celui ci fonctionne très bien et écrit bien en base.

    Une supposition que je faisais était que la servlet se terminait avant que le thread de SearchFrom n'ait le temps de se terminer. Mais j'ai testé en faisant écrire 100.000 mots à la servlet, pour laisser le temps à SearchFrom de s'exécuter. Mais en vain ... le thread ne s'est pas davantage lancé ...

    J'ai bien besoin de ces threads SearchFrom...


    En résumé SearchFrom implemente bien Runnable, et lance à son tour d'autres threads (après avoir setupé pas mal de variable et séparé différents cas possibles) sous la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
     
    new Thread(new ProcessRequest(provider, personRequested, tabSearchByCountry)).start();

    Quand à ProcessRequest, il interroge des webservices puis en fonction des résultats, écrit des choses en BDD ...


    une idée ?? :-)

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Très certainement un problème de "packaging" de ton application.
    Comment déploies-tu les ressources jar ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Je teste le formulaire web avec Tomcat lancé sous eclipse, je ne déploie pas l'application directement sur le serveur.

    Le projet global sous eclipse est un Dynamic Web Project.

    Penses-tu que je devrais déployer un WAR sur le serveur pour voir si ça fonctionne ?

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Ce que tu pourrais essayer dans un premier temps c'est de mettre une trace avant/après la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    
    new Thread(new SearchFrom(Provider.XXX, "country", thisUser, userequest)).start();
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Salut,

    Après plus ample investigation, il s'avère que les threads s'exécutent bien, mais que le programme plante lorsqu'il entre dans la première de ces lignes, qui se trouvent dans le thread de l'objet ProcessRequest

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    XPathFactory factory = XPathFactory.newInstance();
    XPath xPath=factory.newXPath();
    Curieux ... une idée ?

  8. #8
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Il faudrait fournir une trace ou une exception... comme ça, ce n'est pas possible de t'aider, j'ai raté l'option "devin" à l'époque (certes très lointaine) de mes études
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 62
    Points : 44
    Points
    44
    Par défaut
    Salut,

    Oui c'est bien ce que je me suis dit aussi ce matin en me levant, que je n'allais pas trouver la solution avec si peu d'infos ... ;-)

    Alors j'ai généré des beaux logs qui m'ont donné ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.RuntimeException: XPathFactory#newInstance() failed to create an XPathFactory for the default object model: http://java.sun.com/jaxp/xpath/dom with the XPathFactoryConfigurationException: javax.xml.xpath.XPathFactoryConfigurationException: No XPathFctory implementation found for the object model: http://java.sun.com/jaxp/xpath/dom
    Et après quelques recherches, il s'est avéré que le répertoire de tomcat TOMCAT\common\endorsed ne contenait pas toutes les librairies du projet suivantes :

    xalan.jar
    xerces.jar
    xml-apis.jar

    Ou en tous cas pas les mêmes versions.

    Dans TOMCAT\common\endorsed, j'ai donc remplacé les librairies existantes par celles de mon projet.

    Et hop ça fonctionne !!!


    Merci pour ton aide !!!

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

Discussions similaires

  1. Servlet et Thread non exécutée
    Par hapalemur dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 10/03/2015, 21h25
  2. Servlet et thread
    Par Spiritkill dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 31/05/2011, 16h41
  3. Probleme récurrent, threads/EJB/Servlets
    Par tinico dans le forum Weblogic
    Réponses: 18
    Dernier message: 26/11/2009, 09h04
  4. Servlet multi-thread ?
    Par mrjeronimo dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 04/11/2009, 22h54
  5. Problème de servlet mono-thread !
    Par solven dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 13/10/2006, 10h44

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