Transactional w warstwie serwisu czy dao

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.

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...
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.
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 :)

1

"Transactional w warstwie serwisu czy dao"

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

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…

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

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