2015-11-25 12 views
7

śledzę wzdłuż odgrywa opis jak korzystać z aktorów: https://www.playframework.com/documentation/2.4.x/ScalaAkka sugerują coś takiego:Stosować aktorzy w sztuce

@Singleton 
class Application @Inject() (system: ActorSystem) extends Controller { 

    val helloActor = system.actorOf(HelloActor.props, "hello-actor") 

    //... 
} 

Ale to skutkuje:

play.sbt.PlayExceptions$CompilationException: Compilation error[trait Singleton is abstract; cannot be instantiated] 
     at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na] 
     at play.sbt.PlayExceptions$CompilationException$.apply(PlayExceptions.scala:27) ~[na:na] 
     at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na] 
     at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:49) ~[na:na] 
     at play.sbt.run.PlayReload$$anonfun$taskFailureHandler$1.apply(PlayReload.scala:44) ~[na:na] 
     at scala.Option.map(Option.scala:145) ~[scala-library-2.11.6.jar:na] 
     at play.sbt.run.PlayReload$.taskFailureHandler(PlayReload.scala:44) ~[na:na] 
     at play.sbt.run.PlayReload$.compileFailure(PlayReload.scala:40) ~[na:na] 
     at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na] 
     at play.sbt.run.PlayReload$$anonfun$compile$1.apply(PlayReload.scala:17) ~[na:na] 

Tos zobaczyć co zrobiłem lub podążać : https://github.com/dataplayground/playground

edit:

Zdejmowanie @Singleton prowadzi do:

could not find implicit value for parameter timeout: akka.util.Timeout 

Jest to kod:

implicit val timeout = 5.seconds 

def sayHello(name: String) = Action.async { 
    (helloActor ? SayHello(name)).mapTo[String].map { message => 
    Ok(message) 
    } 
} 
+0

remove '@ Singleton' – 757071

+0

OK - tak jest dokumentacja nieaktualne? przynajmniej ten błąd zniknie. Jednak nadal wydaje się, że coś jest nie tak z tym przykładem. Patrz: edycja –

+0

'niejawny val timeout = akka.util.TimeOut (5.seconds)' – 757071

Odpowiedz

9

użycie

implicit val timeout = akka.util.Timeout(5.seconds) 

i import javax.inject.Singleton

+4

+ pierwotny problem z '@ Singleton'seems zostanie rozwiązany przez tę poprawkę . Tak więc można go używać z importami 'javax.inject.Singleton' –

Powiązane problemy