Programowanie reaktywne w języku Scala


Zarządzanie stanem aktorów

Utrwalanie i odtwarzanie stanu

  • W celu utrwalania stanu aktora, używamy wzorca Event Sourcing zaimplementowanego w bibliotece Akka persistence oraz Akka Typed Persistance.
  • Przykładowy projekt używający persystencji Akki
    git clone https://github.com/agh-reactive/reactive-lab4
    
  • Proszę sprawdzić zachowanie aktora PersistentBankAccount przy kilkukrotnym uruchomieniu projektu. Co się zmienia, gdy wyślemy do niego komunikat Snap?
  • Proszę sprawdzić zachowanie aktora TypedPersistentBankAccount przy kilkukrotnym uruchomieniu projektu.
  • Projekt wykorzystuje wbudowaną bazę danych LevelDB do zapisu dziennika zdarzeń. Pliki bazy tworzone są w katalogu target/journal/. (dla eventów) oraz target/snapshot/. (dla snapshotów).
  • Baza używa wbudowanej implementacji w Javie, co skonfigurowane jest w pliku src/main/resources/application.conf.
  • Przykład użycia persystencji dla aktora wykorzystującego context.become() zamieszczony jest w pliku: PersistentToggle.scala.
  • Przykład użycia persystencji dla aktora wykorzystującego Akka Typed zamieszczony jest w pliku: TypedPersistentToggle.scala.

Zadanie

Do implementacji zadań proszę użyć szablonu: https://github.com/agh-reactive/reactive-scala-labs-templates/tree/lab-4
  1. (15 pkt) Persystencja koszyka. Proszę zaimplementować persystencję stanu koszyka przy pomocy mechanizmu event sourcingu. Proszę zwrócić uwagę na poprawne odtwarzanie timerów.
  2. (15 pkt) Proszę zaimplementować persystencję stanu aktora PersistentCheckout/TypedPersistentCheckout i przetestować scenariusz, w którym w trakcie operacji checkout-u aplikacja zostaje przerwana (np. poprzez system.terminate). Po ponownym uruchomieniu stan aplikacji powinien być poprawnie odtworzony (łącznie z timerami).
  3. (10 pkt) Proszę napisać testy dla klasy PersistentCartActor (tak, aby oprócz standardowych operacji uwzględniały również odtwarzanie stanu aktora).


Bartosz Baliś, balis at agh edu pl
Maciej Malawski, malawski at agh edu pl
Katarzyna Rycerz, kzajac at agh edu pl