diff --git a/api-java/pom.xml b/api-java/pom.xml
index 8ab294bad4..91e0a5b182 100755
--- a/api-java/pom.xml
+++ b/api-java/pom.xml
@@ -25,12 +25,6 @@
junit
4.5
-
- org.jmock
- jmock
- 2.4.0
- test
-
diff --git a/kernel/buildfile b/kernel/buildfile
index b743c7da62..9ca2464f10 100644
--- a/kernel/buildfile
+++ b/kernel/buildfile
@@ -4,40 +4,31 @@ repositories.remote << 'http://www.ibiblio.org/maven2'
repositories.remote << 'http://scala-tools.org/repo-releases'
repositories.remote << 'http://scala-tools.org/repo-snapshots'
repositories.remote << 'http://www.lag.net/repo'
-repositories.local = '/home/jboner/.m2/repository'
-#AXIS2 = 'org.apache.axis2:axis2:jar:1.2'
-#AXIOM = group('axiom-api', 'axiom-impl', 'axiom-dom',
-# :under=>'org.apache.ws.commons.axiom', :version=>'1.2.4')
-#AXIS_OF_WS = [AXIOM, AXIS2]
-#OPENJPA = ['org.apache.openjpa:openjpa:jar:1.2.0',
-# 'net.sourceforge.serp:serp:jar:1.12.0']
-CONFIGGY = 'net.lag:configgy:jar:1.2'
-AKKA_SUPERVISOR = 'com.scalablesolutions.akka:akka-supervisor:jar:0.1'
-AKKA_UTIL_JAVA = 'com.scalablesolutions.akka:akka-util-java:jar:0.1'
-GUICEYFRUIT_CORE = 'org.guiceyfruit:guice-core:jar:2.0-SNAPSHOT'
-GUICEYFRUIT_JSR250 = 'org.guiceyfruit:guice-jsr250:jar:2.0-SNAPSHOT'
-GRIZZLY_WEBSERVER = 'com.sun.grizzly:grizzly-servlet-webserver:jar:1.8.6.3'
-JERSEY_CORE = 'com.sun.jersey:jersey-core:jar:1.0.1'
-JERSEY_SERVER = 'com.sun.jersey:jersey-server:jar:1.0.1'
-JERSEY_JSON = 'com.sun.jersey:jersey-json:jar:1.0.1'
-JERSEY_ATOM = 'com.sun.jersey:jersey-atom:jar:1.0.1'
-JSR_311 = 'javax.ws.rs:jsr311-api:jar:1.0'
-VOLDEMORT = 'voldemort:voldemort:jar:0.4a'
-VOLDEMORT_CONTRIB = 'voldemort:voldemort-contrib:jar:0.4a'
-ZOOKEEPER = 'org.apache:zookeeper:jar:3.1.0'
-SLF4J_LOG4J_12 = 'org.slf4j:slf4j-log4j12:jar:1.4.3'
-SLF4J_API = 'org.slf4j:slf4j-api:jar:1.4.3'
-LOG4J = 'log4j:log4j:jar:1.2.13'
-SPECS = 'org.specs:specs:jar:1.4.3'
-JUNIT4 = 'junit:junit:jar:4.0'
+AKKA = ['com.scalablesolutions.akka:akka-supervisor:jar:0.1',
+ 'com.scalablesolutions.akka:akka-util-java:jar:0.1']
+GUICEYFRUIT = ['org.guiceyfruit:guice-core:jar:2.0-SNAPSHOT',
+ 'org.guiceyfruit:guice-jsr250:jar:2.0-SNAPSHOT']
+JERSEY = ['com.sun.jersey:jersey-core:jar:1.0.1',
+ 'com.sun.jersey:jersey-server:jar:1.0.1',
+ 'com.sun.jersey:jersey-json:jar:1.0.1',
+ 'com.sun.jersey:jersey-atom:jar:1.0.1',
+ 'javax.ws.rs:jsr311-api:jar:1.0']
+VOLDEMORT = ['voldemort:voldemort:jar:0.4a',
+ 'voldemort:voldemort-contrib:jar:0.4a']
+SLF4J = ['org.slf4j:slf4j-log4j12:jar:1.4.3',
+ 'org.slf4j:slf4j-api:jar:1.4.3',
+ 'log4j:log4j:jar:1.2.13']
+CONFIGGY = 'net.lag:configgy:jar:1.2'
+ZOOKEEPER = 'org.apache:zookeeper:jar:3.1.0'
+GRIZZLY = 'com.sun.grizzly:grizzly-servlet-webserver:jar:1.8.6.3'
+JUNIT4 = 'junit:junit:jar:4.0'
desc 'The Akka Actor kernel core implementation'
define 'akka-kernel' do
project.version = '0.1'
- project.group = 'com.scalablesolutios.akka'
- compile.with [CONFIGGY, AKKA_SUPERVISOR, AKKA_UTIL_JAVA, GUICEYFRUIT_CORE, GUICEYFRUIT_JSR250, GRIZZLY_WEBSERVER, JERSEY_CORE, JERSEY_SERVER, JERSEY_JSON, JERSEY_ATOM, JSR_311, VOLDEMORT, VOLDEMORT_CONTRIB, ZOOKEEPER, SLF4J_LOG4J_12, SLF4J_API, LOG4J, SPECS, JUNIT4]
-
+ project.group = 'com.scalablesolutions.akka'
+ compile.with [AKKA, GUICEYFRUIT, JERSEY, VOLDEMORT, ZOOKEEPER, SLF4J, GRIZZLY, CONFIGGY, JUNIT4]
test.using :specs
package :jar
end
diff --git a/pom.xml b/pom.xml
index 986ff51c73..0dfe6b8f4a 100755
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@
pom
- 0.1-SNAPSHOT
+ 0.1
com.scalablesolutions.akka
2.7.3
diff --git a/supervisor/src/test/scala/GenericServerContainerSuite.scala b/supervisor/src/test/scala/GenericServerContainerSuite.scala
deleted file mode 100755
index 1b85425d74..0000000000
--- a/supervisor/src/test/scala/GenericServerContainerSuite.scala
+++ /dev/null
@@ -1,202 +0,0 @@
-/**
- * Copyright (C) 2009 Scalable Solutions.
- */
-
-package com.scalablesolutions.akka.supervisor
-
-import org.specs.runner.JUnit4
-import org.specs.Specification
-
-import scala.actors._
-import scala.actors.Actor._
-
-/**
- * @author Jonas Bonér
- */
-class GenericServerContainerTest extends JUnit4(genericServerContainerSpec) // for JUnit4 and Maven
-object genericServerContainerSpec extends Specification {
-
- var inner: GenericServerContainerActor = null
- var server: GenericServerContainer = null
- def createProxy(f: () => GenericServer) = {
- val server = new GenericServerContainer("server", f)
- server.setTimeout(100)
- server
- }
-
- inner = new GenericServerContainerActor
- server = createProxy(() => inner)
- server.newServer
- server.start
-
- "server should be initialized" in {
- server.init("testInit")
- Thread.sleep(100)
- expect("initializing: testInit") {
- inner.log
- }
- }
-
- "server should terminate with a reason " in {
- server.terminate("testTerminateWithReason", 100)
- Thread.sleep(100)
- expect("terminating: testTerminateWithReason") {
- inner.log
- }
- }
-
- "server respond to async oneway message" in {
- server ! OneWay
- Thread.sleep(100)
- expect("got a oneway") {
- inner.log
- }
- }
-
- "server respond to async ping message" in {
- server ! Ping
- Thread.sleep(100)
- expect("got a ping") {
- inner.log
- }
- }
-
- "server respond to !!!" in {
- expect("pong") {
- (server !!! Ping).getOrElse("nil")
- }
- expect("got a ping") {
- inner.log
- }
- }
-
- "server respond to !?" in {
- expect("pong") {
- val res: String = server !? Ping
- res
- }
- expect("got a ping") {
- inner.log
- }
- }
-
- "server respond to !!! with timeout" in {
- expect("pong") {
- (server !!! Ping).getOrElse("nil")
- }
- expect("got a ping") {
- inner.log
- }
- }
-
- "server respond to !!! with timeout" in {
- expect("error handler") {
- server !!! (OneWay, "error handler")
- }
- expect("got a oneway") {
- inner.log
- }
- }
-
- "server respond to !!! and return future with timeout" in {
- val future = server !! Ping
- future.receiveWithin(100) match {
- case None => fail("timed out") // timed out
- case Some(reply) =>
- expect("got a ping") {
- inner.log
- }
- assert("pong" === reply)
- }
- }
-
- "server respond to !!! and return future with timeout" in {
- val future = server !! OneWay
- future.receiveWithin(100) match {
- case None =>
- expect("got a oneway") {
- inner.log
- }
- case Some(reply) =>
- fail("expected a timeout, got Some(reply)")
- }
- }
-
- "server respond do hotswap" in {
- // using base
- expect("pong") {
- (server !!! Ping).getOrElse("nil")
- }
-
- // hotswapping
- server.hotswap(Some({
- case Ping => reply("hotswapped pong")
- }))
- expect("hotswapped pong") {
- (server !!! Ping).getOrElse("nil")
- }
- }
-
- "server respond do double hotswap" in {
- // using base
- expect("pong") {
- (server !!! Ping).getOrElse("nil")
- }
-
- // hotswapping
- server.hotswap(Some({
- case Ping => reply("hotswapped pong")
- }))
- expect("hotswapped pong") {
- (server !!! Ping).getOrElse("nil")
- }
-
- // hotswapping again
- server.hotswap(Some({
- case Ping => reply("hotswapped pong again")
- }))
- expect("hotswapped pong again") {
- (server !!! Ping).getOrElse("nil")
- }
- }
-
- "server respond do hotswap and then revert" in {
- // using base
- expect("pong") {
- (server !!! Ping).getOrElse("nil")
- }
-
- // hotswapping
- server.hotswap(Some({
- case Ping => reply("hotswapped pong")
- }))
- expect("hotswapped pong") {
- (server !!! Ping).getOrElse("nil")
- }
-
- // restoring original base
- server.hotswap(None)
- expect("pong") {
- (server !!! Ping).getOrElse("nil")
- }
- }
-}
-
-
-class GenericServerContainerActor extends GenericServer {
- var log = ""
-
- override def body: PartialFunction[Any, Unit] = {
- case Ping =>
- log = "got a ping"
- reply("pong")
-
- case OneWay =>
- log = "got a oneway"
- }
-
- override def init(config: AnyRef) = log = "initializing: " + config
- override def shutdown(reason: AnyRef) = log = "terminating: " + reason
-}
-
-
diff --git a/supervisor/src/test/scala/GenericServerSuite.scala b/supervisor/src/test/scala/GenericServerSuite.scala
deleted file mode 100755
index 44aab326eb..0000000000
--- a/supervisor/src/test/scala/GenericServerSuite.scala
+++ /dev/null
@@ -1,40 +0,0 @@
-/**
- * Copyright (C) 2009 Scalable Solutions.
- */
-
-package com.scalablesolutions.akka.supervisor
-
-import org.specs.runner.JUnit4
-import org.specs.Specification
-
-import scala.actors._
-import scala.actors.Actor._
-
-/**
- * @author Jonas Bonér
- */
-class GenericServerTest extends JUnit4(genericServerSpec) // for JUnit4 and Maven
-object genericServerSpec extends Specification {
-
- "server should respond to a regular message" in {
- val server = new TestGenericServerActor
- server.start
- server !? Ping match {
- case reply: String =>
- assert("got a ping" === server.log)
- assert("pong" === reply)
- case _ => fail()
- }
- }
-}
-
-class TestGenericServerActor extends GenericServer {
- var log: String = ""
-
- override def body: PartialFunction[Any, Unit] = {
- case Ping =>
- log = "got a ping"
- reply("pong")
- }
-}
-
diff --git a/supervisor/src/test/scala/Messages.scala b/supervisor/src/test/scala/Messages.scala
deleted file mode 100755
index 0f014ca692..0000000000
--- a/supervisor/src/test/scala/Messages.scala
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * Copyright (C) 2009 Scalable Solutions.
- */
-
-package com.scalablesolutions.akka.supervisor
-
-sealed abstract class TestMessage
-case object Ping extends TestMessage
-case object Pong extends TestMessage
-case object OneWay extends TestMessage
-case object Die extends TestMessage
-case object NotifySupervisorExit extends TestMessage
diff --git a/supervisor/src/test/scala/SupervisorStateSuite.scala b/supervisor/src/test/scala/SupervisorStateSuite.scala
deleted file mode 100755
index 6df3b7e059..0000000000
--- a/supervisor/src/test/scala/SupervisorStateSuite.scala
+++ /dev/null
@@ -1,77 +0,0 @@
-/**
- * Copyright (C) 2009 Scalable Solutions.
- */
-
-package com.scalablesolutions.akka.supervisor
-
-import org.specs.runner.JUnit4
-import org.specs.Specification
-
-import scala.actors._
-import scala.actors.Actor._
-
-/**
- * @author Jonas Bonér
- */
-class SupervisorStateTest extends JUnit4(supervisorStateSpec) // for JUnit4 and Maven
-object supervisorStateSpec extends Specification {
- val dummyActor = new GenericServer { override def body: PartialFunction[Any, Unit] = { case _ => }}
- val newDummyActor = () => dummyActor
- var state: SupervisorState = _
- var proxy: GenericServerContainer = _
- var supervisor: Supervisor = _
-
- proxy = new GenericServerContainer("server1", newDummyActor)
- object factory extends SupervisorFactory {
- override def getSupervisorConfig: SupervisorConfig = {
- SupervisorConfig(
- RestartStrategy(AllForOne, 3, 100),
- Worker(
- proxy,
- LifeCycle(Permanent, 100))
- :: Nil)
- }
- }
-
- supervisor = factory.newSupervisor
- state = new SupervisorState(supervisor, new AllForOneStrategy(3, 100))
-
- "supervisor state should return added server" in {
- state.addServerContainer(proxy)
- state.getServerContainer("server1") match {
- case None => fail("should have returned server")
- case Some(server) =>
- assert(server != null)
- assert(server.isInstanceOf[GenericServerContainer])
- assert(proxy === server)
- }
- }
-
- "supervisor state should remove added server" in {
- state.addServerContainer(proxy)
-
- state.removeServerContainer("server1")
- state.getServerContainer("server1") match {
- case Some(_) => fail("should have returned None")
- case None =>
- }
- state.getServerContainer("dummyActor") match {
- case Some(_) => fail("should have returned None")
- case None =>
- }
- }
-
- "supervisor state should fail getting non-existent server by symbol" in {
- state.getServerContainer("server2") match {
- case Some(_) => fail("should have returned None")
- case None =>
- }
- }
-
- "supervisor state should fail getting non-existent server by actor" in {
- state.getServerContainer("dummyActor") match {
- case Some(_) => fail("should have returned None")
- case None =>
- }
- }
-}
diff --git a/supervisor/src/test/scala/SupervisorSuite.scala b/supervisor/src/test/scala/SupervisorSuite.scala
deleted file mode 100755
index 4e8bd048e1..0000000000
--- a/supervisor/src/test/scala/SupervisorSuite.scala
+++ /dev/null
@@ -1,434 +0,0 @@
-/**
- * Copyright (C) 2009 Scalable Solutions.
- */
-
-package com.scalablesolutions.akka.supervisor
-
-import org.specs.runner.JUnit4
-import org.specs.Specification
-
-import scala.actors._
-import scala.actors.Actor._
-import scala.collection.Map
-import scala.collection.mutable.HashMap
-
-/**
- * @author Jonas Bonér
- */
-class SupervisorTest extends JUnit4(supervisorSpec) // for JUnit4 and Maven
-object supervisorSpec extends Specification {
-
- var messageLog: String = ""
- val pingpong1 = new GenericServerContainer("pingpong1", () => new PingPong1Actor)
- val pingpong2 = new GenericServerContainer("pingpong2", () => new PingPong2Actor)
- val pingpong3 = new GenericServerContainer("pingpong3", () => new PingPong3Actor)
-
- pingpong1.setTimeout(100)
- pingpong2.setTimeout(100)
- pingpong3.setTimeout(100)
-
- @BeforeMethod
- def setup = messageLog = ""
-
- // ===========================================
- "starting supervisor should start the servers" in {
- val sup = getSingleActorAllForOneSupervisor
- sup ! Start
-
- expect("pong") {
- (pingpong1 !!! Ping).getOrElse("nil")
- }
- }
-
- // ===========================================
- "started supervisor should be able to return started servers" in {
- val sup = getSingleActorAllForOneSupervisor
- sup ! Start
- val server = sup.getServerOrElse("pingpong1", throw new RuntimeException("server not found"))
- assert(server.isInstanceOf[GenericServerContainer])
- assert(server === pingpong1)
- }
-
- // ===========================================
- "started supervisor should fail returning non-existing server" in {
- val sup = getSingleActorAllForOneSupervisor
- sup ! Start
- intercept(classOf[RuntimeException]) {
- sup.getServerOrElse("wrong_name", throw new RuntimeException("server not found"))
- }
- }
-
- // ===========================================
- "supervisor should restart killed server with restart strategy one_for_one" in {
- val sup = getSingleActorOneForOneSupervisor
- sup ! Start
-
- intercept(classOf[RuntimeException]) {
- pingpong1 !!! (Die, throw new RuntimeException("TIME OUT"))
- }
- Thread.sleep(100)
- expect("oneforone") {
- messageLog
- }
- }
-
- // ===========================================
- "supervisor should restart used killed server with restart strategy one_for_one" in {
- val sup = getSingleActorOneForOneSupervisor
- sup ! Start
-
- expect("pong") {
- (pingpong1 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("ping") {
- messageLog
- }
- intercept(classOf[RuntimeException]) {
- pingpong1 !!! (Die, throw new RuntimeException("TIME OUT"))
- }
- Thread.sleep(100)
- expect("pingoneforone") {
- messageLog
- }
- expect("pong") {
- (pingpong1 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pingoneforoneping") {
- messageLog
- }
- }
-
- // ===========================================
- "supervisor should restart killed server with restart strategy all_for_one" in {
- val sup = getSingleActorAllForOneSupervisor
- sup ! Start
- intercept(classOf[RuntimeException]) {
- pingpong1 !!! (Die, throw new RuntimeException("TIME OUT"))
- }
- Thread.sleep(100)
- expect("allforone") {
- messageLog
- }
- }
-
- // ===========================================
- "supervisor should restart used killed server with restart strategy all_for_one" in {
- val sup = getSingleActorAllForOneSupervisor
- sup ! Start
- expect("pong") {
- (pingpong1 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("ping") {
- messageLog
- }
- intercept(classOf[RuntimeException]) {
- pingpong1 !!! (Die, throw new RuntimeException("TIME OUT"))
- }
- Thread.sleep(100)
- expect("pingallforone") {
- messageLog
- }
- expect("pong") {
- (pingpong1 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pingallforoneping") {
- messageLog
- }
- }
-
- // ===========================================
- "supervisor should restart killed multiple servers with restart strategy one_for_one" in {
- val sup = getMultipleActorsOneForOneConf
- sup ! Start
- intercept(classOf[RuntimeException]) {
- pingpong3 !!! (Die, throw new RuntimeException("TIME OUT"))
- }
- Thread.sleep(100)
- expect("oneforone") {
- messageLog
- }
- }
-
- // ===========================================
- "supervisor should restart killed multiple servers with restart strategy one_for_one" in {
- val sup = getMultipleActorsOneForOneConf
- sup ! Start
- expect("pong") {
- (pingpong1 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pong") {
- (pingpong2 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pong") {
- (pingpong3 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pingpingping") {
- messageLog
- }
- intercept(classOf[RuntimeException]) {
- pingpong2 !!! (Die, throw new RuntimeException("TIME OUT"))
- }
- Thread.sleep(100)
- expect("pingpingpingoneforone") {
- messageLog
- }
- expect("pong") {
- (pingpong1 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pong") {
- (pingpong2 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pong") {
- (pingpong3 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pingpingpingoneforonepingpingping") {
- messageLog
- }
- }
-
- // ===========================================
- "supervisor should restart killed muliple servers with restart strategy all_for_one" in {
- val sup = getMultipleActorsAllForOneConf
- sup ! Start
- intercept(classOf[RuntimeException]) {
- pingpong2 !!! (Die, throw new RuntimeException("TIME OUT"))
- }
- Thread.sleep(100)
- expect("allforoneallforoneallforone") {
- messageLog
- }
- }
-
- // ===========================================
- "supervisor should restart killed muliple servers with restart strategy all_for_one" in {
- val sup = getMultipleActorsAllForOneConf
- sup ! Start
- expect("pong") {
- (pingpong1 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pong") {
- (pingpong2 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pong") {
- (pingpong3 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pingpingping") {
- messageLog
- }
- intercept(classOf[RuntimeException]) {
- pingpong2 !!! (Die, throw new RuntimeException("TIME OUT"))
- }
- Thread.sleep(100)
- expect("pingpingpingallforoneallforoneallforone") {
- messageLog
- }
- expect("pong") {
- (pingpong1 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pong") {
- (pingpong2 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pong") {
- (pingpong3 !!! Ping).getOrElse("nil")
- }
- Thread.sleep(100)
- expect("pingpingpingallforoneallforoneallforonepingpingping") {
- messageLog
- }
- }
-
- "supervisor should restart killed first-level server with restart strategy all_for_one" in {
- val sup = getNestedSupervisorsAllForOneConf
- sup ! Start
- intercept(classOf[RuntimeException]) {
- pingpong1 !!! (Die, throw new RuntimeException("TIME OUT"))
- }
- Thread.sleep(100)
- expect("allforoneallforoneallforone") {
- messageLog
- }
- }
-
-
- // =============================================
- // Creat some supervisors with different configurations
-
- def getSingleActorAllForOneSupervisor: Supervisor = {
-
- // Create an abstract SupervisorContainer that works for all implementations
- // of the different Actors (Services).
- //
- // Then create a concrete container in which we mix in support for the specific
- // implementation of the Actors we want to use.
-
- object factory extends TestSupervisorFactory {
- override def getSupervisorConfig: SupervisorConfig = {
- SupervisorConfig(
- RestartStrategy(AllForOne, 3, 100),
- Worker(
- pingpong1,
- LifeCycle(Permanent, 100))
- :: Nil)
- }
- }
- factory.newSupervisor
- }
-
- def getSingleActorOneForOneSupervisor: Supervisor = {
- object factory extends TestSupervisorFactory {
- override def getSupervisorConfig: SupervisorConfig = {
- SupervisorConfig(
- RestartStrategy(OneForOne, 3, 100),
- Worker(
- pingpong1,
- LifeCycle(Permanent, 100))
- :: Nil)
- }
- }
- factory.newSupervisor
- }
-
- def getMultipleActorsAllForOneConf: Supervisor = {
- object factory extends TestSupervisorFactory {
- override def getSupervisorConfig: SupervisorConfig = {
- SupervisorConfig(
- RestartStrategy(AllForOne, 3, 100),
- Worker(
- pingpong1,
- LifeCycle(Permanent, 100))
- ::
- Worker(
- pingpong2,
- LifeCycle(Permanent, 100))
- ::
- Worker(
- pingpong3,
- LifeCycle(Permanent, 100))
- :: Nil)
- }
- }
- factory.newSupervisor
- }
-
- def getMultipleActorsOneForOneConf: Supervisor = {
- object factory extends TestSupervisorFactory {
- override def getSupervisorConfig: SupervisorConfig = {
- SupervisorConfig(
- RestartStrategy(OneForOne, 3, 100),
- Worker(
- pingpong1,
- LifeCycle(Permanent, 100))
- ::
- Worker(
- pingpong2,
- LifeCycle(Permanent, 100))
- ::
- Worker(
- pingpong3,
- LifeCycle(Permanent, 100))
- :: Nil)
- }
- }
- factory.newSupervisor
- }
-
- def getNestedSupervisorsAllForOneConf: Supervisor = {
- object factory extends TestSupervisorFactory {
- override def getSupervisorConfig: SupervisorConfig = {
- SupervisorConfig(
- RestartStrategy(AllForOne, 3, 100),
- Worker(
- pingpong1,
- LifeCycle(Permanent, 100))
- ::
- SupervisorConfig(
- RestartStrategy(AllForOne, 3, 100),
- Worker(
- pingpong2,
- LifeCycle(Permanent, 100))
- ::
- Worker(
- pingpong3,
- LifeCycle(Permanent, 100))
- :: Nil)
- :: Nil)
- }
- }
- factory.newSupervisor
- }
-
- class PingPong1Actor extends GenericServer {
- override def body: PartialFunction[Any, Unit] = {
- case Ping =>
- messageLog += "ping"
- reply("pong")
- case Die =>
- throw new RuntimeException("Recieved Die message")
- }
- }
-
- class PingPong2Actor extends GenericServer {
- override def body: PartialFunction[Any, Unit] = {
- case Ping =>
- messageLog += "ping"
- reply("pong")
- case Die =>
- throw new RuntimeException("Recieved Die message")
- }
- }
-
- class PingPong3Actor extends GenericServer {
- override def body: PartialFunction[Any, Unit] = {
- case Ping =>
- messageLog += "ping"
- reply("pong")
- case Die =>
- throw new RuntimeException("Recieved Die message")
- }
- }
-
- // =============================================
-
- class TestAllForOneStrategy(maxNrOfRetries: Int, withinTimeRange: Int) extends AllForOneStrategy(maxNrOfRetries, withinTimeRange) {
- override def postRestart(serverContainer: GenericServerContainer) = {
- messageLog += "allforone"
- }
- }
-
- class TestOneForOneStrategy(maxNrOfRetries: Int, withinTimeRange: Int) extends OneForOneStrategy(maxNrOfRetries, withinTimeRange) {
- override def postRestart(serverContainer: GenericServerContainer) = {
- messageLog += "oneforone"
- }
- }
-
- abstract class TestSupervisorFactory extends SupervisorFactory {
- override def create(strategy: RestartStrategy): Supervisor = strategy match {
- case RestartStrategy(scheme, maxNrOfRetries, timeRange) =>
- scheme match {
- case AllForOne => new Supervisor(new TestAllForOneStrategy(maxNrOfRetries, timeRange))
- case OneForOne => new Supervisor(new TestOneForOneStrategy(maxNrOfRetries, timeRange))
- }
- }
- }
-}
-
-
-
-
-
-