Hibernate - nasłuchiwanie zmian w bazie

Odpowiedz Nowy wątek
2018-12-03 15:53
0

Witam.

Chciałbym się dowiedzieć czy istnieje jakiś prosty sposób do sprawdzenia czy w bazie zaszły jakieś aktualizacje (usunięcie, aktualizacja, dodanie rekordu do i z tabeli)
Czy hibernate udostępnia jakieś metody nasłuchu?
Odpytywanie o zmiany nie jest zbyt ciekawym rozwiązaniem.
Ewentualne jakieś trigger'y.

Pozdrawiam.

Te zmiany mogą pochodzić tylko z tej samej aplikacji czy również innych zewnętrznych serwisów? - eL 2018-12-03 17:02
integracja przez bazę danych to prawie zawsze zły pomysł - hcubyc 2018-12-03 18:15
@hcubyc: odpowiadaj w postach to + dostaniesz - abrakadaber 2018-12-03 19:38

Pozostało 580 znaków

2018-12-03 16:11
0

@caprio: da się zrobić Listenery na zdarzenia związane z Hibernatem tak jak tutaj: https://www.boraji.com/hibernate-5-event-listener-example. Ale nie znam żadnej możliwości żeby sam Hibernate nasłuchiwał bezpośrednio BD


Nie pomagam przez PM. Pytania zadaje się na forum.

Pozostało 580 znaków

2018-12-03 19:39
2

posłuchaj @hcubyc i nie idź tą drogą


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2018-12-04 07:16
1

W architekturze z więcej niż jednym klientem śledzenie zmian w bazie będzie trudne. Teoretycznie dałoby się coś skręcić, jakieś tam triggery na on update + wywoływanie zewnętrznego serwisu, w praktyce - nie chcesz tego robić. Poszukaj raczej rozwiązań takich jak Apache Kafka.

Pozostało 580 znaków

2018-12-04 09:02
0

A serwer pośredniczący pomiędzy kilkoma klientami i bazą wchodzi w grę?

Pozostało 580 znaków

2018-12-04 09:28
0

Jak chcesz temat od strony baz ugryźć, to jest to możliwe . Słowa klucze: "Change Data Capture". Tyle, że to temat rzeka.

Do tego na bazach "enterprajzowych" masz możliwość tworzenia kolejek i publikowania w nich zmian za pomocą triggerów.
Do takich kolejek mogą się podpinać zainteresowane aplikacje. Możesz mieć więc model "publish-subsribe point-2-point".

W jakim celu chcesz tego używać?

Do integracji jest to średni pomysł, bo możesz mieć te same dane i 2 istotnie różne scenariusze, które generują tę samą zmianę (np. nowa umowa vs cesja umowy - w obydwu przypadkach pojawią Ci się nowe umowy) albo (płatność vs wycofanie płatności - saldo się zmieni). Jednak patrząc tylko na dane, to zgubisz trochę informacji, albo Twój proces wykrywania zmian będzie się rozrastał i będzie trudny w utrzymaniu.

edytowany 1x, ostatnio: yarel, 2018-12-04 09:29

Pozostało 580 znaków

2018-12-04 09:50
0

Chodzi o jak najszybsze poinformowanie klientów, że jeden z nich zmienił dane w bazie (dodał, zmodyfikował, usunął rekord w tabeli).

Pozostało 580 znaków

2018-12-04 11:40
2

Jeśli twoi klienci bezpośrednio wszyscy grzebią w bazie i nie da się tego zmienić to:

  1. popłacz 5 minut nad swoją architekturą, to i tak j..nie,
  2. Zainteresuj sie kafka confluent

Jeśli można archiekturę zmienić to klasycznie: dostep do bazy zakryj serwisem web( serwer posredniczący). A do informowania klientów użyj jakiegos messagingu: kafka, activemq, websockets, sse. Zależy co pasuje.


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 4x, ostatnio: jarekr000000, 2018-12-04 11:44

Pozostało 580 znaków

2018-12-04 13:54
0

Jeśli używasz bazy danych Oracle (pewnie nie), a zapytanie, którego zmianę wyniku chcesz nasłuchiwać jest w miarę proste, możesz użyć Oracle Database Notification: https://docs.oracle.com/cd/E1[...]e16548/dbchgnf.htm#JJDBC28815

Raz gdzieś z tego korzystałem i nawet działało.


Podobnie można zrobić w mysql https://github.com/shyiko/mysql-binlog-connector-java tylko to nadal raczej dziwaczne rozwiązanie. - jarekr000000 2018-12-04 15:27

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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