Mam aktora najwyższego poziomu (pod opiekunem), o nazwie Groups
, który na starcie musi załadować listę grup z bazy danych i stworzyć grupę dzieci-aktorów na podstawie tych grup w bazie danych.Jaki jest najlepszy sposób inicjowania aktora z bazy danych?
Umieściłem kod ładowania bazy danych wewnątrz funkcji preStart
, ponieważ nie chcę, aby jakiekolwiek wiadomości były przetwarzane przed załadowaniem grup.
Obecnie mój aktor Groups
wygląda następująco;
var groups: Map[String, ActorRef] = Map()
override def preStart() = {
groups = getGroupsFromDB() map createGroup
}
def createGroup(pair: (String, Long)) = {
val (name, id) = pair
val group = context.actorOf(Props(new Group(id, name)), name = name)
name -> group
}
Jednak nie sądzę, że jest to najlepszy sposób, aby poradzić sobie z tym, co się stanie, jeśli serwer bazy danych nie jest dostępny? Jaki jest najlepszy sposób obsługi inicjowania danych z bazy danych?
Dzięki, wziąłem pomysły z tej strony i wykorzystałem je w moim projekcie. tj. z wydzielonymi podmiotami Storage/DB. Szkoda, że nie było próbki kodu, jak zarządzać połączeniami z bazą danych. – Phenix