Skip to content

Instantly share code, notes, and snippets.

@cflewis
Created March 23, 2011 06:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cflewis/882706 to your computer and use it in GitHub Desktop.
Save cflewis/882706 to your computer and use it in GitHub Desktop.
package com.cflewis.lyss.kitty_server
import akka.actor.Actor
import akka.actor.Actor._
import akka.config.Supervision._
case class Cat(name: String, color: String, description: String)
case class OrderCat(name: String, color: String, description: String)
case class ReturnCat(cat: Cat)
case class CloseShop()
class KittyServer extends Actor {
self.lifeCycle = Permanent
var cats = List[Cat]()
def receive = {
case oc: OrderCat => {
val cat = new Cat(oc.name, oc.color, oc.description)
if (cats.isEmpty) {
cats = cat :: cats
self.reply(cat)
} else {
self.reply(cats.head)
cats = cat :: cats.tail
}
}
case rc: ReturnCat => cats = rc.cat :: cats
case cs: CloseShop => {
println(cats.head.name + " was set free")
self.stop
}
case s: String => throw new Exception("OH GOD CATS LOVE STRING")
case _ => println("Unexpected message to KittyServer")
}
}
class KittySupervisor extends Actor {
self.faultHandler = AllForOneStrategy(List(classOf[Throwable]), 3, 1000)
self.lifeCycle = Permanent
def receive = {
case "start" => start()
case _ => println("Unexpected message to KittySupervisor")
}
def start() = {
val kittyServer = actorOf[KittyServer]
self.link(kittyServer)
kittyServer.start
val cat = getCat(kittyServer !! OrderCat("Jeffery", "Orange", "Cutie"))
println(cat)
val cat1 = kittyServer !! OrderCat("Sara", "Pink", "Bestie")
kittyServer ! "Yarn!"
kittyServer ! ReturnCat(cat)
kittyServer ! CloseShop()
self.stop
}
def getCat(cat: Option[Any]): Cat = {
cat match {
case Some(c) => c.asInstanceOf[Cat]
case None => new Cat("Stray", "Grey", "Ugly")
}
}
}
object App extends Application {
val k = actorOf[KittySupervisor]
k.start
k ! "start"
}
@cflewis
Copy link
Author

cflewis commented Mar 23, 2011

Outputs:

23:36:19.357 [main] DEBUG a.d.Dispatchers$globalExecutorBasedEventDrivenDispatcher$ - Starting up Dispatchers$globalExecutorBasedEventDrivenDispatcher$[akka:event-driven:dispatcher:global]
    with throughput [5]
23:36:19.358 [main] INFO  a.d.LazyExecutorServiceWrapper - Lazily initializing ExecutorService for 
23:36:19.361 [akka:event-driven:dispatcher:global-1] DEBUG akka.dispatch.MonitorableThread - Created thread akka:event-driven:dispatcher:global-1
23:36:19.370 [akka:event-driven:dispatcher:global-1] DEBUG akka.actor.Actor$ - Linking actor [Actor[com.cflewis.lyss.kitty_server.KittyServer:dc890190-5517-11e0-a86e-005056c00008]] to actor [Actor[com.cflewis.lyss.kitty_server.KittySupervisor:dc80eb40-5517-11e0-a86e-005056c00008]]
23:36:19.373 [akka:event-driven:dispatcher:global-2] DEBUG akka.dispatch.MonitorableThread - Created thread akka:event-driven:dispatcher:global-2
Cat(Jeffery,Orange,Cutie)
23:36:19.388 [akka:event-driven:dispatcher:global-3] DEBUG akka.dispatch.MonitorableThread - Created thread akka:event-driven:dispatcher:global-3
23:36:19.388 [akka:event-driven:dispatcher:global-4] DEBUG akka.dispatch.MonitorableThread - Created thread akka:event-driven:dispatcher:global-4
23:36:19.389 [akka:event-driven:dispatcher:global-4] ERROR akka.actor.Actor$ - Exception when invoking 
    actor [Actor[com.cflewis.lyss.kitty_server.KittyServer:dc890190-5517-11e0-a86e-005056c00008]] 
    with message [Yarn!]
