2011-01-04 11 views
13

Saluti tutti Voglio fare qualcosa come un trigger o un listener (non so cosa) che ascolterà su una tabella specifica del database, e con ogni nuovo record inserito in questa tabella, fare un po 'di codice java, intendo che rileva che è stato inserito un nuovo record e ottiene i suoi dati se è possibile Ho bisogno di una guida su come questo processo può essere realizzato?Come creare un listener di database con java?

Sto usando Primavera-Hibernate-PostgreSQL

+0

Penso che dopo aver letto tutti i commenti e così ho intenzione di implementare la mia soluzione. Userò comunque JMS, quindi quando un client aggiorna il database tramite JMS send, invierò un messaggio JMS a tutti i client che i dati sono stati modificati .. sembra l'unico modo garantito per farlo, poiché i trigger sembrano essere un incubo e Polling è una soluzione orribile. – JPM

risposta

10

Questo è ciò che è stato creato per LISTEN/NOTIFY.

L'unico inconveniente è che è necessario disporre di una sorta di thread in background che esegue il polling del database su base regolare per verificare se sono disponibili eventuali notifiche.

È anche possibile utilizzare il codice dal Postgres Wiki di avere un punto di partenza

+0

Non interrogare il database ... il polling del client: http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/PGConnection.html#getNotifications() –

+0

@AdamGent: ovviamente si sta interrogando il server . Il client (PGConnection) chiederà al server "ci sono messaggi?". –

+0

Forse sto leggendo "wirehark" errato, ma giuro che sembrava che il driver pg stesse ricevendo le notifiche senza chiedere loro. Ho letto che Postgres ha aggiunto del supporto asincrono e ha ipotizzato che questo potrebbe essere un po 'di quello. –

1

È possibile aggiungere uno Interceptor alla configurazione di Hibernate per rilevare gli eventi di salvataggio.