Bonjour,
   J'ai une erreur très étrange qui me dépasse complètement.
   Voilà, la logique de mon application est simple.
   J'affiche index.jsp : dedans, j'ai un lien vers ma servlet /LaunchServlet.
   Voici le contenu de ma servlet LaunchTest : 
     
	
	1 2 3 4 5 6 7
   | HttpSession session = request.getSession();
        session.setAttribute("finished" , "false");
        System.out.println("Avant  : " + session.getAttribute("finished") + " - " + session.getId());
        Thread t = new LaunchTestThreads(session);
        t.setPriority(Thread.MAX_PRIORITY);
        t.start();
        getServletContext().getRequestDispatcher("/attente.html").forward(request, response); | 
     Ma servlet lance donc un Thread puis affiche la page attente.html
   Le Thread lancé contient ce code : 
	
	1 2 3 4 5 6 7 8 9 10 11
   | public void run() {
        try {
            System.out.println("Avant pause  : " + s.getAttribute("finished") + " - " + s.getId());
            Thread.sleep(10000);
            s.setAttribute("finished", "true");
            System.out.println("Après pause : " + s.getAttribute("finished") + " - " + s.getId());
        } catch (InterruptedException ex) {
            Logger.getLogger(LaunchTestThreads.class.getName()).log(Level.SEVERE, null, ex);
        }
 
    } | 
    Il est donc sensé mettre le flag "finished" à true au bout de 10 secondes.
    La page attente.html lorsqu'elle est lancée charge un script Ajax qui appelle ma servlet IsFinished : 
	
	1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   | HttpSession session = request.getSession();
            String reponse = (String)session.getAttribute("finished");
            int i = 0;
            while (i < 15) {
                reponse = (String)session.getAttribute("finished");
                System.out.println("is Finished tour "+ i +" : " + session.getAttribute("finished") + " - " + session.getId());
                if (reponse != null) {
                    if (reponse.equals("true")) {
                        System.out.println("Terminé");
                        out.print(reponse);
                        i=15;
                    }
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(isFinished.class.getName()).log(Level.SEVERE, null, ex);
                }
                i++;
            } | 
    Malheureusement, j'obtiens des choses très étranges : 
   Le contenu de ma servlet LaunchTest n'est quelques fois pas exécuté. En fait, la page attente.html est affichée mais cette ligne de code de LaunchTest 
	
	System.out.println("Avant  : " + session.getAttribute("finished") + " - " + session.getId());
  n'est pas affichée et le Thread ne semble jamais lancé.
   Si je fais un refresh sur LaunchTest, tout fonctionne normalement...
   Quelqu'un comprend il ce qui se passe?
Merci 
						
					
Partager