Added patterns for initialization for Scala #2297
(cherry-picked from e2aa3b5)
This commit is contained in:
parent
469b168ada
commit
7bf9f1f82b
4 changed files with 288 additions and 0 deletions
|
|
@ -0,0 +1,74 @@
|
|||
/**
|
||||
* Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com>
|
||||
*/
|
||||
package docs.actor
|
||||
|
||||
import akka.actor.{ Props, Actor }
|
||||
import akka.testkit.{ ImplicitSender, AkkaSpec }
|
||||
|
||||
object InitializationDocSpec {
|
||||
|
||||
class PreStartInitExample extends Actor {
|
||||
override def receive = {
|
||||
case _ ⇒ // Ignore
|
||||
}
|
||||
|
||||
//#preStartInit
|
||||
override def preStart(): Unit = {
|
||||
// Initialize children here
|
||||
}
|
||||
|
||||
// Overriding postRestart to disable the call to preStart()
|
||||
// after restarts
|
||||
override def postRestart(reason: Throwable): Unit = ()
|
||||
|
||||
// The default implementation of preRestart() stops all the children
|
||||
// of the actor. To opt-out from stopping the children, we
|
||||
// have to override preRestart()
|
||||
override def preRestart(reason: Throwable, message: Option[Any]): Unit = {
|
||||
// Keep the call to postStop(), but no stopping of children
|
||||
postStop()
|
||||
}
|
||||
//#preStartInit
|
||||
}
|
||||
|
||||
class MessageInitExample extends Actor {
|
||||
//#messageInit
|
||||
var initializeMe: Option[String] = None
|
||||
|
||||
override def receive = {
|
||||
case "init" ⇒
|
||||
initializeMe = Some("Up and running")
|
||||
context.become(initialized, discardOld = true)
|
||||
|
||||
}
|
||||
|
||||
def initialized: Receive = {
|
||||
case "U OK?" ⇒ initializeMe foreach { sender ! _ }
|
||||
}
|
||||
//#messageInit
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
class InitializationDocSpec extends AkkaSpec with ImplicitSender {
|
||||
import InitializationDocSpec._
|
||||
|
||||
"Message based initialization example" must {
|
||||
|
||||
"work correctly" in {
|
||||
val example = system.actorOf(Props[MessageInitExample], "messageInitExample")
|
||||
val probe = "U OK?"
|
||||
|
||||
example ! probe
|
||||
expectNoMsg()
|
||||
|
||||
example ! "init"
|
||||
example ! probe
|
||||
expectMsg("Up and running")
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue