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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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