Transactional w warstwie serwisu czy dao

Transactional w warstwie serwisu czy dao
LU
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gdańsk
0
  1. Gdzie stosujecie / rekomendujecie zapinanie @Transactional? W warstwie serwisu czy "niżej" w jakimś dao?
    Drugie podejście wydaje się sensowne bo czesto dopiero na końcu coś zapisujemy / zmieniamy na bazie po wykonaniu
    "wyżej" w serwisie jakichś reguł biznesowych ewentualnie jakiś odczyt z bazy ale to nie musi być w transakcji
    plus po wywołaniu zapisu na dao mamy pewność, że był commit (jeżeli nie było wyjątku) więc możemy normalnie
    beż żadnej magii np. wysłać powiadomienie / wrzucić na kolejkę etc. Z drugiej strony jak nasz serwis zależy od
    innych, które coś zmieniają na bazie to nie ma wyboru i trzeba zastosować to pierwsze podejście.

  2. Czy używacie @Transactional(readOnly = true)? Z jednej strony niepotrzebnie wpływa na wydajność a z drugiej
    pilnuje aby metoda na pewno była tylko do odczytu plus bez niej lazy loading nie zadziała jeśli używamy hibernate.

99xmarcin
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2420
1
  1. Na serwisie.
  2. Często readOnly = true to no-op i ani niczego nie pilnuje, ani nic nie zmienia. Sprawdź jak się z twoim "dostawcą" JDBC zachowa...
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
2
  1. Tam gdzie potrzebujesz transakcji ;) Jeśli twoje metody serwisu wykonują kilka operacji bazodanowych i chcesz zeby było "wszystko albo nic" to musisz zrobić transakcje właśnie na tym poziomie. Transakcja na jakimś DAO w ogóle nie bardzo ma sens, bo robisz tam jedną operacje.
Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1910
2

Jw. w dużej mierze jest to pytanie o ziarnistość transakcji, granice agregatów itd. Transakcje powinny być najmniejsze jak się da, ale nie mniejsze :)

SH
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 69
1

"Transactional w warstwie serwisu czy dao"

@Transactional ? Nigdzie.
Transakcje pisane "ręcznie", kodem

Skoq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 255
0
Stój Halina napisał(a):

"Transactional w warstwie serwisu czy dao"

@Transactional ? Nigdzie.
Transakcje pisane "ręcznie", kodem

Skoro w projekcie jest spring to po co ręcznie to robić? Sam nie jestem jakimś wielkim fanem springa ale używanie go z głową nie powinno powodować wielu problemów. Już nie przesadzajmy…

PI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2787
3
Skoq napisał(a):
Stój Halina napisał(a):

Transakcje pisane "ręcznie", kodem

Skoro w projekcie jest spring to po co ręcznie to robić? Sam nie jestem jakimś wielkim fanem springa ale używanie go z głową nie powinno powodować wielu problemów. Już nie przesadzajmy…

Tylko że oprócz @Transactional, można użyć TransactionTemplate, również ze Springa, a daje większą kontrolę - https://www.baeldung.com/spring-programmatic-transaction-management

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.