23:36:19.409 [akka:event-driven:dispatcher:global-4] ERROR akka.actor.Actor$ - Problem
java.lang.Exception: OH GOD CATS LOVE STRING
    at com.cflewis.lyss.kitty_server.KittyServer$$anonfun$receive$1.apply(App.scala:36) ~[classes/:na]
    at com.cflewis.lyss.kitty_server.KittyServer$$anonfun$receive$1.apply(App.scala:16) ~[classes/:na]
    at akka.actor.Actor$$anonfun$4.apply(Actor.scala:481) ~[akka-actor-1.0.jar:na]
    at akka.actor.Actor$$anonfun$4.apply(Actor.scala:464) ~[akka-actor-1.0.jar:na]
    at akka.actor.Actor$class.apply(Actor.scala:435) ~[akka-actor-1.0.jar:na]
    at com.cflewis.lyss.kitty_server.KittyServer.apply(App.scala:12) ~[classes/:na]
    at akka.actor.LocalActorRef.akka$actor$LocalActorRef$$dispatch(ActorRef.scala:1012) [akka-actor-1.0.jar:na]
    at akka.actor.LocalActorRef$$anonfun$invoke$1.apply$mcV$sp(ActorRef.scala:832) [akka-actor-1.0.jar:na]
    at akka.actor.LocalActorRef$$anonfun$invoke$1.apply(ActorRef.scala:828) [akka-actor-1.0.jar:na]
    at akka.actor.LocalActorRef$$anonfun$invoke$1.apply(ActorRef.scala:828) [akka-actor-1.0.jar:na]
    at akka.util.ReentrantGuard.withGuard(LockUtil.scala:19) [akka-actor-1.0.jar:na]
    at akka.actor.LocalActorRef.invoke(ActorRef.scala:827) [akka-actor-1.0.jar:na]
    at akka.dispatch.MessageInvocation.invoke(MessageHandling.scala:23) [akka-actor-1.0.jar:na]
    at akka.dispatch.ExecutableMailbox$class.processMailbox(ExecutorBasedEventDrivenDispatcher.scala:190) [akka-actor-1.0.jar:na]
    at akka.dispatch.ExecutorBasedEventDrivenDispatcher$$anon$1.processMailbox(ExecutorBasedEventDrivenDispatcher.scala:109) [akka-actor-1.0.jar:na]
    at akka.dispatch.ExecutableMailbox$class.run(ExecutorBasedEventDrivenDispatcher.scala:166) [akka-actor-1.0.jar:na]
    at akka.dispatch.ExecutorBasedEventDrivenDispatcher$$anon$1.run(ExecutorBasedEventDrivenDispatcher.scala:109) [akka-actor-1.0.jar:na]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [na:1.6.0_24]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [na:1.6.0_24]
    at java.lang.Thread.run(Thread.java:680) [na:1.6.0_24]
    at akka.dispatch.MonitorableThread.run(ThreadPoolBuilder.scala:185) [akka-actor-1.0.jar:na]
23:36:19.411 [akka:event-driven:dispatcher:global-4] DEBUG a.d.Dispatchers$globalExecutorBasedEventDrivenDispatcher$ - Suspending dc890190-5517-11e0-a86e-005056c00008
23:36:19.418 [akka:event-driven:dispatcher:global-4] INFO  akka.actor.Scheduler$ - Starting up Scheduler
23:36:20.422 [akka:scheduler-0] DEBUG a.d.Dispatchers$globalExecutorBasedEventDrivenDispatcher$ - Shutting down Dispatchers$globalExecutorBasedEventDrivenDispatcher$[akka:event-driven:dispatcher:global]
23:36:20.422 [akka:event-driven:dispatcher:global-3] DEBUG akka.dispatch.MonitorableThread - Exiting thread akka:event-driven:dispatcher:global-3
23:36:20.422 [akka:event-driven:dispatcher:global-2] DEBUG akka.dispatch.MonitorableThread - Exiting thread akka:event-driven:dispatcher:global-2
23:36:20.422 [akka:event-driven:dispatcher:global-4] DEBUG akka.dispatch.MonitorableThread - Exiting thread akka:event-driven:dispatcher:global-4
23:36:20.422 [akka:event-driven:dispatcher:global-1] DEBUG akka.dispatch.MonitorableThread - Exiting thread akka:event-driven:dispatcher:global-1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment