Merge pull request #406 from akka/wip-2004-typed-context-√
Adding TypedActor.context for the lifecycle methods
This commit is contained in:
commit
c62a34c67d
2 changed files with 34 additions and 19 deletions
|
|
@ -19,6 +19,7 @@ import akka.dispatch.{ Await, Dispatchers, Future, Promise }
|
|||
import akka.pattern.ask
|
||||
import akka.serialization.JavaSerializer
|
||||
import akka.actor.TypedActor._
|
||||
import java.lang.IllegalStateException
|
||||
|
||||
object TypedActorSpec {
|
||||
|
||||
|
|
@ -162,20 +163,26 @@ object TypedActorSpec {
|
|||
|
||||
class LifeCyclesImpl(val latch: CountDownLatch) extends PreStart with PostStop with PreRestart with PostRestart with LifeCycles with Receiver {
|
||||
|
||||
private def ensureContextAvailable[T](f: ⇒ T): T = TypedActor.context match {
|
||||
case null ⇒ throw new IllegalStateException("TypedActor.context is null!")
|
||||
case some ⇒ f
|
||||
}
|
||||
|
||||
override def crash(): Unit = throw new IllegalStateException("Crash!")
|
||||
|
||||
override def preStart(): Unit = latch.countDown()
|
||||
override def preStart(): Unit = ensureContextAvailable(latch.countDown())
|
||||
|
||||
override def postStop(): Unit = for (i ← 1 to 3) latch.countDown()
|
||||
override def postStop(): Unit = ensureContextAvailable(for (i ← 1 to 3) latch.countDown())
|
||||
|
||||
override def preRestart(reason: Throwable, message: Option[Any]): Unit = for (i ← 1 to 5) latch.countDown()
|
||||
override def preRestart(reason: Throwable, message: Option[Any]): Unit = ensureContextAvailable(for (i ← 1 to 5) latch.countDown())
|
||||
|
||||
override def postRestart(reason: Throwable): Unit = for (i ← 1 to 7) latch.countDown()
|
||||
override def postRestart(reason: Throwable): Unit = ensureContextAvailable(for (i ← 1 to 7) latch.countDown())
|
||||
|
||||
override def onReceive(msg: Any, sender: ActorRef): Unit = {
|
||||
msg match {
|
||||
case "pigdog" ⇒ sender ! "dogpig"
|
||||
}
|
||||
ensureContextAvailable(
|
||||
msg match {
|
||||
case "pigdog" ⇒ sender ! "dogpig"
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -227,15 +227,19 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi
|
|||
case _ ⇒ super.supervisorStrategy
|
||||
}
|
||||
|
||||
override def preStart(): Unit = me match {
|
||||
case l: PreStart ⇒ l.preStart()
|
||||
case _ ⇒ super.preStart()
|
||||
override def preStart(): Unit = withContext {
|
||||
me match {
|
||||
case l: PreStart ⇒ l.preStart()
|
||||
case _ ⇒ super.preStart()
|
||||
}
|
||||
}
|
||||
|
||||
override def postStop(): Unit = try {
|
||||
me match {
|
||||
case l: PostStop ⇒ l.postStop()
|
||||
case _ ⇒ super.postStop()
|
||||
withContext {
|
||||
me match {
|
||||
case l: PostStop ⇒ l.postStop()
|
||||
case _ ⇒ super.postStop()
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
TypedActor(context.system).invocationHandlerFor(proxyVar.get) match {
|
||||
|
|
@ -246,14 +250,18 @@ object TypedActor extends ExtensionId[TypedActorExtension] with ExtensionIdProvi
|
|||
}
|
||||
}
|
||||
|
||||
override def preRestart(reason: Throwable, message: Option[Any]): Unit = me match {
|
||||
case l: PreRestart ⇒ l.preRestart(reason, message)
|
||||
case _ ⇒ super.preRestart(reason, message)
|
||||
override def preRestart(reason: Throwable, message: Option[Any]): Unit = withContext {
|
||||
me match {
|
||||
case l: PreRestart ⇒ l.preRestart(reason, message)
|
||||
case _ ⇒ super.preRestart(reason, message)
|
||||
}
|
||||
}
|
||||
|
||||
override def postRestart(reason: Throwable): Unit = me match {
|
||||
case l: PostRestart ⇒ l.postRestart(reason)
|
||||
case _ ⇒ super.postRestart(reason)
|
||||
override def postRestart(reason: Throwable): Unit = withContext {
|
||||
me match {
|
||||
case l: PostRestart ⇒ l.postRestart(reason)
|
||||
case _ ⇒ super.postRestart(reason)
|
||||
}
|
||||
}
|
||||
|
||||
protected def withContext[T](unitOfWork: ⇒ T): T = {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue