Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
837 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java/Servlet] Balcer une page d'attente avt le début d'un traitement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java/Servlet] Balcer une page d'attente avt le début d'un traitement

n°645805
scOulOu
Born Under Saturn
Posté le 17-02-2004 à 17:38:36  profilanswer
 

Ca se fait comment, ça ? Parce le traitement est démarré ds la méthode service(...), à l'issue de laquelle la jsp s'affiche, dc je vois pas trop comment faire s'afficher la jsp avant (dites moi si je suis pas clair :D ).
 
Ca se fait, pourtant, donc comment ? Chuis sûr que c'est tout con, en plus...

mood
Publicité
Posté le 17-02-2004 à 17:38:36  profilanswer
 

n°646412
the real m​oins moins
Posté le 18-02-2004 à 01:51:41  profilanswer
 

deux trucs, soit tu fais du out.print(pouet) sans flusher ni sortir de la methode service, mais bon.
soit tu passes par une page d'attente qui raffraichiras qques temps plus tard.
j'suis fan de ni l'un ni l'autre :/


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°647292
scOulOu
Born Under Saturn
Posté le 18-02-2004 à 15:37:17  profilanswer
 

the real moins moins a écrit :

deux soit tu passes par une page d'attente qui raffraichiras qques temps plus tard


Ouais mais cette page d'attente est forct lancée par la méthode service, nan ? Et dc y'a pas moyen de l'afficher avant de lancer le traitement...

n°647593
benou
Posté le 18-02-2004 à 18:27:03  profilanswer
 

c'est décorélé : tu lances le traitement et tu balances la page d'attente. La page d'attente contient un javascript ou un meta expire qui recharge la page automatiqueemnt au bout d'un certain nombre de secondes => si le traitement est en cours tu rebalance la même page, si le traitement est fini, tu balances la page que tu veux


---------------
ma vie, mon oeuvre - HomePlayer
n°648197
scOulOu
Born Under Saturn
Posté le 19-02-2004 à 09:58:28  profilanswer
 

benou a écrit :

c'est décorélé : tu lances le traitement et tu balances la page d'attente. La page d'attente contient un javascript ou un meta expire qui recharge la page automatiqueemnt au bout d'un certain nombre de secondes => si le traitement est en cours tu rebalance la même page, si le traitement est fini, tu balances la page que tu veux


Oui, c'est comme ça que j'essaye de faire, mais c'est le gras qui pose pb : vu que le traitement est lancé ds la méthode service(...), la page d'attente ne s'affiche que lorsque celui-ci est terminé, ce qui ne sert à rien. T'as un moyen de passer outre cela ?
Pr l'instant, un collègue m'a conseillé de lancer mon traitement ds un Thread à part, mais là ce qui coince, c'est qu'il n'y a plus moyen d'avoir le moindre retour du Thread (logique) :/

n°648224
LAs3R
Posté le 19-02-2004 à 10:09:46  profilanswer
 

je sais pas si c'est ç que tu veux...
 
dans ta methode service :
 

