Weekcasus 2

Aggregates en optimistic locking

Les 3 - onderdeel 2

Leerdoel

Na deze uitleg kan je, voor twee gelijktijdige gebruikers:

  1. een sequence stap voor stap tracen;
  2. de kritieke sectie aanwijzen: findById(...) t/m save(...);
  3. voorspellen wat in de database staat met en zonder optimistic locking.

Casus: twee gebruikers reserveren bijna tegelijk een zitplaats.

Twee aggregate-opties naast elkaar

Optie 1: 1 aggregate Optie 2: losse aggregates
Vertoning is root, Zitplaats zit erin. Vertoning en Zitplaats hebben elk hun eigen grens.
Meer kans op conflict op dezelfde versie. Minder onnodige conflicts bij verschillende stoelen.

Sequence trace - model 1 (1 aggregate)

Sequence trace - model 2 (losse aggregates)

Met vs zonder optimistic locking

Met locking Zonder locking
1e save(...) slaagt, 2e conflicterende save(...) geeft exception. Beide save(...) calls lijken te slagen.
1 gebruiker merkt niets, 1 gebruiker krijgt foutmelding. Geen foutmelding, maar laatste save(...) wint.
Conflicten zijn zichtbaar. Lost update: data kan afwijken van verwachting.

Tracing-opdracht

  1. Markeer in het sequence-diagram de kritieke sectie (findById t/m save).
  2. Volg de precieze volgorde van methode-uitvoer in de tijd van twee (of meer) gelijktijdige gebruikers.
  3. Geef de eindstatus in de database voor:
    • met optimistic locking
    • zonder optimistic locking