Ich habe eine Play-Scala-Anwendung mit SqLite mit Slick. Meine Tabellen sind wie folgt definiert:Slick Datenbankzugriff in Actor
@Singleton
class DataSets @Inject()(protected val dbConfigProvider: DatabaseConfigProvider, keys: PublicKeys) extends DataSetsComponent
with HasDatabaseConfigProvider[JdbcProfile] {
import driver.api._
val DataSets = TableQuery[DataSetsTable]
def all = db.run(DataSets.sortBy { _.id }.result)
...
}
Meine Controller erhalten Zugriff über DI:
@Singleton
class DataSetsController @Inject() (dataSets: DataSets, env: play.Environment) extends Controller {
...
Wie erhalte ich eine Datenbank-Handle in einem Schauspieler?
class TrainActor @Inject() (dataSets: DataSets) extends Actor {
...
funktioniert natürlich nicht, da Guice die DataSets-Klasse nicht findet.
Edit: zur Verdeutlichung: Ich möchte den Aktor nicht für den Datenbankzugriff im Controller verwenden (via ask), sondern einige ressourcenintensive Berechnungen vom Controller nach einer Anfrage starten und sie danach in der db ablegen (async).
Was kann ich tun, wenn ich neue Akteure im Controller instanziieren und keine Nachrichten an einen senden möchte? – joni