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