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 :
- Statement stmt = null;
- ResultSet r = null;
- long lStartTime = System.currentTimeMillis();
- try {
- while (true) {
- stmt = _c.createStatement();
- // Génération de la requète SQL
- String strQuery = "SELECT " + JOB_COLUMNS + " FROM " + JOBS_TABLE + " WHERE "
- + JOB_COLUMN_JOBID + " = '" + _strJobID + "'";
- r = stmt.executeQuery (strQuery);
- if ((r != null) && (r.next()))
- theJob = ResultSetToJob (_c,r);
- // Si le job à été traité, rendre dans tous les cas
- if ((theJob == null) || (theJob.isJobTreated()))
- break;
- // Calcule du temps attendu jusqu'alors
- long lElapsedTime = System.currentTimeMillis() - lStartTime;
- // Si on ne doit pas attendre ou que le temps à attendre est dépassé
- if ((_iWait == 0) || (lElapsedTime >= _iWait))
- break;
- Thread.sleep(1000);
- }
- } finally {
- if (r != null) r.close();
- if (stmt != null) stmt.close();
- }
|
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 ?