2012-12-03 19 views
5

Ho un attore di livello superiore (sotto il guardiano), chiamato Groups che all'avvio deve caricare l'elenco di gruppi dal database e creare un gruppo di attori secondari basato su quei gruppi nel database.Qual è il modo migliore per inizializzare un attore dal database

Ho inserito il codice di caricamento del database all'interno della funzione preStart in quanto non desidero che i messaggi vengano elaborati prima che i gruppi vengano caricati.

Attualmente l'attore Groups è simile a questo;

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 
} 

Comunque io non credo che questo è il modo migliore per gestire questa situazione, come quello che succede se il server di database non è disponibile? Quindi qual è il modo migliore di gestire l'inizializzazione dei dati da un database?

risposta

1

L'Akka documentation spiega come supervisionare gli attori di massimo livello per la tolleranza di errore.

È possibile applicare i principi lì per gestire le eccezioni che si possono trovare se il DB non è disponibile.

+0

Grazie, ho preso le idee da quella pagina e le ho utilizzate nel mio disegno. cioè avendo separato gli attori Storage/DB. Vorrei che ci fosse un esempio di codice su come gestire le connessioni del database. – Phenix

Problemi correlati