27 votes

Récupérer des événements à partir d'une base de données

Je ne suis pas très familier avec les bases de données et ce qu'elles offrent en dehors des opérations CRUD.

Mes recherches m'ont amené à déclencheurs . En gros, il semble que les déclencheurs offrent ce type de fonctionnalité :

(de Wikipedia )

Il y a généralement trois événements déclencheurs qui font que les déclencheurs se "déclenchent" :

  • événement INSERT (lors de l'insertion d'un nouvel enregistrement dans la base de données).
  • Événement UPDATE (lorsqu'un enregistrement est modifié).
  • Événement DELETE (lors de la suppression d'un enregistrement).

Ma question est la suivante : existe-t-il un moyen d'être notifié en Java (de préférence avec les données qui ont changé) par la base de données lorsqu'un enregistrement est mis à jour/supprimé/inséré en utilisant une sorte de sémantique de déclenchement ?

Quelles pourraient être les solutions alternatives à ce problème ? Comment puis-je écouter les événements de la base de données ?

La raison principale pour laquelle je veux faire cela est un scénario comme celui-ci :

J'ai 5 applications client, toutes dans des processus différents/existant sur différents PC. Elles partagent toutes une base de données commune (Postgres dans ce cas).

Disons qu'un client modifie un enregistrement dans la base de données qui intéresse les cinq autres clients. J'essaie de trouver des moyens pour que les clients soient "notifiés" de la modification (de préférence avec les données concernées en pièce jointe) au lieu qu'ils demandent les données à un certain intervalle.

12voto

Javamann Points 1937

Avec Oracle, vous pouvez configurer un déclencheur sur une table, puis faire en sorte que le déclencheur envoie un message JMS. Oracle dispose de deux implémentations JMS différentes. Vous pouvez ensuite avoir un processus qui "écoutera" le message en utilisant le pilote JDBC. J'ai utilisé cette méthode pour apporter des changements à mon application plutôt que d'interroger les utilisateurs. Si vous utilisez une base de données Java (H2), vous disposez d'options supplémentaires. Dans mon application actuelle (SIEM), j'ai des déclencheurs dans H2 qui publient des événements de changement à l'aide de JMX.

11voto

time4tea Points 1437

Ne confondez pas la base de données (qui contient les données) et les événements sur ces données.

Les déclencheurs sont une possibilité, mais normalement, vous aurez une couche de persistance dans votre application. Cette couche peut choisir de déclencher des événements lorsque certaines choses se produisent, par exemple vers un sujet JMS.

Les déclencheurs sont une solution de dernier recours, car vous opérez alors sur des éléments relationnels, plutôt que sur des "événements" sur les données. (Par exemple, une "mise à jour" pourrait en réalité correspondre à un événement "changement de nom légal de la société") Si vous vous fiez à la base de données, vous devrez faire correspondre les insertions et les mises à jour à des événements réels.... que vous connaissez déjà !

Vous pouvez ensuite superposer d'autres éléments à ces notifications - comme le traitement du flux d'événements - pour trouver des événements qui intéressent les autres.

James

8voto

Hmm. Donc vous utilisez PostgreSQL et vous voulez "écouter" les événements et être "notifié" quand ils se produisent ?

http://www.postgresql.org/docs/8.3/static/sql-listen.html http://www.postgresql.org/docs/8.3/static/sql-notify.html

J'espère que cela vous aidera !

4voto

tpdi Points 18427

L'appel de processus externes à partir de la base de données est très spécifique au fournisseur.

Juste sur le dessus de ma tête :

  • SQLServer peut appeler des programmes CLR à partir de déclencheurs,

  • postgresql peut appeler un C arbitraire arbitraires chargées dynamiquement,

  • MySQL peut appeler des fonctions C arbitraires, mais elles doivent être compilées,

  • Sybase peut effectuer des appels système si le paramètre si elle est configurée pour le faire.

3voto

Gandalf Points 2916

Je suis tombé sur ce http://docs.oracle.com/cd/E14072_01/java.112/e10589/dbchgnf.htm dans oracle.

Pour recevoir les notifications de modification de la base de données, attachez un écouteur à l'enregistrement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X