Code :
  1. new Thread() {
  2. public void run() {
  3. maMethodeQuiFaitMonTraitement();
  4. }.start();


 
mais j'avoue que c pas ce qui se fait de mieux :/


Message édité par LAs3R le 19-02-2004 à 10:12:47
n°648285
benou
Posté le 19-02-2004 à 10:36:10  profilanswer
 

scOulOu a écrit :


Oui, c'est comme ça que j'essaye de faire, mais c'est le gras qui pose pb : vu que le traitement est lancé ds la méthode service(...), la page d'attente ne s'affiche que lorsque celui-ci est terminé, ce qui ne sert à rien. T'as un moyen de passer outre cela ?
Pr l'instant, un collègue m'a conseillé de lancer mon traitement ds un Thread à part, mais là ce qui coince, c'est qu'il n'y a plus moyen d'avoir le moindre retour du Thread (logique) :/


ben il faut que tu sois capable de savoir quand ton traitement est fini.
 
ex :  

Code :
  1. public class TonTraitement implements Runnable {
  2.     private boolean finished = false;
  3.     public void run() {
  4.         // ... ton traitement ...
  5.         this.finished = true;
  6.     }
  7.     public boolean isFinished() { return this.finished; }
  8. }
  9. // ...
  10. // dans ta méthode service  
  11.    HttpSession session = request.getSession();
  12.    synchronized (session) {
  13.       TonTraitement trait = (TonTraitement) session.getAttribute(WebConstants.Session.TRAITEMENT);
  14.       if (trait == null) {
  15.          trait  = new TonTraitement();
  16.          Thread thread = new Thread(trait, "Web work for user Machin" );
  17.          thread.setDaemon(true); // par sécurité ...
  18.          session.setAttribute(WebConstants.Session.TRAITEMENT, trait);
  19.          thread.start();
  20.          // pour faire les choses bien il faudrait faire un Listener de session qui interompt le thread à la fermeture de la session si il n'est pas encore arrêté ...
  21.       } else if (trait.isFinished()) {
  22.          request.getDispatcher("workDone.jsp" ).forward(request, response);
  23.          session.removeAttribute(WebConstants.Session.TRAITEMENT);
  24.          return;
  25.       } else  {
  26.          request.getDispatcher("workInProgress.jsp" ).forward(request, response);
  27.          return;
  28.       }
  29.    }


Message édité par benou le 19-02-2004 à 10:42:14

---------------
ma vie, mon oeuvre - HomePlayer
n°648319
scOulOu
Born Under Saturn
Posté le 19-02-2004 à 10:52:48  profilanswer
 

benou et LAs3R > ouais c'est un peu comme ça que je voulais éviter de faire ( :D ), mais c'est pas grave, y'a qd même moyen de s'en sortir de cette façon... (et j'avais pas pensé au coup de la session, qui pourrait m'éviter d'avoir à créer une table)
 
Merci tlm :jap:

n°648327
benou
Posté le 19-02-2004 à 10:56:28  profilanswer
 

scOulOu a écrit :

c'est un peu comme ça que je voulais éviter de faire


ben t'as pas trop le choix ...


---------------
ma vie, mon oeuvre - HomePlayer
n°648328
LAs3R
Posté le 19-02-2004 à 10:56:39  profilanswer
 

benou a écrit :


ben il faut que tu sois capable de savoir quand ton traitement est fini.
 
ex :  

Code :
  1. public class TonTraitement implements Runnable {
  2.     private boolean finished = false;
  3.     public void run() {
  4.         // ... ton traitement ...
  5.         this.finished = true;
  6.     }
  7.     public boolean isFinished() { return this.finished; }
  8. }
  9. // ...
  10. // dans ta méthode service  
  11.    HttpSession session = request.getSession();
  12.    synchronized (session) {
  13.       TonTraitement trait = (TonTraitement) session.getAttribute(WebConstants.Session.TRAITEMENT);
  14.       if (trait == null) {
  15.          trait  = new TonTraitement();
  16.          Thread thread = new Thread(trait, "Web work for user Machin" );
  17.          thread.setDaemon(true); // par sécurité ...
  18.          session.setAttribute(WebConstants.Session.TRAITEMENT, trait);
  19.          thread.start();
  20.          // pour faire les choses bien il faudrait faire un Listener de session qui interompt le thread à la fermeture de la session si il n'est pas encore arrêté ...
  21.       } else if (trait.isFinished()) {
  22.          request.getDispatcher("workDone.jsp" ).forward(request, response);
  23.          session.removeAttribute(WebConstants.Session.TRAITEMENT);
  24.          return;
  25.       } else  {
  26.          request.getDispatcher("workInProgress.jsp" ).forward(request, response);
  27.          return;
  28.       }
  29.    }




 
[:darkmavis]

mood
Publicité
Posté le 19-02-2004 à 10:56:39  profilanswer
 

n°648332
benou
Posté le 19-02-2004 à 10:57:32  profilanswer
 

scOulOu a écrit :

Pr l'instant, un collègue m'a conseillé de lancer mon traitement ds un Thread à part, mais là ce qui coince, c'est qu'il n'y a plus moyen d'avoir le moindre retour du Thread (logique) :/


qu'est ce que tu veux comme retour ?
 
tout ce que tu veux garder tu peux le sauver dans la classe TonTraitement dans mon exemple ...


---------------
ma vie, mon oeuvre - HomePlayer
n°648363
scOulOu
Born Under Saturn
Posté le 19-02-2004 à 11:16:16  profilanswer
 

benou a écrit :

qu'est ce que tu veux comme retour ?
 
tout ce que tu veux garder tu peux le sauver dans la classe TonTraitement dans mon exemple ...


En fait je pensais que ds l'appli les rollback() (lors d'une exception pendant le traitement) étaient fait au niveau de la servlet, ce qui aurait été un peu compliqué à mettre en oeuvre (pas possible de catcher une exception lancée ds le Thread), mais il s'avère que c'est plus bas, dc ça rle.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java/Servlet] Balcer une page d'attente avt le début d'un traitement

 

Sujets relatifs
[ CSS ] Saut de page ?effacer le début d'un fichier en evitant une recopie ?
Page incluse ?![Java] encore les hashmaps ! (recup la clé ?)
[JAVA] [Débutant] Mettre en couleur les onglets d'un JTabbedPane ?[JAVA]récupérer une saisie clavier
[JAVA] Polices (Font) dispo en java[html/js] empecher le scrollup d'une page lors de son rafraichissement
[JAVA] Centrer le texte d'une JTextAreanoob ,pb dans mon code, je voudrai creer un page renvoyant a un ftp...
Plus de sujets relatifs à : [Java/Servlet] Balcer une page d'attente avt le début d'un traitement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR