IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Rafraichissement automatique d'une page JSP sur mise à jour d'une table


Sujet :

Servlets/JSP Java

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Rafraichissement automatique d'une page JSP sur mise à jour d'une table
    Bonjour,

    Je suis en train de chercher une solution afin de prévenir l'utilisateur d'un événement en base de données mise à jour par un programme extérieur. Je m'explique : l'utilisateur se trouve sur une page JSP qui liste les 20 derniers dossiers. Or, l'objectif est que la page se rafraichisse automatiquement (ou du moins qu'il soit prévenu) si le champ "STATUT" d'un de ces dossiers change.
    L'application tourne en JAVA/Oracle. J'ai trouvé qu'il fallait utiliser un trigger sur cette table qui provoque sur l'update un DBMS_ALERT.
    Le souci maintenant est de trouver un moyen à Java pour qu'il puisse intercepter cette alerte (je pensais à une applet, ou à AJAX, ...).
    Je suis preneur si quelqu'un à une idée.
    Merci beaucoup!!

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Dans la mesure où tu veux aviser un utilisateur sur son browser, tu devrais le faire par de l'AJAX.
    Tu fais un appel toutes les n secondes pour vérifier, et si une modification est intervenue, tu peux afficher un message de demande de rechargement de la page.

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse rapide.

    La requete qui tourne en boucle, c'est justement ce que je souhaite éviter.
    Je pensais + à une solution de type "un démon" qui tourne en fond et qui capture le DBMS_ALERT.

    Et sinon, sais-tu comment j'attaque le DBMS_ALERT dans le cas d'une boucle comme tu le préconises ?

    Merci bcp.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Je ne connais pas le DBMS_ALERT mais d'après la recherche rapide que j'ai faite, tu peux enregistrer une procédure.
    Cette procédure pourrait enregistrer sur le serveur un flag pour dire qu'une modification a été faite (via un socket par exemple, c'est ce qui parraît le plus simple).
    Ta servlet (ou ton action struts) appelée par AJAX n'aurait qu'à lire le flag pour notifier l'utilisateur

    (c'est une idée)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    A quel niveau enregisterais-tu le flag sur le serveur?
    Et comment mettrais-tu en place ton socket ?

    Merci.

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par altiman Voir le message
    A quel niveau enregisterais-tu le flag sur le serveur?
    Ça dépend un peu de la portée que tu souhaites lui donner
    Citation Envoyé par altiman Voir le message
    Et comment mettrais-tu en place ton socket ?
    Ça, ça dépend des languages que tu peux utiliser pour les procédures...
    En java, une adresse IP et un port suffisent pour établir la connexion...

    Mais sinon, tu peux faire plus simple et utiliser une table spéciale de la base de données pour enregistrer le "changement" (un champ timestamp serait judicieux)
    Ton action n'aura qu'à relire l'enregistrement pour savoir qu'un changement a eu lieu et faire ce qu'il faut
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Mais sinon, tu peux faire plus simple et utiliser une table spéciale de la base de données pour enregistrer le "changement" (un champ timestamp serait judicieux)
    Ton action n'aura qu'à relire l'enregistrement pour savoir qu'un changement a eu lieu et faire ce qu'il faut
    J'y ai pensé aussi mais cela implique une requete à executer en boucle...ce q ue je veux éviter (trop d'utilisateurs).

    Pour le flag sur le serveur, il faudrait le placer de manière à ce que la servlet y ait accès. Tu as une idée ?

    Merci.

  8. #8
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Dans ce cas, tu peux utiliser une Applet comme tu l'avais proposé.

  9. #9
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Peux-tu m'aider dans quelle direction partir pour l'applet ?

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Ben par exemple tu fais communiquer ton applet avec ton serveur par socket comme l'a souligné OButterlin.

  11. #11
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Et comment j'envoie de la base de données vers le socket ?

  12. #12
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Soit tu fais communiquer ton programme extérieur avec ton serveur (voire directement avec ton applet), soit il faut que ton serveur aille vérifier la valeur en base à intervalle régulier et mette à jour l'applet.

  13. #13
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Honnêtement, je ne pense pas que l'applet soit plus intéressante qu'un appel AJAX.
    Pour ce qui est du nombre élévé des utilisateurs, tu n'as pas besoin que chaque utilisateur soit source d'une requête vers la base de données.
    Tu pourrais utiliser un Thread qui sonde à intervalle régulier la valeur de l'enregistrement et qui fasse une copie dans une zone commune (contexte application par exemple, ou un bon vieux System.properties().getProperty(name) et System.properties().setProperty(name, value),...)
    Ensuite, la requête AJAX consiste à lire cette valeur et à l'interpréter.

    Tu vois mieux ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Le problème d'ajax dans ce cas, est chaque client va effectuer des requêtes pour voir si la donnée a été mise à jour. Ça peut surcharger inutilement le serveur.
    L'applet elle, se met en attente de l'envoi de la nouvelle donnée par le serveur, quand il l'aura décidé.

Discussions similaires

  1. Réponses: 6
    Dernier message: 14/03/2014, 11h03
  2. Contrôle sur les champs d' une pages JSP
    Par amine1980 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/03/2007, 08h38
  3. Réponses: 13
    Dernier message: 27/11/2006, 11h17
  4. Forcer l'affichage d'une page jsp sur un ecran 800*600
    Par menzlitsh dans le forum Struts 1
    Réponses: 2
    Dernier message: 25/10/2006, 10h22
  5. Comment créer et executer une page jsp sur eclipse et tomcat
    Par debutantjak dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 16/03/2006, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo