2011-01-04 3 views
13

Grüße alle ich so etwas wie ein Auslöser oder einem Zuhörer tun wollen (ich weiß nicht, was), die auf einer bestimmten Datenbanktabelle hören, und mit jedem neuen Datensatz in dieser Tabelle eingefügt, einige Java-Code, ich meine, dass es entdeckt, dass ein neuer Datensatz eingefügt wurde und seine Daten erhalten, wenn es möglich ist Ich brauche eine Anleitung darüber, wie dieser Prozess durchgeführt werden kann?Wie erstellt man einen Datenbank-Listener mit Java?

Ich bin mit Spring-Hibernate-PostgreSQL

+0

Ich denke, alle Kommentare nach der Lektüre und so, dass ich meine eigene Lösung würde implementieren. Ich werde JMS trotzdem verwenden, also wenn ein Client die Datenbank über JMS send aktualisiert, werde ich eine JMS-Nachricht an alle Clients senden, dass sich die Daten geändert haben .. scheint die einzige garantierte Möglichkeit zu sein, dies zu tun, wie Auslöser scheinen ein Albtraum und Polling ist eine schreckliche Lösung. – JPM

Antwort

10

Dies ist, was LISTEN/NOTIFY erstellt wurde.

Der einzige Nachteil ist, dass Sie irgendeine Art von Hintergrund-Thread, fragt die Datenbank in regelmäßigen Abständen, um zu sehen haben müssen, wenn irgendwelche Meldungen verfügbar sind.

Sie können auch den Code aus den Postgres Wiki verwenden, um einen Ausgangspunkt haben

+0

Ihr nicht Abfrage der Datenbank ... Ihre Abfrage der Kunde: http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/PGConnection.html#getNotifications() –

+0

@AdamGent: natürlich Sie Polling sind der Server . Der Client (PGConnection) fragt den Server "Gibt es irgendwelche Nachrichten?". –

+0

Vielleicht lese ich Wireshark falsch, aber ich schwöre es sah aus, als ob der Pg-Treiber die Benachrichtigungen erhalten würde ohne nach ihnen zu fragen. Ich habe gelesen, dass Postgres etwas asynchrone Unterstützung hinzugefügt hat, und nahm an, dass dies ein Teil davon sein könnte. –

1

Sie könnten eine Interceptor auf Ihre Hibernate-Konfiguration hinzufügen speichern Ereignisse zu erkennen.

Verwandte Themen