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

Hibernate Java Discussion :

Être à l'écoute de modification de la bdd or contexte Hibernate


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 70
    Points
    70
    Par défaut Être à l'écoute de modification de la bdd or contexte Hibernate
    Bonjour,

    Je suis en train de faire une application standalone avec une connection sur une base de donnée.
    La base de données me sert à enregistrer des informations saisies.
    J'aimerais informer mon application qu'une modification à eu lieu dans ma base de donnée (suppression d'un enregistrement,modif...).
    Est ce que Hibernate peut m'aider dans ce sens ?

    Merci pour vos réponses.

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par jeffciara
    Bonjour,

    Je suis en train de faire une application standalone avec une connection sur une base de donnée.
    La base de données me sert à enregistrer des informations saisies.
    J'aimerais informer mon application qu'une modification à eu lieu dans ma base de donnée (suppression d'un enregistrement,modif...).
    Est ce que Hibernate peut m'aider dans ce sens ?

    Merci pour vos réponses.
    Tu veut qu'Hibernate t'indique les modifications faites par quoi ? Si c'est les modifications faites par ton programme, ca doit être possible, par contre, tu ne pourras pas être tenu au courant des modifications faites par un autre programme...

  3. #3
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 70
    Points
    70
    Par défaut
    Salut,

    Dans mon programme, il y a une partie visualisation des commandes.
    J'aimerais que cette partie du programme dispose d'un écouteur sur les changements de ma table commande (de la base de donnée ).

    Par exemple , en utilsant un programme d'acces à ma base de donnée (phpmyadmin pour ne pas le citer), je supprime une commande. Je veux que mon programme soit au courant de ce changement et accéssoirement réaffiche la liste des commandes modifiée.

    Je voudrais savoir quel programme me permetrait d'être en écoute des evenements sur une base de donnée et si hibernate était un tel programme outre le fait qu'il soit un outil de mapping ..

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Ceci est tout bonnement impossible.

    La seule chose que tu peux faire est d'avoir dans te tables un champ donnant la date de dernière modif d'un enregistrement. Puis d'avoir un thread dans ton appli qui toutes les x minutes va vérifier la valeur max de ce champ dans les différentes tables et agit en conséquence

  5. #5
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 70
    Points
    70
    Par défaut
    hummm qui a changé l'intitulé?

    Merci pour ta réponse sinok.
    Ou alors de verifier la date de modification des fichiers de la base de données.

    Mais alors que peut m'apporter hibernate de plus que le mapping?
    Je ne comprend pas très bien la notion de persistance..

  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 : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    A part le mapping hibernate te permet de gérer le pooling, le caching et plein d'autres choses.
    Réfère toi à la doc hibernate.
    Mais ce que tu cherches n'existe pas, a moins que les SGBD se mette à l'événementiel, chose qui est dans l'ensemble peu recommandable (un serveur de bases de données a déja beaucoup d'autres choses à gérer, là ça ferait un tant soit peu lourd, et puis vois le nombre d'implémentations différentes qu'il faudrait)

  7. #7
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 70
    Points
    70
    Par défaut
    Effectivement pour l'implementation...
    Pour la doc hibernate j'ai regardé un peu la FAQ, je me suis imprimé la documentation de réference hibernate j'ai aussi un chapitre de doudoux qui en parle, mais bon tout çà n'est pas très explicite... Tu n'aurais pas une doc conçise précise et facile car là je capte pas bien ..je dois etre pourrave ou alors pourrave ;-)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Sauf que les triggers je les vois plutôt mal communiquer avec une appli externe...

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    j ai relu la question, et supprimé ma réponse hibernate ne fournit pas ce qu il désire (mais un trigger peut également être composé d un appel à une proc stocké qui elle fait appel à un prog externe)

  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    sql server par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    Syntax
     
    xp_cmdshell {'command_string'} [, no_output]
     
    Arguments
     
    'command_string'
     
    Is the command string to execute at the operating-system command shell. command_string is varchar(255) or nvarchar(4000), with no default.
     
    no_output
     
    Is an optional parameter executing the given command_string, and does not return any output to the client.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    ça reste très limité tout de même, pour signaler à une appli externe déja exécutée (voire distante) de recharger ses données ^^. En fait on a pas du interpréter la notion de la même façon

  12. #12
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 70
    Points
    70
    Par défaut
    Grace à vos réponses je sais désormais ce qu'est un trigger.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TRIGGER avertir AFTER INSERT ON commande
     FOR EACH ROW BEGIN
      /* ici faudrait appeler une procédure stockée*/
     END
    C'est le code d'un trigger en mysql mais je sais pas si je peux ajouter une procédure stockée qui ferait appel à un prog externe...

    Je vais me renseigner. Mais là on part sur un autre terrain qu'hibernate ? ou va t-il nous aider dans cette tache ?

    a toute..

  13. #13
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 70
    Points
    70
    Par défaut
    humm pour le script externe, je crois que c'est raté cf . http://www.developpez.net/forums/sho...hlight=externe

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Au final faire joujou avec les Triggers et les procédures stockées est largement moins élégant que la solution que je t'ai donné.

    Il suffit de créer un thread qui toutes les x secondes va interroger la DB, regarde le max de la colonne indiquant le dernier update, le compare à la valeur qu'il a stockée et agit en conséquence si besoin est.

    Hibernate dans ton cas, et dans tous les cas d'ailleurs ne sert que pour interroger et modifier la base de données, ce n'est pas non plus un outil magique.

    Plonges toi dans la doc de référence(qui de plus est en français) pour en cerner les limites, bienfaits, problèmes... Et arrête de vouloir faire quelquechose qui est à la limite du bancal et ne te donnera aucun résultat satisfaisant.

  15. #15
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 70
    Points
    70
    Par défaut
    Devoir interroger la base tous les x secondes alors que elle même sait quand il y eu une modification me parait bien plus bancal, en tout cas dans la façon de programmer.
    Je ne connais pas après l'impact que peut avoir une interrogation répétée multipliée par le nombre de personne qui ont lancé l'application...à mon avis mauvais.
    Créer un trigger me parait bancal aussi d'autant + que Mysql en est au prémisse.
    Mais le principe est viable à mon sens.
    A voir ce que nous reserve les prochaines versions ...

    En tout cas le sujet est clos hibernate ne peut pas faire ce que je demande cela
    n'est pas son rôle.

  16. #16
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    le seul intérêt dans ton contexte est de pouvoir réutilisé ton trigger par diverses applications ...

  17. #17
    Membre régulier
    Inscrit en
    Février 2006
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 117
    Points : 70
    Points
    70
    Par défaut
    oui en effet mais cela est valable à priori pour sql server pas encore pour mysql...

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est simple: le lien entre le trigger et le listener java n'existe pas, les SGBD ne sont pas fait pour ça.

    Un moyen simple sinon pour toi serait d'avoir un serveur java centralisant toutes les demandes d'insertion/modifications et les effectuant lui même puis redispatchant l'informations sur les divers client qui lui sont connectés (cf webservices). De cette façon tu palies au manques du SGBD.

    Le problème auquel tu te frottes est une des limitations intrinsèques de clients standalone: ils sont seuls ^^. De même du coté SGBD: il ne stocke jamais les adresses des clients qui se connecte à lui et est de ce fait incapable de leur faire parvenir des informations en dehors du cadre d'une transaction initiée par le client.

    Ensuite pour la mise à jour sans passer par un serveur, tout dépend du nombre de client, de la fréquence des refresh demandés par le client à la base, de ton SGBD et du server sur lequel il se trouve, mais ton SGBD est prévu pour affronter de nombreuses demandes simultanées, et de petites interrogations telles que je te le propose (ce ne sont pas de batchs de fous furieux avec des jointures externes ternaires ou quaternaires qui récupèrent la moitié de la base) ne sont que menu fretin pour le serveur. Il faut savoir raison garder, ce genre d'interrogations à un impact minimal sur ton serveur alors que la procédure que tu veux lancer a un impact plutôt lourd (lancer une commande système n'est pas bénin non plus)


    Accessoirement comment crois tu que les systèmes de monitoring des SGBD fonctionnent: un threads et des requêtes tous les X secondes....
    Il n'y a rien de sorcier la dedans.

    oui en effet mais cela est valable à priori pour sql server pas encore pour mysql...
    Et seulemennt en faisant du .NET

  19. #19
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    Et seulemennt en faisant du .NET
    j ai fumé ou ne peut pas créer de thread et utilisé des stored procedures ou trigger en Java ?

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Utiliser les triggers depuis java ça m'étonnerait un peu (c'est tout de même la tambouille interne du SGBD, ce serait mal de les déclencher à la main), les storedProcedures par contre c'est possible : CallableStatement

    Et j'ai du lire un peu vite dsl

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] Modification et suppression bdd avec php
    Par stefanelle dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 20/02/2009, 11h22
  2. [MySQL] Modif php attribut BDD
    Par masseur dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/10/2008, 15h28
  3. jLabel et modification dans une bdd
    Par jbmen dans le forum JBuilder
    Réponses: 1
    Dernier message: 23/04/2008, 00h46
  4. RECUPERATION DE MODIFICATION D'UNE BDD
    Par HellBlood dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 31/03/2008, 19h36
  5. delete ajout modif dans la BDD
    Par jojojojo57 dans le forum Bases de données
    Réponses: 8
    Dernier message: 19/03/2007, 20h38

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