Powiadomienie aplikacji o zmianach w bazie danych

0

Witam,

zajmuję się pisaniem aplikacji, która nie wdając się w szczegóły ma komunikować się z bazą danych. Aplikacja łączy się lokalnie z bazą PostgresSQL, za pomocą JDBC. Bazę danych może aktualizować zewnętrzna aplikacja kliencka, która może np. tworzyć nowe zamówienia. I teraz moje pytanie: jak powiadomić aplikację o tym, że w bazie doszło do zmian? Przychodzi mi do głowy taki pomysł:

  1. Utworzyć wątek, który co jakiś czas sprawdzi czy w bazie danych zmieniono dane jakiejś tabeli i jeśli tak się stało, to wątek dokona aktualizacji wewnętrznych kolekcji, tak aby dane przechowywane w kolekcjach były identyczne z danymi z tabeli

Jednak zastanawiam się nad tym czy istnieją inne sposoby: np, aby baza w jakiś sposób potrafiła wysłać zdarzenie, a w aplikacji można by ustawić słuchacza i w nim obsłużyć odpowiedź na konkretne zdarzenie.

Czy może jest jakieś inne rozwiązanie?

0

Ja bym zwyczajnie zrobił jakiś rekord i przy każdej modyfikacji danych ustawiał nową datę(w tym rekordzie). Program przy uruchomieniu sprawdzałby, czy data się różni od tej, którą ma zapisaną. Myślę, że nie ma co tutaj się jakoś męczyć szczególnie.

0

Pomysł w sumie dobry tylko, że dane mogą zmieniać się dynamicznie w trakcie działania programu i trzeba by być w miarę na bieżąco z bazą. Bo generalnie z bazy korzysta aplikacja kliencka, która może składać zamówienie i to zamówienie powinna obsłużyć aplikacja "serwerowa" łącząca się z bazą lokalnie

0

Wydaje mi się, że najłatwiej robić jest jednak "nasłuch" bazy zamiast kombinować z wysyłaniem zdarzeń przez bazę. Ja wielokrotnie realizowałem właśnie taki scenariusz. Aplikacja kliencka po prostu zmienia zawartość bazy (np dodaje rekord lub go modyfikuje) a aplikacja, która ma to nadzorować odpytuje bazę, czy coś się zmieniło. Rekordy mają np. jedno pole np. IsReadByMaster i aplikacja nadzorująca zbiera tylko rekordy, które mają tam ustawione False, a następnie po odczycie zmienia odczytane rekordy na true.

0

Możesz też przygotować odpowiednie triggery po stronie Postgresa (on update, on insert). Triggery ten mogą być obsługiwane przez jakiś język proceduralny po stronie Postgresa (nawet pl/Java) i powiadamiać aplikację kliencką o zmianach (np. poprzez socket łączący się do (local)hostu)

1 użytkowników online, w tym zalogowanych: 0, gości: 1