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

EDT/SwingWorker Java Discussion :

Méthode de rafraichissement d'un thread


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut Méthode de rafraichissement d'un thread
    Bonjour,

    Je me demandais comment mettre en place un thread pour rafraîchir automatiquement un bloc.

    Je m'explique, j'ai une application multi-poste.
    Imaginons un Poste 1, il met a jour les données du bloc.

    J'aimerais que sur le poste 2, quasi-instantané, j'ai le rafraîchissement du bloc.

    Pour obtenir ce rafraîchissement, je pensais :
    -Mettre un thread de cadencement rapide 1s.
    -Mettre un écouteur.
    -->Suite à l'écouteur provoquer le rafraîchissement du bloc.

    l'écouteur serait une requête SQL!

    Ce qui me gêne c'est le thread de cadencement de 1s, qui risque de perturbé et ralentir grandement l'application et le serveur BDD. Car ça obligerait a exécuter une requête SQL toutes les secondes sur tous les postes.

    Je cherche une méthode ou pratique pour ce genre de problème.
    Comment y remédier?

    Merci

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2007
    Messages : 64
    Points : 189
    Points
    189
    Par défaut
    Juste une idée au passage, tu pourrais peut être utiliser RMI en ayant un serveur sur lequel les 2 clients se connectent et mettent à jour les données qui sont répercutés sur tous les clients?

  3. #3
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    J'ai compris ton idée.
    Mais dans mon cas, chaque postes devra être client et serveur à la fois sans config préalable.

    Le seul serveur en commun est une connexion à une base de donnée.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    la bdd se trouve ou?

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    la bdd se situe:
    -soit sur un serveur externe
    -soit sur un poste client.

    J'ai représenté ci joint le schéma type que je pensais appliquer :
    Images attachées Images attachées  

  6. #6
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Pas forcément la meilleure idée d'architecture.

    Dans ce genre de cas, afin de pouvoir gérer les interactions avec la base de données de façon unique, et de pouvoir pousser une notification directe en cas de modification aux autres clients, on préfère intercaler un serveur proposant des services de type SOAP/REST/RMI ou autres entre la base de données et les clients. De plus cela de permet d'éviter d'embarquer les users / mots de passe de la base au niveau de client, et d'éviter d'ouvrir la base en accès direct à tout le monde.

    Plus de tracer de façon propre qui a fait quoi.


    L'archi que je proposerait est de créer donc des services SOAP ou REST selon ta préférence pour chaque action disponible dans ton application (au sens fonctionnel, pas au sens base de données). Chaque service ira ensuite faire la ou les actions nécessaire en base une fois l'appel effectué par le client.

    Ensuite, pour notifier les clients qu'une nouvelle version des données a été effectuée, il est préférable de publier cette information en un endroit ou elle sera disponible pour chaque client. Pour celà, un topic JMS est une solution plutôt accordée.

    Suite à chaque create/update/delete correctement en base, le serveur d'application balance un message sur le topic JMS, topic sur lequel écoutent l'intégralité des clients.
    A chaque message posté sur le topic, les client vont être notifiés du message et directement exécuter le code que tu auras préparé à cet effet.


    Schéma d'archi:
    Images attachées Images attachées  
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  7. #7
    Membre habitué
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Mai 2008
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 382
    Points : 191
    Points
    191
    Par défaut
    Merci pour ta réponse Sinok

    La BDD n'est pas forcément ouverte à tous le monde car elle peut être associé a une adresse IP fixe.

    L'application que je développe est une solution pour gérer sa comptabilité.
    Le client a le choix sur le serveur BDD, soit interne soit externe.
    Si externe c'est un paramétrage de l'accès à la BDD manuel.

    Si j'ai bien compris, la meilleure solution serait de mettre un fichier intermédiaire.
    -Ce fichier serait écouté par un thread de cadencement (attentif au changement).
    -Dans le cas de modification de la BDD on le notifie dans le fichier.

    Le problème de passer par les services SOAP/REST/RMI impose de passer par un serveur intercaler. Ce qui impose les clients a avoir accès a un fichier en commun.

    Si il y a une autre méthode que de passer par un fichier intermédiaire, je préfère.
    Car dans le cas de mon application, l’intérêt d'avoir accès a la BDD en externe a surtout l'avantage de pouvoir travailler sur une autre machine.
    Il n'y aura généralement pas plus de 2 clients connectés en simultaner sur la même BDD.

Discussions similaires

  1. Méthode bloquante et pool de threads
    Par kaporal974 dans le forum Général Java
    Réponses: 3
    Dernier message: 09/05/2014, 14h52
  2. Arrêter une méthode qui s'exécute en Thread
    Par Mister Nono dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 27/10/2008, 12h43
  3. Questions sur méthodes d'un objet appelant threads
    Par med365 dans le forum Général Python
    Réponses: 8
    Dernier message: 26/06/2008, 16h14
  4. thread et méthodes static
    Par sylpichard dans le forum MFC
    Réponses: 3
    Dernier message: 02/06/2004, 18h12
  5. [SWING][THREAD]Méthodes pour afficher une Frame
    Par pompidouwa dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 05/05/2004, 11h35

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