Slick con Play: update db dall'esterno di un controller DBAction

voti
0

Ho un gioco di applicazione in cui sono la gestione della comunicazione database utilizzando Slick.

Tutto funziona senza problemi fino ad ora, ma ho il seguente problema: Ho un attore Akka che comunica con i sistemi remoti, ottiene i dati da questi sistemi e deve aggiornare il database utilizzando questi dati.

Ora, io ho alcuni metodi nel modello che aggiornano il db, ma si aspettano un parametro sessione implicita: se la chiamata a questi metodi viene dalle azioni di controllo, dal momento che sono DBActions, che gestiscono automaticamente la sessione, ma se voglio richiamare questi metodi al di fuori del controllo (vale a dire, da quegli attori), dovrei creare la mia propria sessione (utilizzando Database.fromURL)? Potrebbe interferire con quella creata e gestita dal controllore automaticamente?

È pubblicato 07/05/2014 alle 15:18
dall'utente
In altre lingue...                            


1 risposte

voti
3

Ottenuto curioso e fatto qualche scavo, la DBActionclasse estende il CurrentDBActiontratto che ha un metodo apply:

def apply[A](dbName: String, bodyParser: BodyParser[A] = anyContent)(requestHandler: DBSessionRequest[A] => SimpleResult)(implicit app: Application = null) = {
  val current = db(dbName, Option(app))
  applyForDB(current)(requestHandler)(bodyParser)(current.withSession)(errorPage)
}

In sostanza quello che sta facendo è creare un DBoggetto e passa alla applyForDBfunzione di insieme withSessionche dovrebbe (dovrebbe, perché io non sono un esperto e il codice sorgente non è così facile da leggere) essere esattamente lo stesso di fare questo

DB.withSession {
  implicit session: Session => {
    /* some computation */
  }
}

Il codice può essere trovato qui .

Risposto il 07/05/2014 a 20:54
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more