2011-01-04 14 views
13

Saludos a todos Quiero hacer algo como un disparador o un oyente (no sé qué) que escuchará en una tabla de base de datos específica, y con cada nuevo registro insertado en esta tabla, haga un código java, me refiero que detecta que se insertó un nuevo registro y obtener sus datos si es posible Necesito alguna guía sobre cómo se puede lograr este proceso?¿Cómo hacer un oyente de base de datos con Java?

estoy usando Hibernate-Primavera-PostgreSQL

+0

Creo que después de leer todos los comentarios y que voy a implementar mi propia solución. Voy a utilizar JMS de todos modos, así que cuando un cliente actualiza la base de datos a través de JMS send, enviaré un mensaje JMS a todos los clientes que los datos han cambiado ... parece ser la única manera garantizada de hacerlo, ya que los desencadenantes parecen ser una pesadilla y Polling es una solución horrible. – JPM

Respuesta

10

Esto es lo que LISTEN/NOTIFY fue creada.

El único inconveniente es que tendrá que tener algún tipo de hilo de fondo que sondee la base de datos regularmente para ver si hay notificaciones disponibles.

También puede usar el código de la Postgres Wiki tener un punto de partida

+0

No está sondeando la base de datos ... su sondeo del cliente: http://jdbc.postgresql.org/documentation/publicapi/org/postgresql/PGConnection.html#getNotifications() –

+0

@ AdamGent: por supuesto que está sondeando el servidor . El cliente (PGConnection) preguntará al servidor "¿hay algún mensaje?". –

+0

Tal vez estoy leyendo wireshark mal, pero juro que parecía que el controlador pg recibía las notificaciones sin pedirlas. Leí que Postgres había agregado algo de soporte asíncrono y asumí que esto podría ser algo de eso. –

1

Puede agregar Interceptor a su configuración de Hibernate para detectar eventos guardados.

Cuestiones relacionadas