Postgres-Trigger zum Aktualisieren des Java-Cache

Ich habe eine Java-Webanwendung (WAR für Tomcat bereitgestellt), die einen Cache verwaltet (Map<Long,Widget>) in Erinnerung. Ich habe eine Postgres-Datenbank, die a enthältwidgets Tabelle:

widget_id | widget_name | widget_value
(INT)       (VARCHAR 50)  (INT)

Zur O / R Karte zwischenWidget POJOs undwidgets Tabelleneinträge verwende ich MyBatis. Ich möchte eine Lösung implementieren, bei der der Java-Cache (die Karte) in Echtzeit aktualisiert wird, wenn ein Wert in derwidgets Tabellenänderungen. ichkönnte Haben Sie eine Polling-Komponente, die die Tabelle alle 30 Sekunden überprüft, aber Polling fühlt sich hier einfach nicht als die richtige Lösung an. Also hier ist was ich vorschlage:

Schreiben Sie einen Postgres-Trigger, der eine gespeicherte Prozedur aufruft (run_cache_updater())Die Prozedur führt abwechselnd ein Shell-Skript aus (run_cache_updater.sh)Das Skript base-64 kodiert das Geändertewidgets Zeichnen Sie den verschlüsselten Datensatz auf und wandeln Sie ihn in eine HTTP-URL umDas Java WAR hat ein Servlet, das die cURLed-URL überwacht und alle verarbeitetHttpServletRequests geschickt, um es. Es Base-64 dekodiert den Datensatz und wandelt ihn irgendwie in einWidget POJO.Der Cache (Map<Long,Widget>) wird mit dem richtigen Schlüssel / Wert aktualisiert.

Diese Lösungfühlt sich Umständlich, und deshalb frage ich mich zuerst, wie ein Java / Postgres-Guru da draußen mit einer solchen Situation umgehen würde. Ist Umfragen hier die bessere / einfachere Wahl (bin ich nur stur?) Gibt es eine andere / bessere / bessere Standardlösung, die ich übersehen habe?

Wenn nicht, und diese Lösung ist die Standardmethode zum Übertragen geänderter Datensätze von Postgres in die Anwendungsebene. Dann wird erstickt, wie der Auslöser, die gespeicherte Prozedur und das Shell-Skript so geschrieben werden, dass das gesamte Skript übertragen wirdwidgets Datensatz wird an die cURL-Anweisung übergeben. Vielen Dank im Voraus für jede Hilfe hier.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage