Servlet : Attente au sein d'une webapp

Servlet : Attente au sein d'une webapp - Java - Programmation

Marsh Posté le 26-10-2004 à 16:30:30    

Au sein d'une appli web. Pour l'affichage d'une image, j'ai une servlet entant que source (attribut src) d'une image au sens HTML (balise img). Cette servlet doit vérifier en base de donnée qu'un champ à été positionné sur un valeur donnée, puis envoyer des données d'image en binaire).
Ce champ indique un état en fait. Donc je voudrais que "tant que la valeur du champ est IDL (en attente), on fasse patienter pour l'affichage de l'image, et dès que la valeur est END (tâche terminée), on envoit les données d'image qu'on a à envoyer.
Actuellement, je fais dormir le thread 1 seconde puis revérifier en boucle pendant 2 minutes, avant de renvoyer une erreure.
Comme ceci :

Code :
  1. Statement stmt = null;
  2.         ResultSet r    = null;
  3.         long lStartTime   = System.currentTimeMillis();
  4.         try {
  5.             while (true) {
  6.                 stmt = _c.createStatement();
  7.                 // Génération de la requète SQL
  8.                 String strQuery = "SELECT " + JOB_COLUMNS + " FROM " + JOBS_TABLE + " WHERE "
  9.                     + JOB_COLUMN_JOBID + " = '" + _strJobID + "'";
  10.                 r = stmt.executeQuery (strQuery);
  11.                 if ((r != null) && (r.next()))
  12.                     theJob = ResultSetToJob (_c,r);
  13.                 // Si le job à été traité, rendre dans tous les cas
  14.                 if ((theJob == null) || (theJob.isJobTreated()))
  15.                     break;
  16.                 // Calcule du temps attendu jusqu'alors
  17.                 long lElapsedTime = System.currentTimeMillis() - lStartTime;
  18.                 // Si on ne doit pas attendre ou que le temps à attendre est dépassé
  19.                 if ((_iWait == 0) || (lElapsedTime >= _iWait))
  20.                     break;
  21.                 Thread.sleep(1000);
  22.             }
  23.         } finally {
  24.             if (r != null) r.close();
  25.             if (stmt != null) stmt.close();
  26.         }


 
Le problème est que ceci semble bloquer tomcat (mon moteur de servlets de dev) semble être bloqué durant cette attente : aucune autre connexion possible. Logiquement, ça ne devrait bloquer qu'un seul thread et ne devrait gêner en rien le fonctionnement de tomcat, non !?
D'autres idés ?

Reply

Marsh Posté le 26-10-2004 à 16:30:30   

Reply

Marsh Posté le 26-10-2004 à 16:51:08    

ouais, logiquement, seul 1 thread devrait être impacté ...
qu'est ce qui te fait dire qu eton tomcat est bloqué ? une cooecntion vers un fichier static (servit pas la DefaultServlet) bloque ?

Reply

Marsh Posté le 26-10-2004 à 17:00:03    

je sais que ça ne repond pas à la question, mais tu afficherais pas plutot une image statique du genre "en attente, veuillez reessayer plus tard" ?
 
(avec un bouton refresh a un endroit bien visible pour les neuneus?)


Message édité par the real moins moins le 26-10-2004 à 17:00:24

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 26-10-2004 à 17:53:06    

the real moins moins a écrit :

je sais que ça ne repond pas à la question, mais tu afficherais pas plutot une image statique du genre "en attente, veuillez reessayer plus tard" ?
 
(avec un bouton refresh a un endroit bien visible pour les neuneus?)


 
Non non, parce qu'en principe, l'image apparait au bout d'une à 2 secondes. Et puis je peux pas me permettre de faire cliquer l'utilisateur une fois de plus. On criorait pas, mais c'est souvent tatillon un client !

Reply

Marsh Posté le 26-10-2004 à 17:54:12    

con serait plus approprié [:itm]
 
en fait, ton image n'est jamais generée *avant* que le bordel soit appelé par la servlet?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 26-10-2004 à 17:56:17    

benou a écrit :

ouais, logiquement, seul 1 thread devrait être impacté ...
qu'est ce qui te fait dire qu eton tomcat est bloqué ? une cooecntion vers un fichier static (servit pas la DefaultServlet) bloque ?


 
Je suis pas encore sur à 100%, 'faut que je fasse des tests.
Pas de connexion vers un fichier static.

Reply

Marsh Posté le 26-10-2004 à 17:57:39    

euh t'es sur que                 Thread.sleep(1000); c'est correct? faut pas faire un truc du genre Thread.getCurrentThread().sleep(x) ?  
 
 
(--, n00b total en threads)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 26-10-2004 à 18:00:04    

c'est pareil j'pense. QUand je fais Thread.sleep(1000) ça s'applique au thread courant.

Reply

Marsh Posté le 26-10-2004 à 18:05:53    

hmmm, ouais d'après la javadoc, en effet..


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 26-10-2004 à 18:14:23    

the real moins moins a écrit :

hmmm, ouais d'après la javadoc, en effet..


c'est une méthode static [:spamafote]

Reply

Marsh Posté le 26-10-2004 à 18:14:23   

Reply

Marsh Posté le 26-10-2004 à 18:37:02    

euh, ... ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 26-10-2004 à 21:08:51    

Reply

Marsh Posté le 26-10-2004 à 21:25:53    

ben euh je vois pas bien le lien en fait. (ça doit etre évident, mais je sais pas, moi et les threads...)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 26-10-2004 à 21:59:13    

the real moins moins a écrit :

ben euh je vois pas bien le lien en fait. (ça doit etre évident, mais je sais pas, moi et les threads...)


juste que ca a aucun sens d'appeler une méthode static sur une instance (de Thread ou d'autre chose) [:spamafote]


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 26-10-2004 à 22:02:30    

euh ha ouais ok, j'avais pas tilté [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 27-10-2004 à 11:41:09    

Non, en fait je dis n'importe quoi, excusez moi. Surm on poste c'est nickel. Ce doit être autre chose.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed