Bonjour,
J'espère que quelqu'un peut m'aider à trouver une méthode pour détecter le changement de base de donnée.(je travaille avec MySQL)
Bonjour,
J'espère que quelqu'un peut m'aider à trouver une méthode pour détecter le changement de base de donnée.(je travaille avec MySQL)
Bonjour,
Il faut être plus précis... Qu'est ce que tu entends par "détecter le changement de base de données" ?
Est-ce que c'est le changement de la base de données en elle même (MySQL, PostgreSQL, Oracle) ?
Est-ce que c'est un changement du schéma de la base de données ?
Est-ce que c'est un changement de contenu de la base de données (INSERT, UPDATE, ou DELETE)
Est-ce que c'est entre deux redéploiement, ou à chaud sans redémarage de l'application ?
...
Romain.
Bonjour,
merci de me répondre,
je veux que le méthode détecte à chaud sans redémarrage de l'application le changement de la contenu de la base des données par update ou insert.
Bonjour,
j'explique,j’entraine de développer un système d'alarme et ma base des données est en relation avec un autre logiciel qui a la main de modifier le contenu de la base alors je dois détecter cette modification.
merci
Bonjour,
Tu pourrais démarrer un thread qui tourne en "tache de fond" de ton programme et qui toutes les X secondes effectue un SELECT sur a base de données pour vérifier s'il n'y a pas lieu de déclencher une alarme.
Romain.
Ton problème n'est toujours pas clairement exposé. C'est quoi comme système? c'est un batch, une appli web? une appli Destop? comment est il censé tourner? pourquoi et comment notifier du changement? et quel type de changement doit être détectable.Difficile de t'aider si tu ne fais pas un petit effort d'eclaircissement du besoin.
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
C'est une application web (j2ee) qui doit détecter le changement au moment de l'insertion d'un nouvel ligne dans la table ou la modification du valeur d'un champ précis et envoyer l'alerte par email ou sms ,donc j'ai besoin d''une méthode qui check ma base pour savoir s'il eu de changement , je pense à une fonction ajax mais je sais pas comment le faire.
C'est une application web (j2ee) qui doit détecter le changement au moment de l'insertion d'un nouvel ligne dans la table ou la modification du valeur d'un champ précis et envoyer l'alerte par email ou sms ,donc j'ai besoin d''une méthode qui check ma base pour savoir s'il eu de changement , je pense à une fonction ajax mais je sais pas comment le faire.
OK, si c'est une appli web, et si le changement se fait par une autre application, pour ma part je propose 2 alternatives :
-Soit faire évoluer l'autre application qui modifie pour qu'au moment d'effectuer l'opération elle notifie elle même par mail les ayants droits
-Soit déléguer cette tâche à ton SGBD, notamment via des triggers, c'est le seul mécanisme côté SGBD capable de gérer de telles notifications à moindre coût.
Je n'implémenterai pas cette tâche dans l'appli web (avec des Thread comme certains proposeraient), par principe de séparation de fonctionnalité,de soucis de performance, et en dernier ressort pour la simple raison que le jour que ton appli J2EE ne marche plus, eh bien les utilisateurs manqueront d'être notifiés. Mais c'est en effet une réelle problématique je l'accorde.
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
Merci pour votre aide,
mais je n'ai pas le droit de modifier ni l'autre application,ni le SGBD donc je n'ai pas une autre solution que d’utiliser le thread et comme je comprend pour cela j'ai besoin de sauvegarder le temps de dernier changement ou le dernier valeur avez vous une idée pour m'aider s'il vous plait?
Je trouve ça un peu restrictif, et peu évolutif, d'implémenter cette tache au niveau de la base de données. C'est déjà sous-entendre que toute les données qu'il a besoin pour écrire son mail/sms sont enregistrées dans la base de données.
Que faire s'il a besoin de données récupérées d'un LDAP, de Webservices, de fichiers textes ?
Ensuite je trouve que c'est surtout une question de goût, et de compétence. J'imagine que s'il poste ici, il est plutôt développeur Java, et dans ce sens, développer la solution coté applicatif me parait plus simple pour lui !
Romain.
Pour créer des thread je t'invite à lire un tutoriel : http://alwin.developpez.com/tutorial/JavaThread/
Pour effectuer des requêtes vers la base de données depuis Java : http://jguillard.developpez.com/JDBC/
Pour envoyer des mails je te conseil la librairie commons e-mail : http://commons.apache.org/proper/commons-email/
Pour les SMS aucune idée, je ne l'ai jamais fait.
Je n'aurai pas le temps de tout te développer, éventuellement si tu bloques sur un point précis, poste ton problème et on pourra t'aider.
En gros il faut que ton thread effectue des SELECT à intervalles réguliers sur la base de données, tu peux garder en mémoire le nombre de ligne dans une table, puis vérifier si entre deux SELECT le nombre de ligne a changé, s'il a changé tu envoie un mail.
Romain.
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
DevServlet évoque un point intéressant. Si jamais tu a une colonne "dateCreation" dans ta table par exemple, tu peux garder en mémoire la date à laquelle a été effectué ton dernier SELECT, et chercher tous les enregistrements qui ont eu lieu après celui-ci.
Mais bon tout ça dépend de ton modèle de données, on ne peut pas le savoir pour toi si tu ne données pas plus de détails.
Mais à mon avis ce n'est pas ça qui te pose problème. C'est plutôt de savoir comment effectuer des requêtes sur la base de données, et comment créer des thread ?
ROmain.
Tes inquiétudes soulevées sur la solution sont hélas bien justifiées, en effet c'est l'inconvénient d'une solution axée sur un SGBD, traçabilité et maintenabilité, mais ceci à l'avantage d'un traitement centralisé et opérationnel indépendamment des applications connectées.En le faisant coté transactionnel, pour le besoin attendu, il faut supposer un seul instant que l'application soit HS. Vu que ce n'est pas elle qui est censée effectuer ces mises à jour, les utilisateurs en attente de ces modifications n'en sauront rien. Pour moi à la limite c'est un batch Java qui devrait le faire. J'ai du mal à comprendre pourquoi c'est à une application J2EE non responsable de la modification des données qui est responsable d'en constater les notifications.
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
le problème c'était que je ne possède pas la colonne "dateCreation" dans ma bd et l'autre problème c'est le thread mais votre solutionm'aide à trouver la solution de mon 1er problème merciEn gros il faut que ton thread effectue des SELECT à intervalles réguliers sur la base de données, tu peux garder en mémoire le nombre de ligne dans une table, puis vérifier si entre deux SELECT le nombre de ligne a changé, s'il a changé tu envoie un mail.
Il faut rester lucide et réaliste là , si :
-S'Il faut exclure les triggers
-S'il y'a absence de colonnes permettent d'identifier les créations (et les modifications de lignes)
Comment par miracle vas tu détecter qu'une ligné a été modifiée dans un intervalle de temps?
Vous avez peut être hâte de réussir et il n'y a rien de mal à cela...
mais la patience est aussi une vertu; l'échec vous l'enseignera certainement..."
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager