Não posso falar com o MyBatis, mas posso dizer que o PostgreSQL tem um sistema de publicação/assinatura integrado, o que permite fazer isso com muito menos hackers.
Primeiro, configure um gatilho em
widgets
que é executado em cada operação de inserção, atualização e exclusão. Faça com que extraia a chave primária e NOTIFY
widgets_changed, id
. (Bem, de PL/pgSQL, você provavelmente gostaria de PERFORM pg_notify(...)
.) O PostgreSQL transmitirá sua notificação se e quando essa transação for confirmada, tornando a notificação e as alterações de dados correspondentes visíveis para outras conexões. No cliente, você deseja executar um thread dedicado a manter esse mapa atualizado. Ele se conectaria ao PostgreSQL,
LISTEN
widgets_changed
para começar a enfileirar notificações, SELECT * FROM widgets
para preencher o mapa e aguarde a chegada de notificações. (A verificação de notificações aparentemente envolve a pesquisa do driver JDBC
, o que é péssimo, mas não tão ruim quanto você imagina. Consulte PgNotificationPoller
para uma implementação concreta.) Depois de ver uma notificação, procure o registro indicado e atualize seu mapa. Observe que é importante LISTEN
antes do SELECT *
inicial , pois os registros podem ser alterados entre SELECT *
e LISTEN
. Essa abordagem não exige que o PostgreSQL saiba nada sobre seu aplicativo. Basta enviar notificações; seu aplicativo faz o resto. Não há scripts de shell, HTTP e callbacks, permitindo que você reconfigure/reimplante seu aplicativo sem também ter que reconfigurar o banco de dados. É apenas um banco de dados e pode ser feito backup, restaurado, replicado etc. sem complicações extras. Da mesma forma, seu aplicativo não tem complexidades extras:tudo o que ele precisa é de uma conexão com o PostgreSQL, que você já possui.