No puedo hablar con MyBatis, pero puedo decirle que PostgreSQL tiene integrado un sistema de publicación/suscripción, lo que le permitiría hacer esto con mucha menos piratería.
Primero, configura un activador en widgets
que se ejecuta en cada operación de inserción, actualización y eliminación. Haga que extraiga la clave principal y NOTIFY
widgets_changed, id
. (Bueno, desde PL/pgSQL, probablemente querrá PERFORM pg_notify(...)
.) PostgreSQL transmitirá su notificación siempre y cuando esa transacción se confirme, haciendo que tanto la notificación como los cambios de datos correspondientes sean visibles para otras conexiones.
En el cliente, le gustaría ejecutar un subproceso dedicado a mantener este mapa actualizado. Se conectaría a PostgreSQL, LISTEN
widgets_changed
para comenzar a poner en cola las notificaciones, SELECT * FROM widgets
para completar el mapa y esperar a que lleguen las notificaciones. (Buscar notificaciones aparentemente implica sondear el controlador JDBC
, que apesta, pero no tan malo como podría pensar. Ver PgNotificationPoller
para una implementación concreta). Una vez que vea una notificación, busque el registro indicado y actualice su mapa. Tenga en cuenta que es importante LISTEN
antes del SELECT *
inicial , ya que los registros se pueden cambiar entre SELECT *
y LISTEN
.
Este enfoque no requiere que PostgreSQL sepa nada sobre su aplicación. Todo lo que tiene que hacer es enviar notificaciones; su aplicación hace el resto. No hay scripts de shell, HTTP ni devoluciones de llamadas, lo que le permite reconfigurar/volver a implementar su aplicación sin tener que reconfigurar la base de datos. Es solo una base de datos, y se puede respaldar, restaurar, replicar, etc. sin complicaciones adicionales. Del mismo modo, su aplicación no tiene complejidades adicionales:todo lo que necesita es una conexión a PostgreSQL, que ya tiene.