diff --git a/akka-actors/src/main/resources/logback.xml b/akka-actor/src/main/resources/logback.xml similarity index 100% rename from akka-actors/src/main/resources/logback.xml rename to akka-actor/src/main/resources/logback.xml diff --git a/akka-actors/src/main/scala/actor/Actor.scala b/akka-actor/src/main/scala/actor/Actor.scala similarity index 97% rename from akka-actors/src/main/scala/actor/Actor.scala rename to akka-actor/src/main/scala/actor/Actor.scala index 6db8304fb4..24a04c3eb3 100644 --- a/akka-actors/src/main/scala/actor/Actor.scala +++ b/akka-actor/src/main/scala/actor/Actor.scala @@ -502,6 +502,22 @@ private[actor] class AnyOptionAsTypedOption(anyOption: Option[Any]) { def asSilently[T: Manifest]: Option[T] = narrowSilently[T](anyOption) } +/** + * Marker interface for proxyable actors (such as typed actor). + * + * @author Jonas Bonér + */ trait Proxyable { - def swapProxiedActor(newInstance: Actor) + private[actor] def swapProxiedActor(newInstance: Actor) +} + +/** + * Represents the different Actor types. + * + * @author Jonas Bonér + */ +sealed trait ActorType +object ActorType { + case object ScalaActor extends ActorType + case object TypedActor extends ActorType } diff --git a/akka-actors/src/main/scala/actor/ActorRef.scala b/akka-actor/src/main/scala/actor/ActorRef.scala similarity index 97% rename from akka-actors/src/main/scala/actor/ActorRef.scala rename to akka-actor/src/main/scala/actor/ActorRef.scala index 2d687e3738..cec8d18d84 100644 --- a/akka-actors/src/main/scala/actor/ActorRef.scala +++ b/akka-actor/src/main/scala/actor/ActorRef.scala @@ -11,9 +11,9 @@ import se.scalablesolutions.akka.config.ScalaConfig._ import se.scalablesolutions.akka.stm.global._ import se.scalablesolutions.akka.stm.TransactionManagement._ import se.scalablesolutions.akka.stm.{TransactionManagement, TransactionSetAbortedException} -import se.scalablesolutions.akka.util.{HashCode, Logging, UUID, ReentrantGuard} -import se.scalablesolutions.akka.remote.{RemoteClientModule, RemoteServerModule} import se.scalablesolutions.akka.AkkaException +import se.scalablesolutions.akka.util._ +import ReflectiveAccess._ import org.multiverse.api.ThreadLocalTransaction._ import org.multiverse.commitbarriers.CountDownCommitBarrier @@ -743,7 +743,7 @@ class LocalActorRef private[akka]( * Invoking 'makeRemote' means that an actor will be moved to and invoked on a remote host. */ def makeRemote(hostname: String, port: Int): Unit = { - RemoteClientModule.ensureRemotingEnabled + ensureRemotingEnabled if (!isRunning || isBeingRestarted) makeRemote(new InetSocketAddress(hostname, port)) else throw new ActorInitializationException( "Can't make a running actor remote. Make sure you call 'makeRemote' before 'start'.") @@ -753,7 +753,7 @@ class LocalActorRef private[akka]( * Invoking 'makeRemote' means that an actor will be moved to and invoked on a remote host. */ def makeRemote(address: InetSocketAddress): Unit = guard.withGuard { - RemoteClientModule.ensureRemotingEnabled + ensureRemotingEnabled if (!isRunning || isBeingRestarted) { _remoteAddress = Some(address) RemoteClientModule.register(address, uuid) @@ -829,10 +829,12 @@ class LocalActorRef private[akka]( _isShutDown = true actor.shutdown ActorRegistry.unregister(this) - remoteAddress.foreach { address => - RemoteClientModule.unregister(address, uuid) + if (isRemotingEnabled) { + remoteAddress.foreach { address => + RemoteClientModule.unregister(address, uuid) + } + RemoteServerModule.unregister(this) } - RemoteClientModule.unregister(this) nullOutActorRefReferencesFor(actorInstance.get) } //else if (isBeingRestarted) throw new ActorKilledException("Actor [" + toString + "] is being restarted.") } @@ -887,7 +889,7 @@ class LocalActorRef private[akka]( * To be invoked from within the actor itself. */ def startLinkRemote(actorRef: ActorRef, hostname: String, port: Int) = guard.withGuard { - RemoteClientModule.ensureRemotingEnabled + ensureRemotingEnabled try { actorRef.makeRemote(hostname, port) actorRef.start @@ -913,7 +915,7 @@ class LocalActorRef private[akka]( * To be invoked from within the actor itself. */ def spawnRemote(clazz: Class[_ <: Actor], hostname: String, port: Int): ActorRef = guard.withGuard { - RemoteClientModule.ensureRemotingEnabled + ensureRemotingEnabled val actor = spawnButDoNotStart(clazz) actor.makeRemote(hostname, port) actor.start @@ -941,7 +943,7 @@ class LocalActorRef private[akka]( * To be invoked from within the actor itself. */ def spawnLinkRemote(clazz: Class[_ <: Actor], hostname: String, port: Int): ActorRef = guard.withGuard { - RemoteClientModule.ensureRemotingEnabled + ensureRemotingEnabled val actor = spawnButDoNotStart(clazz) try { actor.makeRemote(hostname, port) @@ -978,8 +980,10 @@ class LocalActorRef private[akka]( protected[akka] def postMessageToMailbox(message: Any, senderOption: Option[ActorRef]): Unit = { joinTransaction(message) - if (remoteAddress.isDefined) RemoteClientModule.send(message, senderOption, None, remoteAddress.get, this) - else { + if (isRemotingEnabled && remoteAddress.isDefined) { + RemoteClientModule.send[Any]( + message, senderOption, None, remoteAddress.get, timeout, true, this, None, ActorType.ScalaActor) + } else { val invocation = new MessageInvocation(this, message, senderOption, None, transactionSet.get) invocation.send } @@ -992,9 +996,12 @@ class LocalActorRef private[akka]( senderFuture: Option[CompletableFuture[T]]): CompletableFuture[T] = { joinTransaction(message) - if (remoteAddress.isDefined) RemoteClientModule.send( - message, senderOption, senderFuture, remoteAddress.get, this) - else { + if (isRemotingEnabled && remoteAddress.isDefined) { + val future = RemoteClientModule.send[T]( + message, senderOption, senderFuture, remoteAddress.get, timeout, false, this, None, ActorType.ScalaActor) + if (future.isDefined) future.get + else throw new IllegalActorStateException("Expected a future from remote call to actor " + toString) + } else { val future = if (senderFuture.isDefined) senderFuture.get else new DefaultCompletableFuture[T](timeout) val invocation = new MessageInvocation( @@ -1096,7 +1103,7 @@ class LocalActorRef private[akka]( } protected[akka] def registerSupervisorAsRemoteActor: Option[String] = guard.withGuard { - RemoteClientModule.ensureRemotingEnabled + ensureRemotingEnabled if (_supervisor.isDefined) { remoteAddress.foreach(address => RemoteClientModule.registerSupervisorForActor(address, this)) Some(_supervisor.get.uuid) @@ -1358,7 +1365,7 @@ private[akka] case class RemoteActorRef private[akka] ( loader: Option[ClassLoader]) extends ActorRef with ScalaActorRef { - RemoteClientModule.ensureRemotingEnabled + ensureRemotingEnabled _uuid = uuuid timeout = _timeout @@ -1367,14 +1374,16 @@ private[akka] case class RemoteActorRef private[akka] ( lazy val remoteClient = RemoteClientModule.clientFor(hostname, port, loader) def postMessageToMailbox(message: Any, senderOption: Option[ActorRef]): Unit = - RemoteClientModule.send(message, senderOption, None, remoteAddress.get, this) + RemoteClientModule.send[Any]( + message, senderOption, None, remoteAddress.get, timeout, true, this, None, ActorType.ScalaActor) def postMessageToMailboxAndCreateFutureResultWithTimeout[T]( message: Any, timeout: Long, senderOption: Option[ActorRef], senderFuture: Option[CompletableFuture[T]]): CompletableFuture[T] = { - val future = RemoteClientModule.send(message, senderOption, None, remoteAddress.get, this) + val future = RemoteClientModule.send[T]( + message, senderOption, senderFuture, remoteAddress.get, timeout, false, this, None, ActorType.ScalaActor) if (future.isDefined) future.get else throw new IllegalActorStateException("Expected a future from remote call to actor " + toString) } @@ -1397,6 +1406,8 @@ private[akka] case class RemoteActorRef private[akka] ( protected[akka] def registerSupervisorAsRemoteActor: Option[String] = None + val remoteAddress: Option[InetSocketAddress] = Some(new InetSocketAddress(hostname, port)) + // ==== NOT SUPPORTED ==== def actorClass: Class[_ <: Actor] = unsupported def dispatcher_=(md: MessageDispatcher): Unit = unsupported @@ -1407,7 +1418,6 @@ private[akka] case class RemoteActorRef private[akka] ( def makeRemote(hostname: String, port: Int): Unit = unsupported def makeRemote(address: InetSocketAddress): Unit = unsupported def homeAddress_=(address: InetSocketAddress): Unit = unsupported - def remoteAddress: Option[InetSocketAddress] = unsupported def link(actorRef: ActorRef): Unit = unsupported def unlink(actorRef: ActorRef): Unit = unsupported def startLink(actorRef: ActorRef): Unit = unsupported @@ -1460,6 +1470,7 @@ trait ActorRefShared { * from ActorRef -> ScalaActorRef and back */ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => + /** * Identifier for actor, does not have to be a unique one. Default is the 'uuid'. *

@@ -1469,7 +1480,8 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => * upon restart, remote restart etc. */ def id: String - def id_=(id: String):Unit + + def id_=(id: String): Unit /** * User overridable callback/setting. @@ -1529,7 +1541,7 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => def sender: Option[ActorRef] = { // Five lines of map-performance-avoidance, could be just: currentMessage map { _.sender } val msg = currentMessage - if(msg.isEmpty) None + if (msg.isEmpty) None else msg.get.sender } @@ -1540,7 +1552,7 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => def senderFuture(): Option[CompletableFuture[Any]] = { // Five lines of map-performance-avoidance, could be just: currentMessage map { _.senderFuture } val msg = currentMessage - if(msg.isEmpty) None + if (msg.isEmpty) None else msg.get.senderFuture } @@ -1580,7 +1592,8 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => def !!(message: Any, timeout: Long = this.timeout)(implicit sender: Option[ActorRef] = None): Option[Any] = { if (isRunning) { val future = postMessageToMailboxAndCreateFutureResultWithTimeout[Any](message, timeout, sender, None) - val isMessageJoinPoint = TypedActorModule.resolveFutureIfMessageIsJoinPoint(message, future) + val isMessageJoinPoint = if (isTypedActorEnabled) TypedActorModule.resolveFutureIfMessageIsJoinPoint(message, future) + else false try { future.await } catch { @@ -1664,8 +1677,10 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => /** * Atomically create (from actor class), start and make an actor remote. */ - def spawnRemote[T <: Actor: Manifest](hostname: String, port: Int): ActorRef = + def spawnRemote[T <: Actor: Manifest](hostname: String, port: Int): ActorRef = { + ensureRemotingEnabled spawnRemote(manifest[T].erasure.asInstanceOf[Class[_ <: Actor]],hostname,port) + } /** @@ -1674,10 +1689,11 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => def spawnLink[T <: Actor: Manifest]: ActorRef = spawnLink(manifest[T].erasure.asInstanceOf[Class[_ <: Actor]]) - /** * Atomically create (from actor class), start, link and make an actor remote. */ - def spawnLinkRemote[T <: Actor : Manifest](hostname: String, port: Int): ActorRef = + def spawnLinkRemote[T <: Actor : Manifest](hostname: String, port: Int): ActorRef = { + ensureRemotingEnabled spawnLinkRemote(manifest[T].erasure.asInstanceOf[Class[_ <: Actor]],hostname,port) + } } diff --git a/akka-actors/src/main/scala/actor/ActorRegistry.scala b/akka-actor/src/main/scala/actor/ActorRegistry.scala similarity index 95% rename from akka-actors/src/main/scala/actor/ActorRegistry.scala rename to akka-actor/src/main/scala/actor/ActorRegistry.scala index 51de155723..b14ff45f48 100644 --- a/akka-actors/src/main/scala/actor/ActorRegistry.scala +++ b/akka-actor/src/main/scala/actor/ActorRegistry.scala @@ -8,10 +8,15 @@ import scala.collection.mutable.ListBuffer import scala.reflect.Manifest import java.util.concurrent.{ConcurrentSkipListSet, ConcurrentHashMap} -import java.util.{Set=>JSet} +import java.util.{Set => JSet} import se.scalablesolutions.akka.util.ListenerManagement +/** + * Base trait for ActorRegistry events, allows listen to when an actor is added and removed from the ActorRegistry. + * + * @author Jonas Bonér + */ sealed trait ActorRegistryEvent case class ActorRegistered(actor: ActorRef) extends ActorRegistryEvent case class ActorUnregistered(actor: ActorRef) extends ActorRegistryEvent diff --git a/akka-actors/src/main/scala/actor/Agent.scala b/akka-actor/src/main/scala/actor/Agent.scala similarity index 100% rename from akka-actors/src/main/scala/actor/Agent.scala rename to akka-actor/src/main/scala/actor/Agent.scala diff --git a/akka-actor/src/main/scala/actor/BootableActorLoaderService.scala b/akka-actor/src/main/scala/actor/BootableActorLoaderService.scala new file mode 100644 index 0000000000..dfb8541396 --- /dev/null +++ b/akka-actor/src/main/scala/actor/BootableActorLoaderService.scala @@ -0,0 +1,101 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package se.scalablesolutions.akka.actor + +import java.io.File +import java.net.{URL, URLClassLoader} +import java.util.jar.JarFile +import java.util.Enumeration + +import se.scalablesolutions.akka.util.{Bootable, Logging} +import se.scalablesolutions.akka.config.Config._ + +class AkkaDeployClassLoader(urls : List[URL], parent : ClassLoader) extends URLClassLoader(urls.toArray.asInstanceOf[Array[URL]],parent) +{ + override def findResources(resource : String) = { + val normalResult = super.findResources(resource) + if(normalResult.hasMoreElements) normalResult else findDeployed(resource) + } + + def findDeployed(resource : String) = new Enumeration[URL]{ + private val it = getURLs.flatMap( listClassesInPackage(_,resource) ).iterator + def hasMoreElements = it.hasNext + def nextElement = it.next + } + + def listClassesInPackage(jar : URL, pkg : String) = { + val f = new File(jar.getFile) + val jf = new JarFile(f) + try { + val es = jf.entries + var result = List[URL]() + while(es.hasMoreElements) + { + val e = es.nextElement + if(!e.isDirectory && e.getName.startsWith(pkg) && e.getName.endsWith(".class")) + result ::= new URL("jar:" + f.toURI.toURL + "!/" + e) + } + result + } finally { + jf.close + } + } +} + +/** + * Handles all modules in the deploy directory (load and unload) + */ +trait BootableActorLoaderService extends Bootable with Logging { + + val BOOT_CLASSES = config.getList("akka.boot") + lazy val applicationLoader: Option[ClassLoader] = createApplicationClassLoader + + protected def createApplicationClassLoader : Option[ClassLoader] = { + Some( + if (HOME.isDefined) { + val CONFIG = HOME.get + "/config" + val DEPLOY = HOME.get + "/deploy" + val DEPLOY_DIR = new File(DEPLOY) + if (!DEPLOY_DIR.exists) { + log.error("Could not find a deploy directory at [%s]", DEPLOY) + System.exit(-1) + } + val filesToDeploy = DEPLOY_DIR.listFiles.toArray.toList + .asInstanceOf[List[File]].filter(_.getName.endsWith(".jar")) + var dependencyJars: List[URL] = Nil + filesToDeploy.map { file => + val jarFile = new JarFile(file) + val en = jarFile.entries + while (en.hasMoreElements) { + val name = en.nextElement.getName + if (name.endsWith(".jar")) dependencyJars ::= new File( + String.format("jar:file:%s!/%s", jarFile.getName, name)).toURI.toURL + } + } + val toDeploy = filesToDeploy.map(_.toURI.toURL) + log.info("Deploying applications from [%s]: [%s]", DEPLOY, toDeploy) + log.debug("Loading dependencies [%s]", dependencyJars) + val allJars = toDeploy ::: dependencyJars + + new AkkaDeployClassLoader(allJars,Thread.currentThread.getContextClassLoader) + } else Thread.currentThread.getContextClassLoader) + } + + abstract override def onLoad = { + applicationLoader.foreach(_ => log.info("Creating /deploy class-loader")) + + super.onLoad + + for (loader <- applicationLoader; clazz <- BOOT_CLASSES) { + log.info("Loading boot class [%s]", clazz) + loader.loadClass(clazz).newInstance + } + } + + abstract override def onUnload = { + super.onUnload + ActorRegistry.shutdownAll + } +} diff --git a/akka-actors/src/main/scala/actor/FSM.scala b/akka-actor/src/main/scala/actor/FSM.scala similarity index 93% rename from akka-actors/src/main/scala/actor/FSM.scala rename to akka-actor/src/main/scala/actor/FSM.scala index 6248a2575c..0bdc04fc48 100644 --- a/akka-actors/src/main/scala/actor/FSM.scala +++ b/akka-actor/src/main/scala/actor/FSM.scala @@ -1,11 +1,15 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + package se.scalablesolutions.akka.actor import se.scalablesolutions.akka.stm.Ref import se.scalablesolutions.akka.stm.local._ + import java.util.concurrent.{ScheduledFuture, TimeUnit} -trait FSM[S] { - this: Actor => +trait FSM[S] { this: Actor => type StateFunction = scala.PartialFunction[Event, State] @@ -20,7 +24,6 @@ trait FSM[S] { State(NextState, currentState.stateFunction, stateData, currentState.timeout) } - override final protected def receive: Receive = { case value => { timeoutFuture = timeoutFuture.flatMap {ref => ref.cancel(true); None} diff --git a/akka-actors/src/main/scala/actor/Implicits.scala b/akka-actor/src/main/scala/actor/Implicits.scala similarity index 100% rename from akka-actors/src/main/scala/actor/Implicits.scala rename to akka-actor/src/main/scala/actor/Implicits.scala diff --git a/akka-actors/src/main/scala/actor/Scheduler.scala b/akka-actor/src/main/scala/actor/Scheduler.scala similarity index 99% rename from akka-actors/src/main/scala/actor/Scheduler.scala rename to akka-actor/src/main/scala/actor/Scheduler.scala index 50db44a1d0..5dc57056cc 100644 --- a/akka-actors/src/main/scala/actor/Scheduler.scala +++ b/akka-actor/src/main/scala/actor/Scheduler.scala @@ -16,6 +16,7 @@ package se.scalablesolutions.akka.actor import scala.collection.JavaConversions + import java.util.concurrent._ import se.scalablesolutions.akka.util.Logging diff --git a/akka-actors/src/main/scala/actor/Supervisor.scala b/akka-actor/src/main/scala/actor/Supervisor.scala similarity index 98% rename from akka-actors/src/main/scala/actor/Supervisor.scala rename to akka-actor/src/main/scala/actor/Supervisor.scala index 27baedbab3..5493f35c56 100644 --- a/akka-actors/src/main/scala/actor/Supervisor.scala +++ b/akka-actor/src/main/scala/actor/Supervisor.scala @@ -6,9 +6,9 @@ package se.scalablesolutions.akka.actor import se.scalablesolutions.akka.config.ScalaConfig._ import se.scalablesolutions.akka.config.{AllForOneStrategy, OneForOneStrategy, FaultHandlingStrategy} -import se.scalablesolutions.akka.util.Logging -import se.scalablesolutions.akka.remote.RemoteServerModule import se.scalablesolutions.akka.AkkaException +import se.scalablesolutions.akka.util._ +import ReflectiveAccess._ import Actor._ import java.util.concurrent.{CopyOnWriteArrayList, ConcurrentHashMap} diff --git a/akka-actors/src/main/scala/actor/UntypedActor.scala b/akka-actor/src/main/scala/actor/UntypedActor.scala similarity index 100% rename from akka-actors/src/main/scala/actor/UntypedActor.scala rename to akka-actor/src/main/scala/actor/UntypedActor.scala diff --git a/akka-actors/src/main/scala/config/Config.scala b/akka-actor/src/main/scala/config/Config.scala similarity index 100% rename from akka-actors/src/main/scala/config/Config.scala rename to akka-actor/src/main/scala/config/Config.scala diff --git a/akka-actors/src/main/scala/config/Configuration.scala b/akka-actor/src/main/scala/config/Configuration.scala similarity index 100% rename from akka-actors/src/main/scala/config/Configuration.scala rename to akka-actor/src/main/scala/config/Configuration.scala diff --git a/akka-actors/src/main/scala/config/Configurator.scala b/akka-actor/src/main/scala/config/Configurator.scala similarity index 100% rename from akka-actors/src/main/scala/config/Configurator.scala rename to akka-actor/src/main/scala/config/Configurator.scala diff --git a/akka-actors/src/main/scala/config/SupervisionConfig.scala b/akka-actor/src/main/scala/config/SupervisionConfig.scala similarity index 100% rename from akka-actors/src/main/scala/config/SupervisionConfig.scala rename to akka-actor/src/main/scala/config/SupervisionConfig.scala diff --git a/akka-actors/src/main/scala/dataflow/DataFlowVariable.scala b/akka-actor/src/main/scala/dataflow/DataFlowVariable.scala similarity index 100% rename from akka-actors/src/main/scala/dataflow/DataFlowVariable.scala rename to akka-actor/src/main/scala/dataflow/DataFlowVariable.scala diff --git a/akka-actors/src/main/scala/dispatch/AbstractReactorBasedEventDrivenDispatcher.scala b/akka-actor/src/main/scala/dispatch/AbstractReactorBasedEventDrivenDispatcher.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/AbstractReactorBasedEventDrivenDispatcher.scala rename to akka-actor/src/main/scala/dispatch/AbstractReactorBasedEventDrivenDispatcher.scala diff --git a/akka-actors/src/main/scala/dispatch/Dispatchers.scala b/akka-actor/src/main/scala/dispatch/Dispatchers.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/Dispatchers.scala rename to akka-actor/src/main/scala/dispatch/Dispatchers.scala diff --git a/akka-actors/src/main/scala/dispatch/ExecutorBasedEventDrivenDispatcher.scala b/akka-actor/src/main/scala/dispatch/ExecutorBasedEventDrivenDispatcher.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/ExecutorBasedEventDrivenDispatcher.scala rename to akka-actor/src/main/scala/dispatch/ExecutorBasedEventDrivenDispatcher.scala diff --git a/akka-actors/src/main/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala b/akka-actor/src/main/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala rename to akka-actor/src/main/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala diff --git a/akka-actors/src/main/scala/dispatch/Future.scala b/akka-actor/src/main/scala/dispatch/Future.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/Future.scala rename to akka-actor/src/main/scala/dispatch/Future.scala diff --git a/akka-actors/src/main/scala/dispatch/HawtDispatcher.scala b/akka-actor/src/main/scala/dispatch/HawtDispatcher.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/HawtDispatcher.scala rename to akka-actor/src/main/scala/dispatch/HawtDispatcher.scala diff --git a/akka-actors/src/main/scala/dispatch/MessageHandling.scala b/akka-actor/src/main/scala/dispatch/MessageHandling.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/MessageHandling.scala rename to akka-actor/src/main/scala/dispatch/MessageHandling.scala diff --git a/akka-actors/src/main/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcher.scala b/akka-actor/src/main/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcher.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcher.scala rename to akka-actor/src/main/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcher.scala diff --git a/akka-actors/src/main/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcher.scala b/akka-actor/src/main/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcher.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcher.scala rename to akka-actor/src/main/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcher.scala diff --git a/akka-actors/src/main/scala/dispatch/ThreadBasedDispatcher.scala b/akka-actor/src/main/scala/dispatch/ThreadBasedDispatcher.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/ThreadBasedDispatcher.scala rename to akka-actor/src/main/scala/dispatch/ThreadBasedDispatcher.scala diff --git a/akka-actors/src/main/scala/dispatch/ThreadPoolBuilder.scala b/akka-actor/src/main/scala/dispatch/ThreadPoolBuilder.scala similarity index 100% rename from akka-actors/src/main/scala/dispatch/ThreadPoolBuilder.scala rename to akka-actor/src/main/scala/dispatch/ThreadPoolBuilder.scala diff --git a/akka-actors/src/main/scala/routing/Iterators.scala b/akka-actor/src/main/scala/routing/Iterators.scala similarity index 100% rename from akka-actors/src/main/scala/routing/Iterators.scala rename to akka-actor/src/main/scala/routing/Iterators.scala diff --git a/akka-actors/src/main/scala/routing/Listeners.scala b/akka-actor/src/main/scala/routing/Listeners.scala similarity index 100% rename from akka-actors/src/main/scala/routing/Listeners.scala rename to akka-actor/src/main/scala/routing/Listeners.scala diff --git a/akka-actors/src/main/scala/routing/Routers.scala b/akka-actor/src/main/scala/routing/Routers.scala similarity index 100% rename from akka-actors/src/main/scala/routing/Routers.scala rename to akka-actor/src/main/scala/routing/Routers.scala diff --git a/akka-actors/src/main/scala/routing/Routing.scala b/akka-actor/src/main/scala/routing/Routing.scala similarity index 100% rename from akka-actors/src/main/scala/routing/Routing.scala rename to akka-actor/src/main/scala/routing/Routing.scala diff --git a/akka-actors/src/main/scala/stm/JTA.scala b/akka-actor/src/main/scala/stm/JTA.scala similarity index 100% rename from akka-actors/src/main/scala/stm/JTA.scala rename to akka-actor/src/main/scala/stm/JTA.scala diff --git a/akka-actors/src/main/scala/stm/Ref.scala b/akka-actor/src/main/scala/stm/Ref.scala similarity index 100% rename from akka-actors/src/main/scala/stm/Ref.scala rename to akka-actor/src/main/scala/stm/Ref.scala diff --git a/akka-actors/src/main/scala/stm/Transaction.scala b/akka-actor/src/main/scala/stm/Transaction.scala similarity index 100% rename from akka-actors/src/main/scala/stm/Transaction.scala rename to akka-actor/src/main/scala/stm/Transaction.scala diff --git a/akka-actors/src/main/scala/stm/TransactionFactory.scala b/akka-actor/src/main/scala/stm/TransactionFactory.scala similarity index 100% rename from akka-actors/src/main/scala/stm/TransactionFactory.scala rename to akka-actor/src/main/scala/stm/TransactionFactory.scala diff --git a/akka-actors/src/main/scala/stm/TransactionFactoryBuilder.scala b/akka-actor/src/main/scala/stm/TransactionFactoryBuilder.scala similarity index 100% rename from akka-actors/src/main/scala/stm/TransactionFactoryBuilder.scala rename to akka-actor/src/main/scala/stm/TransactionFactoryBuilder.scala diff --git a/akka-actors/src/main/scala/stm/TransactionManagement.scala b/akka-actor/src/main/scala/stm/TransactionManagement.scala similarity index 100% rename from akka-actors/src/main/scala/stm/TransactionManagement.scala rename to akka-actor/src/main/scala/stm/TransactionManagement.scala diff --git a/akka-actors/src/main/scala/stm/TransactionalMap.scala b/akka-actor/src/main/scala/stm/TransactionalMap.scala similarity index 100% rename from akka-actors/src/main/scala/stm/TransactionalMap.scala rename to akka-actor/src/main/scala/stm/TransactionalMap.scala diff --git a/akka-actors/src/main/scala/stm/TransactionalVector.scala b/akka-actor/src/main/scala/stm/TransactionalVector.scala similarity index 100% rename from akka-actors/src/main/scala/stm/TransactionalVector.scala rename to akka-actor/src/main/scala/stm/TransactionalVector.scala diff --git a/akka-actors/src/main/scala/stm/global/Atomic.scala b/akka-actor/src/main/scala/stm/global/Atomic.scala similarity index 100% rename from akka-actors/src/main/scala/stm/global/Atomic.scala rename to akka-actor/src/main/scala/stm/global/Atomic.scala diff --git a/akka-actors/src/main/scala/stm/global/GlobalStm.scala b/akka-actor/src/main/scala/stm/global/GlobalStm.scala similarity index 100% rename from akka-actors/src/main/scala/stm/global/GlobalStm.scala rename to akka-actor/src/main/scala/stm/global/GlobalStm.scala diff --git a/akka-actors/src/main/scala/stm/global/package.scala b/akka-actor/src/main/scala/stm/global/package.scala similarity index 100% rename from akka-actors/src/main/scala/stm/global/package.scala rename to akka-actor/src/main/scala/stm/global/package.scala diff --git a/akka-actors/src/main/scala/stm/local/Atomic.scala b/akka-actor/src/main/scala/stm/local/Atomic.scala similarity index 100% rename from akka-actors/src/main/scala/stm/local/Atomic.scala rename to akka-actor/src/main/scala/stm/local/Atomic.scala diff --git a/akka-actors/src/main/scala/stm/local/LocalStm.scala b/akka-actor/src/main/scala/stm/local/LocalStm.scala similarity index 100% rename from akka-actors/src/main/scala/stm/local/LocalStm.scala rename to akka-actor/src/main/scala/stm/local/LocalStm.scala diff --git a/akka-actors/src/main/scala/stm/local/package.scala b/akka-actor/src/main/scala/stm/local/package.scala similarity index 100% rename from akka-actors/src/main/scala/stm/local/package.scala rename to akka-actor/src/main/scala/stm/local/package.scala diff --git a/akka-actors/src/main/scala/stm/transactional.scala b/akka-actor/src/main/scala/stm/transactional.scala similarity index 100% rename from akka-actors/src/main/scala/stm/transactional.scala rename to akka-actor/src/main/scala/stm/transactional.scala diff --git a/akka-actors/src/main/scala/util/AkkaException.scala b/akka-actor/src/main/scala/util/AkkaException.scala similarity index 100% rename from akka-actors/src/main/scala/util/AkkaException.scala rename to akka-actor/src/main/scala/util/AkkaException.scala diff --git a/akka-actors/src/main/scala/util/Bootable.scala b/akka-actor/src/main/scala/util/Bootable.scala similarity index 100% rename from akka-actors/src/main/scala/util/Bootable.scala rename to akka-actor/src/main/scala/util/Bootable.scala diff --git a/akka-actors/src/main/scala/util/Duration.scala b/akka-actor/src/main/scala/util/Duration.scala similarity index 100% rename from akka-actors/src/main/scala/util/Duration.scala rename to akka-actor/src/main/scala/util/Duration.scala diff --git a/akka-actors/src/main/scala/util/HashCode.scala b/akka-actor/src/main/scala/util/HashCode.scala similarity index 100% rename from akka-actors/src/main/scala/util/HashCode.scala rename to akka-actor/src/main/scala/util/HashCode.scala diff --git a/akka-actors/src/main/scala/util/Helpers.scala b/akka-actor/src/main/scala/util/Helpers.scala similarity index 100% rename from akka-actors/src/main/scala/util/Helpers.scala rename to akka-actor/src/main/scala/util/Helpers.scala diff --git a/akka-actors/src/main/scala/util/ListenerManagement.scala b/akka-actor/src/main/scala/util/ListenerManagement.scala similarity index 100% rename from akka-actors/src/main/scala/util/ListenerManagement.scala rename to akka-actor/src/main/scala/util/ListenerManagement.scala diff --git a/akka-actors/src/main/scala/util/LockUtil.scala b/akka-actor/src/main/scala/util/LockUtil.scala similarity index 100% rename from akka-actors/src/main/scala/util/LockUtil.scala rename to akka-actor/src/main/scala/util/LockUtil.scala diff --git a/akka-actors/src/main/scala/util/Logging.scala b/akka-actor/src/main/scala/util/Logging.scala similarity index 100% rename from akka-actors/src/main/scala/util/Logging.scala rename to akka-actor/src/main/scala/util/Logging.scala diff --git a/akka-actor/src/main/scala/util/ReflectiveAccess.scala b/akka-actor/src/main/scala/util/ReflectiveAccess.scala new file mode 100644 index 0000000000..72909457b0 --- /dev/null +++ b/akka-actor/src/main/scala/util/ReflectiveAccess.scala @@ -0,0 +1,193 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package se.scalablesolutions.akka.util + +import se.scalablesolutions.akka.actor.{ActorRef, IllegalActorStateException, ActorType} +import se.scalablesolutions.akka.dispatch.{Future, CompletableFuture} +import se.scalablesolutions.akka.config.{Config, ModuleNotAvailableException} + +import java.net.InetSocketAddress + +/** + * Helper class for reflective access to different modules in order to allow optional loading of modules. + * + * @author Jonas Bonér + */ +object ReflectiveAccess { + + val loader = getClass.getClassLoader + + lazy val isRemotingEnabled = RemoteClientModule.isRemotingEnabled + lazy val isTypedActorEnabled = TypedActorModule.isTypedActorEnabled + + def ensureRemotingEnabled = RemoteClientModule.ensureRemotingEnabled + def ensureTypedActorEnabled = TypedActorModule.ensureTypedActorEnabled + + /** + * Reflective access to the RemoteClient module. + * + * @author Jonas Bonér + */ + object RemoteClientModule { + + type RemoteClient = { + def send[T]( + message: Any, + senderOption: Option[ActorRef], + senderFuture: Option[CompletableFuture[_]], + remoteAddress: InetSocketAddress, + timeout: Long, + isOneWay: Boolean, + actorRef: ActorRef, + typedActorInfo: Option[Tuple2[String, String]], + actorType: ActorType): Option[CompletableFuture[T]] + def registerSupervisorForActor(actorRef: ActorRef) + } + + type RemoteClientObject = { + def register(hostname: String, port: Int, uuid: String): Unit + def unregister(hostname: String, port: Int, uuid: String): Unit + def clientFor(address: InetSocketAddress): RemoteClient + def clientFor(hostname: String, port: Int, loader: Option[ClassLoader]): RemoteClient + } + + lazy val isRemotingEnabled = remoteClientObjectInstance.isDefined + + def ensureRemotingEnabled = if (!isRemotingEnabled) throw new ModuleNotAvailableException( + "Can't load the remoting module, make sure that akka-remote.jar is on the classpath") + + val remoteClientObjectInstance: Option[RemoteClientObject] = { + try { + val clazz = loader.loadClass("se.scalablesolutions.akka.remote.RemoteClient$") + val ctor = clazz.getDeclaredConstructor(Array[Class[_]](): _*) + ctor.setAccessible(true) + Some(ctor.newInstance(Array[AnyRef](): _*).asInstanceOf[RemoteClientObject]) + } catch { case e => None } + } + + def register(address: InetSocketAddress, uuid: String) = { + ensureRemotingEnabled + remoteClientObjectInstance.get.register(address.getHostName, address.getPort, uuid) + } + + def unregister(address: InetSocketAddress, uuid: String) = { + ensureRemotingEnabled + remoteClientObjectInstance.get.unregister(address.getHostName, address.getPort, uuid) + } + + def registerSupervisorForActor(remoteAddress: InetSocketAddress, actorRef: ActorRef) = { + ensureRemotingEnabled + val remoteClient = remoteClientObjectInstance.get.clientFor(remoteAddress) + remoteClient.registerSupervisorForActor(actorRef) + } + + def clientFor(hostname: String, port: Int, loader: Option[ClassLoader]): RemoteClient = { + ensureRemotingEnabled + remoteClientObjectInstance.get.clientFor(hostname, port, loader) + } + + def send[T]( + message: Any, + senderOption: Option[ActorRef], + senderFuture: Option[CompletableFuture[_]], + remoteAddress: InetSocketAddress, + timeout: Long, + isOneWay: Boolean, + actorRef: ActorRef, + typedActorInfo: Option[Tuple2[String, String]], + actorType: ActorType): Option[CompletableFuture[T]] = { + ensureRemotingEnabled + clientFor(remoteAddress.getHostName, remoteAddress.getPort, None).send[T]( + message, senderOption, senderFuture, remoteAddress, timeout, isOneWay, actorRef, typedActorInfo, actorType) + } + } + + /** + * Reflective access to the RemoteServer module. + * + * @author Jonas Bonér + */ + object RemoteServerModule { + val HOSTNAME = Config.config.getString("akka.remote.server.hostname", "localhost") + val PORT = Config.config.getInt("akka.remote.server.port", 9999) + + type RemoteServerObject = { + def registerActor(address: InetSocketAddress, uuid: String, actor: ActorRef): Unit + def registerTypedActor(address: InetSocketAddress, name: String, typedActor: AnyRef): Unit + } + + type RemoteNodeObject = { + def unregister(actorRef: ActorRef): Unit + } + + val remoteServerObjectInstance: Option[RemoteServerObject] = { + try { + val clazz = loader.loadClass("se.scalablesolutions.akka.remote.RemoteServer$") + val ctor = clazz.getDeclaredConstructor(Array[Class[_]](): _*) + ctor.setAccessible(true) + Some(ctor.newInstance(Array[AnyRef](): _*).asInstanceOf[RemoteServerObject]) + } catch { case e => None } + } + + val remoteNodeObjectInstance: Option[RemoteNodeObject] = { + try { + val clazz = loader.loadClass("se.scalablesolutions.akka.remote.RemoteNode$") + val ctor = clazz.getDeclaredConstructor(Array[Class[_]](): _*) + ctor.setAccessible(true) + Some(ctor.newInstance(Array[AnyRef](): _*).asInstanceOf[RemoteNodeObject]) + } catch { case e => None } + } + + def registerActor(address: InetSocketAddress, uuid: String, actorRef: ActorRef) = { + ensureRemotingEnabled + remoteServerObjectInstance.get.registerActor(address, uuid, actorRef) + } + + def registerTypedActor(address: InetSocketAddress, implementationClassName: String, proxy: AnyRef) = { + ensureRemotingEnabled + remoteServerObjectInstance.get.registerTypedActor(address, implementationClassName, proxy) + } + + def unregister(actorRef: ActorRef) = { + ensureRemotingEnabled + remoteNodeObjectInstance.get.unregister(actorRef) + } + } + + /** + * Reflective access to the TypedActors module. + * + * @author Jonas Bonér + */ + object TypedActorModule { + + type TypedActorObject = { + def isJoinPoint(message: Any): Boolean + def isJoinPointAndOneWay(message: Any): Boolean + } + + lazy val isTypedActorEnabled = typedActorObjectInstance.isDefined + + def ensureTypedActorEnabled = if (!isTypedActorEnabled) throw new ModuleNotAvailableException( + "Can't load the typed actor module, make sure that akka-typed-actor.jar is on the classpath") + + val typedActorObjectInstance: Option[TypedActorObject] = { + try { + val clazz = loader.loadClass("se.scalablesolutions.akka.actor.TypedActor$") + val ctor = clazz.getDeclaredConstructor(Array[Class[_]](): _*) + ctor.setAccessible(true) + Some(ctor.newInstance(Array[AnyRef](): _*).asInstanceOf[TypedActorObject]) + } catch { case e => None } + } + + def resolveFutureIfMessageIsJoinPoint(message: Any, future: Future[_]): Boolean = { + ensureTypedActorEnabled + if (typedActorObjectInstance.get.isJoinPointAndOneWay(message)) { + future.asInstanceOf[CompletableFuture[Option[_]]].completeWithResult(None) + } + typedActorObjectInstance.get.isJoinPoint(message) + } + } +} diff --git a/akka-actors/src/main/scala/util/Uuid.scala b/akka-actor/src/main/scala/util/Uuid.scala similarity index 100% rename from akka-actors/src/main/scala/util/Uuid.scala rename to akka-actor/src/main/scala/util/Uuid.scala diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/stm/Address.java b/akka-actor/src/test/java/se/scalablesolutions/akka/stm/Address.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/stm/Address.java rename to akka-actor/src/test/java/se/scalablesolutions/akka/stm/Address.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/stm/CounterExample.java b/akka-actor/src/test/java/se/scalablesolutions/akka/stm/CounterExample.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/stm/CounterExample.java rename to akka-actor/src/test/java/se/scalablesolutions/akka/stm/CounterExample.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/stm/JavaStmTests.java b/akka-actor/src/test/java/se/scalablesolutions/akka/stm/JavaStmTests.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/stm/JavaStmTests.java rename to akka-actor/src/test/java/se/scalablesolutions/akka/stm/JavaStmTests.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/stm/RefExample.java b/akka-actor/src/test/java/se/scalablesolutions/akka/stm/RefExample.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/stm/RefExample.java rename to akka-actor/src/test/java/se/scalablesolutions/akka/stm/RefExample.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/stm/StmExamples.java b/akka-actor/src/test/java/se/scalablesolutions/akka/stm/StmExamples.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/stm/StmExamples.java rename to akka-actor/src/test/java/se/scalablesolutions/akka/stm/StmExamples.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/stm/TransactionFactoryExample.java b/akka-actor/src/test/java/se/scalablesolutions/akka/stm/TransactionFactoryExample.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/stm/TransactionFactoryExample.java rename to akka-actor/src/test/java/se/scalablesolutions/akka/stm/TransactionFactoryExample.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/stm/TransactionalMapExample.java b/akka-actor/src/test/java/se/scalablesolutions/akka/stm/TransactionalMapExample.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/stm/TransactionalMapExample.java rename to akka-actor/src/test/java/se/scalablesolutions/akka/stm/TransactionalMapExample.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/stm/TransactionalVectorExample.java b/akka-actor/src/test/java/se/scalablesolutions/akka/stm/TransactionalVectorExample.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/stm/TransactionalVectorExample.java rename to akka-actor/src/test/java/se/scalablesolutions/akka/stm/TransactionalVectorExample.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/stm/User.java b/akka-actor/src/test/java/se/scalablesolutions/akka/stm/User.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/stm/User.java rename to akka-actor/src/test/java/se/scalablesolutions/akka/stm/User.java diff --git a/akka-actors/src/test/resources/logback-test.xml b/akka-actor/src/test/resources/logback-test.xml similarity index 100% rename from akka-actors/src/test/resources/logback-test.xml rename to akka-actor/src/test/resources/logback-test.xml diff --git a/akka-actor/src/test/scala/Messages.scala b/akka-actor/src/test/scala/Messages.scala new file mode 100644 index 0000000000..7e22dd9d7c --- /dev/null +++ b/akka-actor/src/test/scala/Messages.scala @@ -0,0 +1,13 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package se.scalablesolutions.akka + +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/akka-actors/src/test/scala/actor/actor/ActorFireForgetRequestReplySpec.scala b/akka-actor/src/test/scala/actor/actor/ActorFireForgetRequestReplySpec.scala similarity index 100% rename from akka-actors/src/test/scala/actor/actor/ActorFireForgetRequestReplySpec.scala rename to akka-actor/src/test/scala/actor/actor/ActorFireForgetRequestReplySpec.scala diff --git a/akka-actors/src/test/scala/actor/actor/AgentSpec.scala b/akka-actor/src/test/scala/actor/actor/AgentSpec.scala similarity index 100% rename from akka-actors/src/test/scala/actor/actor/AgentSpec.scala rename to akka-actor/src/test/scala/actor/actor/AgentSpec.scala diff --git a/akka-actors/src/test/scala/actor/actor/Bench.scala b/akka-actor/src/test/scala/actor/actor/Bench.scala similarity index 100% rename from akka-actors/src/test/scala/actor/actor/Bench.scala rename to akka-actor/src/test/scala/actor/actor/Bench.scala diff --git a/akka-actors/src/test/scala/actor/actor/FSMActorSpec.scala b/akka-actor/src/test/scala/actor/actor/FSMActorSpec.scala similarity index 100% rename from akka-actors/src/test/scala/actor/actor/FSMActorSpec.scala rename to akka-actor/src/test/scala/actor/actor/FSMActorSpec.scala diff --git a/akka-actors/src/test/scala/actor/actor/ForwardActorSpec.scala b/akka-actor/src/test/scala/actor/actor/ForwardActorSpec.scala similarity index 100% rename from akka-actors/src/test/scala/actor/actor/ForwardActorSpec.scala rename to akka-actor/src/test/scala/actor/actor/ForwardActorSpec.scala diff --git a/akka-actors/src/test/scala/actor/actor/ReceiveTimeoutSpec.scala b/akka-actor/src/test/scala/actor/actor/ReceiveTimeoutSpec.scala similarity index 100% rename from akka-actors/src/test/scala/actor/actor/ReceiveTimeoutSpec.scala rename to akka-actor/src/test/scala/actor/actor/ReceiveTimeoutSpec.scala diff --git a/akka-actors/src/test/scala/actor/actor/TransactorSpec.scala b/akka-actor/src/test/scala/actor/actor/TransactorSpec.scala similarity index 100% rename from akka-actors/src/test/scala/actor/actor/TransactorSpec.scala rename to akka-actor/src/test/scala/actor/actor/TransactorSpec.scala diff --git a/akka-actors/src/test/scala/actor/supervisor/RestartStrategySpec.scala b/akka-actor/src/test/scala/actor/supervisor/RestartStrategySpec.scala similarity index 100% rename from akka-actors/src/test/scala/actor/supervisor/RestartStrategySpec.scala rename to akka-actor/src/test/scala/actor/supervisor/RestartStrategySpec.scala diff --git a/akka-actors/src/test/scala/actor/supervisor/SupervisorHierarchySpec.scala b/akka-actor/src/test/scala/actor/supervisor/SupervisorHierarchySpec.scala similarity index 100% rename from akka-actors/src/test/scala/actor/supervisor/SupervisorHierarchySpec.scala rename to akka-actor/src/test/scala/actor/supervisor/SupervisorHierarchySpec.scala diff --git a/akka-actors/src/test/scala/actor/supervisor/SupervisorSpec.scala b/akka-actor/src/test/scala/actor/supervisor/SupervisorSpec.scala similarity index 100% rename from akka-actors/src/test/scala/actor/supervisor/SupervisorSpec.scala rename to akka-actor/src/test/scala/actor/supervisor/SupervisorSpec.scala diff --git a/akka-core/src/test/scala/dataflow/DataFlowSpec.scala b/akka-actor/src/test/scala/dataflow/DataFlowSpec.scala similarity index 98% rename from akka-core/src/test/scala/dataflow/DataFlowSpec.scala rename to akka-actor/src/test/scala/dataflow/DataFlowSpec.scala index ce54699a6f..c5d3c32e63 100644 --- a/akka-core/src/test/scala/dataflow/DataFlowSpec.scala +++ b/akka-actor/src/test/scala/dataflow/DataFlowSpec.scala @@ -22,7 +22,7 @@ import se.scalablesolutions.akka.actor.ActorRegistry @RunWith(classOf[JUnitRunner]) class DataFlowTest extends Spec with ShouldMatchers with BeforeAndAfterAll { describe("DataflowVariable") { - it("should work and generate correct results") { + /* it("should work and generate correct results") { import DataFlow._ val latch = new CountDownLatch(1) @@ -73,8 +73,8 @@ class DataFlowTest extends Spec with ShouldMatchers with BeforeAndAfterAll { result.get should equal (sum(0,ints(0,1000))) ActorRegistry.shutdownAll } + */ } - /*it("should be able to join streams") { import DataFlow._ diff --git a/akka-actors/src/test/scala/dispatch/DispatchersSpec.scala b/akka-actor/src/test/scala/dispatch/DispatchersSpec.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/DispatchersSpec.scala rename to akka-actor/src/test/scala/dispatch/DispatchersSpec.scala diff --git a/akka-actors/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala b/akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala rename to akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala diff --git a/akka-actors/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala b/akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala rename to akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala diff --git a/akka-actors/src/test/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala b/akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala rename to akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala diff --git a/akka-actors/src/test/scala/dispatch/FutureSpec.scala b/akka-actor/src/test/scala/dispatch/FutureSpec.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/FutureSpec.scala rename to akka-actor/src/test/scala/dispatch/FutureSpec.scala diff --git a/akka-actors/src/test/scala/dispatch/HawtDispatcherActorSpec.scala b/akka-actor/src/test/scala/dispatch/HawtDispatcherActorSpec.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/HawtDispatcherActorSpec.scala rename to akka-actor/src/test/scala/dispatch/HawtDispatcherActorSpec.scala diff --git a/akka-actors/src/test/scala/dispatch/HawtDispatcherEchoServer.scala b/akka-actor/src/test/scala/dispatch/HawtDispatcherEchoServer.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/HawtDispatcherEchoServer.scala rename to akka-actor/src/test/scala/dispatch/HawtDispatcherEchoServer.scala diff --git a/akka-actors/src/test/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcherActorSpec.scala b/akka-actor/src/test/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcherActorSpec.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcherActorSpec.scala rename to akka-actor/src/test/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcherActorSpec.scala diff --git a/akka-actors/src/test/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcherActorSpec.scala b/akka-actor/src/test/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcherActorSpec.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcherActorSpec.scala rename to akka-actor/src/test/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcherActorSpec.scala diff --git a/akka-actors/src/test/scala/dispatch/ThreadBasedActorSpec.scala b/akka-actor/src/test/scala/dispatch/ThreadBasedActorSpec.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/ThreadBasedActorSpec.scala rename to akka-actor/src/test/scala/dispatch/ThreadBasedActorSpec.scala diff --git a/akka-actors/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala b/akka-actor/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala similarity index 100% rename from akka-actors/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala rename to akka-actor/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala diff --git a/akka-actors/src/test/scala/misc/ActorRegistrySpec.scala b/akka-actor/src/test/scala/misc/ActorRegistrySpec.scala similarity index 100% rename from akka-actors/src/test/scala/misc/ActorRegistrySpec.scala rename to akka-actor/src/test/scala/misc/ActorRegistrySpec.scala diff --git a/akka-actors/src/test/scala/misc/SchedulerSpec.scala b/akka-actor/src/test/scala/misc/SchedulerSpec.scala similarity index 100% rename from akka-actors/src/test/scala/misc/SchedulerSpec.scala rename to akka-actor/src/test/scala/misc/SchedulerSpec.scala diff --git a/akka-actors/src/test/scala/routing/RoutingSpec.scala b/akka-actor/src/test/scala/routing/RoutingSpec.scala similarity index 100% rename from akka-actors/src/test/scala/routing/RoutingSpec.scala rename to akka-actor/src/test/scala/routing/RoutingSpec.scala diff --git a/akka-actors/src/test/scala/stm/JavaStmSpec.scala b/akka-actor/src/test/scala/stm/JavaStmSpec.scala similarity index 100% rename from akka-actors/src/test/scala/stm/JavaStmSpec.scala rename to akka-actor/src/test/scala/stm/JavaStmSpec.scala diff --git a/akka-actors/src/test/scala/stm/RefSpec.scala b/akka-actor/src/test/scala/stm/RefSpec.scala similarity index 100% rename from akka-actors/src/test/scala/stm/RefSpec.scala rename to akka-actor/src/test/scala/stm/RefSpec.scala diff --git a/akka-actors/src/test/scala/stm/StmSpec.scala b/akka-actor/src/test/scala/stm/StmSpec.scala similarity index 100% rename from akka-actors/src/test/scala/stm/StmSpec.scala rename to akka-actor/src/test/scala/stm/StmSpec.scala diff --git a/akka-actors/src/test/scala/ticket/Ticket001Spec.scala b/akka-actor/src/test/scala/ticket/Ticket001Spec.scala similarity index 100% rename from akka-actors/src/test/scala/ticket/Ticket001Spec.scala rename to akka-actor/src/test/scala/ticket/Ticket001Spec.scala diff --git a/akka-actors/src/test/scala/dataflow/DataFlowSpec.scala b/akka-actors/src/test/scala/dataflow/DataFlowSpec.scala deleted file mode 100644 index ce54699a6f..0000000000 --- a/akka-actors/src/test/scala/dataflow/DataFlowSpec.scala +++ /dev/null @@ -1,173 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.dataflow - -import org.scalatest.Spec -import org.scalatest.Assertions -import org.scalatest.matchers.ShouldMatchers -import org.scalatest.BeforeAndAfterAll -import org.scalatest.junit.JUnitRunner -import org.junit.runner.RunWith - -import java.util.concurrent.{TimeUnit, CountDownLatch} -import java.util.concurrent.atomic.{AtomicLong, AtomicReference, AtomicInteger} - -import scala.annotation.tailrec - -import se.scalablesolutions.akka.dispatch.DefaultCompletableFuture -import se.scalablesolutions.akka.actor.ActorRegistry - -@RunWith(classOf[JUnitRunner]) -class DataFlowTest extends Spec with ShouldMatchers with BeforeAndAfterAll { - describe("DataflowVariable") { - it("should work and generate correct results") { - import DataFlow._ - - val latch = new CountDownLatch(1) - val result = new AtomicInteger(0) - val x, y, z = new DataFlowVariable[Int] - thread { - z << x() + y() - latch.countDown - result.set(z()) - } - thread { x << 40 } - thread { y << 2 } - - latch.await(3,TimeUnit.SECONDS) should equal (true) - List(x,y,z).foreach(_.shutdown) - result.get should equal (42) - ActorRegistry.shutdownAll - } - - it("should be able to transform a stream") { - import DataFlow._ - - def ints(n: Int, max: Int): List[Int] = - if (n == max) Nil - else n :: ints(n + 1, max) - - def sum(s: Int, stream: List[Int]): List[Int] = stream match { - case Nil => s :: Nil - case h :: t => s :: sum(h + s, t) - } - - val latch = new CountDownLatch(1) - val result = new AtomicReference[List[Int]](Nil) - val x = new DataFlowVariable[List[Int]] - val y = new DataFlowVariable[List[Int]] - val z = new DataFlowVariable[List[Int]] - - thread { x << ints(0, 1000) } - thread { y << sum(0, x()) } - - thread { z << y() - result.set(z()) - latch.countDown - } - - latch.await(3,TimeUnit.SECONDS) should equal (true) - List(x,y,z).foreach(_.shutdown) - result.get should equal (sum(0,ints(0,1000))) - ActorRegistry.shutdownAll - } - } - - /*it("should be able to join streams") { - import DataFlow._ - - def ints(n: Int, max: Int, stream: DataFlowStream[Int]): Unit = if (n != max) { - stream <<< n - ints(n + 1, max, stream) - } - - def sum(s: Int, in: DataFlowStream[Int], out: DataFlowStream[Int]): Unit = { - out <<< s - sum(in() + s, in, out) - } - - val producer = new DataFlowStream[Int] - val consumer = new DataFlowStream[Int] - val latch = new CountDownLatch(1) - val result = new AtomicInteger(0) - - thread { ints(0, 1000, producer) } - thread { - Thread.sleep(1000) - result.set(producer.map(x => x * x).foldLeft(0)(_ + _)) - latch.countDown - } - - latch.await(3,TimeUnit.SECONDS) should equal (true) - result.get should equal (332833500) - ActorRegistry.shutdownAll - } - - it("should be able to sum streams recursively") { - import DataFlow._ - - def ints(n: Int, max: Int, stream: DataFlowStream[Int]): Unit = if (n != max) { - stream <<< n - ints(n + 1, max, stream) - } - - def sum(s: Int, in: DataFlowStream[Int], out: DataFlowStream[Int]): Unit = { - out <<< s - sum(in() + s, in, out) - } - - val result = new AtomicLong(0) - - val producer = new DataFlowStream[Int] - val consumer = new DataFlowStream[Int] - val latch = new CountDownLatch(1) - - @tailrec def recurseSum(stream: DataFlowStream[Int]): Unit = { - val x = stream() - - if(result.addAndGet(x) == 166666500) - latch.countDown - - recurseSum(stream) - } - - thread { ints(0, 1000, producer) } - thread { sum(0, producer, consumer) } - thread { recurseSum(consumer) } - - latch.await(15,TimeUnit.SECONDS) should equal (true) - ActorRegistry.shutdownAll - }*/ - - /* Test not ready for prime time, causes some sort of deadlock */ - /* it("should be able to conditionally set variables") { - - import DataFlow._ - - val latch = new CountDownLatch(1) - val x, y, z, v = new DataFlowVariable[Int] - - val main = thread { - x << 1 - z << Math.max(x(),y()) - latch.countDown - } - - val setY = thread { - Thread sleep 2000 - y << 2 - } - - val setV = thread { - v << y - } - - latch.await(2,TimeUnit.SECONDS) should equal (true) - List(x,y,z,v) foreach (_.shutdown) - List(main,setY,setV) foreach (_ ! Exit) - println("Foo") - ActorRegistry.shutdownAll - }*/ -} diff --git a/akka-core/.ensime b/akka-core/.ensime deleted file mode 100644 index 0b21e8eb5c..0000000000 --- a/akka-core/.ensime +++ /dev/null @@ -1,79 +0,0 @@ -( - - ;; Where you unpacked the ENSIME distribution. - :server-root "/Users/jboner/config/emacs-config/lib/ensime" - - ;; The command with which to invoke the ENSIME server. Change this to - ;; "bin/server.bat" if your're on Windows. - :server-cmd "bin/server.sh" - - - ;; The host to connect to. Connecting to remote ENSIME servers is not - ;; currently supported. - ;; ------------------------------ - ;; :server-host "localhost" - - - ;; Assume a standard sbt directory structure. Look in default sbt - ;; locations for dependencies, sources, target, etc. - ;; - ;; Note for sbt subprojects: Each subproject needs it's own .ensime - ;; file. - ;; ----------------------------- - :use-sbt t - :sbt-compile-conf "compile" - - - ;; Use an existing pom.xml to determine the dependencies - ;; for the project. A Maven-style directory structure is assumed. - ;; ----------------------------- - ;; :use-maven t - ;; :maven-compile-scopes "compile" - ;; :maven-runtime-scopes "runtime" - - - ;; Use an existing ivy.xml to determine the dependencies - ;; for the project. A Maven-style directory structure is assumed. - ;; ----------------------------- - ;; :use-ivy t - ;; :ivy-compile-conf "compile" - ;; :ivy-runtime-conf "compile" - - - ;; The home package for your project. - ;; Used by ENSIME to populate the project outline view. - ;; ------------------------------ - :project-package "se.scalablesolutions.akka" - - - ;; :sources ([dir | file]*) - ;; Include source files by directory(recursively) or by filename. - ;; ------------------------------ - :sources ("src/main/") - - - ;; :dependency-jars ([dir | file]*) - ;; Include jars by directory(recursively) or by filename. - ;; ------------------------------ - ;; :dependency-jars ("lib") - - - ;; :dependency-dirs ([dir | file]*) - ;; Include directories of .class files. - ;; ------------------------------ - ;; :dependency-dirs ("target/classes") - - - ;; :target dir - ;; Specify the target of the project build process. Should be - ;; the directory where .class files are written - ;; - ;; The target is used to populate the classpath when launching - ;; the inferior scala repl. - ;; ------------------------------ - ;; :target "target/classes" - - ) - - - diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/ProtobufProtocol.java b/akka-core/src/test/java/se/scalablesolutions/akka/actor/ProtobufProtocol.java deleted file mode 100644 index 683f008729..0000000000 --- a/akka-core/src/test/java/se/scalablesolutions/akka/actor/ProtobufProtocol.java +++ /dev/null @@ -1,1060 +0,0 @@ -// Generated by the protocol buffer compiler. DO NOT EDIT! -// source: ProtobufProtocol.proto - -package se.scalablesolutions.akka.actor; - -public final class ProtobufProtocol { - private ProtobufProtocol() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public static final class ProtobufPOJO extends - com.google.protobuf.GeneratedMessage { - // Use ProtobufPOJO.newBuilder() to construct. - private ProtobufPOJO() { - initFields(); - } - private ProtobufPOJO(boolean noInit) {} - - private static final ProtobufPOJO defaultInstance; - public static ProtobufPOJO getDefaultInstance() { - return defaultInstance; - } - - public ProtobufPOJO getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_ProtobufPOJO_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_ProtobufPOJO_fieldAccessorTable; - } - - // required uint64 id = 1; - public static final int ID_FIELD_NUMBER = 1; - private boolean hasId; - private long id_ = 0L; - public boolean hasId() { return hasId; } - public long getId() { return id_; } - - // required string name = 2; - public static final int NAME_FIELD_NUMBER = 2; - private boolean hasName; - private java.lang.String name_ = ""; - public boolean hasName() { return hasName; } - public java.lang.String getName() { return name_; } - - // required bool status = 3; - public static final int STATUS_FIELD_NUMBER = 3; - private boolean hasStatus; - private boolean status_ = false; - public boolean hasStatus() { return hasStatus; } - public boolean getStatus() { return status_; } - - private void initFields() { - } - public final boolean isInitialized() { - if (!hasId) return false; - if (!hasName) return false; - if (!hasStatus) return false; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (hasId()) { - output.writeUInt64(1, getId()); - } - if (hasName()) { - output.writeString(2, getName()); - } - if (hasStatus()) { - output.writeBool(3, getStatus()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (hasId()) { - size += com.google.protobuf.CodedOutputStream - .computeUInt64Size(1, getId()); - } - if (hasName()) { - size += com.google.protobuf.CodedOutputStream - .computeStringSize(2, getName()); - } - if (hasStatus()) { - size += com.google.protobuf.CodedOutputStream - .computeBoolSize(3, getStatus()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder { - private se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO result; - - // Construct using se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO.newBuilder() - private Builder() {} - - private static Builder create() { - Builder builder = new Builder(); - builder.result = new se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO(); - return builder; - } - - protected se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO internalGetResult() { - return result; - } - - public Builder clear() { - if (result == null) { - throw new IllegalStateException( - "Cannot call clear() after build()."); - } - result = new se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO(); - return this; - } - - public Builder clone() { - return create().mergeFrom(result); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO.getDescriptor(); - } - - public se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO getDefaultInstanceForType() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO.getDefaultInstance(); - } - - public boolean isInitialized() { - return result.isInitialized(); - } - public se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO build() { - if (result != null && !isInitialized()) { - throw newUninitializedMessageException(result); - } - return buildPartial(); - } - - private se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - if (!isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return buildPartial(); - } - - public se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO buildPartial() { - if (result == null) { - throw new IllegalStateException( - "build() has already been called on this Builder."); - } - se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO returnMe = result; - result = null; - return returnMe; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO) { - return mergeFrom((se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO other) { - if (other == se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO.getDefaultInstance()) return this; - if (other.hasId()) { - setId(other.getId()); - } - if (other.hasName()) { - setName(other.getName()); - } - if (other.hasStatus()) { - setStatus(other.getStatus()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - return this; - } - break; - } - case 8: { - setId(input.readUInt64()); - break; - } - case 18: { - setName(input.readString()); - break; - } - case 24: { - setStatus(input.readBool()); - break; - } - } - } - } - - - // required uint64 id = 1; - public boolean hasId() { - return result.hasId(); - } - public long getId() { - return result.getId(); - } - public Builder setId(long value) { - result.hasId = true; - result.id_ = value; - return this; - } - public Builder clearId() { - result.hasId = false; - result.id_ = 0L; - return this; - } - - // required string name = 2; - public boolean hasName() { - return result.hasName(); - } - public java.lang.String getName() { - return result.getName(); - } - public Builder setName(java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - result.hasName = true; - result.name_ = value; - return this; - } - public Builder clearName() { - result.hasName = false; - result.name_ = getDefaultInstance().getName(); - return this; - } - - // required bool status = 3; - public boolean hasStatus() { - return result.hasStatus(); - } - public boolean getStatus() { - return result.getStatus(); - } - public Builder setStatus(boolean value) { - result.hasStatus = true; - result.status_ = value; - return this; - } - public Builder clearStatus() { - result.hasStatus = false; - result.status_ = false; - return this; - } - - // @@protoc_insertion_point(builder_scope:se.scalablesolutions.akka.actor.ProtobufPOJO) - } - - static { - defaultInstance = new ProtobufPOJO(true); - se.scalablesolutions.akka.actor.ProtobufProtocol.internalForceInit(); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:se.scalablesolutions.akka.actor.ProtobufPOJO) - } - - public static final class Counter extends - com.google.protobuf.GeneratedMessage { - // Use Counter.newBuilder() to construct. - private Counter() { - initFields(); - } - private Counter(boolean noInit) {} - - private static final Counter defaultInstance; - public static Counter getDefaultInstance() { - return defaultInstance; - } - - public Counter getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_Counter_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_Counter_fieldAccessorTable; - } - - // required uint32 count = 1; - public static final int COUNT_FIELD_NUMBER = 1; - private boolean hasCount; - private int count_ = 0; - public boolean hasCount() { return hasCount; } - public int getCount() { return count_; } - - private void initFields() { - } - public final boolean isInitialized() { - if (!hasCount) return false; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (hasCount()) { - output.writeUInt32(1, getCount()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (hasCount()) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(1, getCount()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(se.scalablesolutions.akka.actor.ProtobufProtocol.Counter prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder { - private se.scalablesolutions.akka.actor.ProtobufProtocol.Counter result; - - // Construct using se.scalablesolutions.akka.actor.ProtobufProtocol.Counter.newBuilder() - private Builder() {} - - private static Builder create() { - Builder builder = new Builder(); - builder.result = new se.scalablesolutions.akka.actor.ProtobufProtocol.Counter(); - return builder; - } - - protected se.scalablesolutions.akka.actor.ProtobufProtocol.Counter internalGetResult() { - return result; - } - - public Builder clear() { - if (result == null) { - throw new IllegalStateException( - "Cannot call clear() after build()."); - } - result = new se.scalablesolutions.akka.actor.ProtobufProtocol.Counter(); - return this; - } - - public Builder clone() { - return create().mergeFrom(result); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.Counter.getDescriptor(); - } - - public se.scalablesolutions.akka.actor.ProtobufProtocol.Counter getDefaultInstanceForType() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.Counter.getDefaultInstance(); - } - - public boolean isInitialized() { - return result.isInitialized(); - } - public se.scalablesolutions.akka.actor.ProtobufProtocol.Counter build() { - if (result != null && !isInitialized()) { - throw newUninitializedMessageException(result); - } - return buildPartial(); - } - - private se.scalablesolutions.akka.actor.ProtobufProtocol.Counter buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - if (!isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return buildPartial(); - } - - public se.scalablesolutions.akka.actor.ProtobufProtocol.Counter buildPartial() { - if (result == null) { - throw new IllegalStateException( - "build() has already been called on this Builder."); - } - se.scalablesolutions.akka.actor.ProtobufProtocol.Counter returnMe = result; - result = null; - return returnMe; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof se.scalablesolutions.akka.actor.ProtobufProtocol.Counter) { - return mergeFrom((se.scalablesolutions.akka.actor.ProtobufProtocol.Counter)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(se.scalablesolutions.akka.actor.ProtobufProtocol.Counter other) { - if (other == se.scalablesolutions.akka.actor.ProtobufProtocol.Counter.getDefaultInstance()) return this; - if (other.hasCount()) { - setCount(other.getCount()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - return this; - } - break; - } - case 8: { - setCount(input.readUInt32()); - break; - } - } - } - } - - - // required uint32 count = 1; - public boolean hasCount() { - return result.hasCount(); - } - public int getCount() { - return result.getCount(); - } - public Builder setCount(int value) { - result.hasCount = true; - result.count_ = value; - return this; - } - public Builder clearCount() { - result.hasCount = false; - result.count_ = 0; - return this; - } - - // @@protoc_insertion_point(builder_scope:se.scalablesolutions.akka.actor.Counter) - } - - static { - defaultInstance = new Counter(true); - se.scalablesolutions.akka.actor.ProtobufProtocol.internalForceInit(); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:se.scalablesolutions.akka.actor.Counter) - } - - public static final class DualCounter extends - com.google.protobuf.GeneratedMessage { - // Use DualCounter.newBuilder() to construct. - private DualCounter() { - initFields(); - } - private DualCounter(boolean noInit) {} - - private static final DualCounter defaultInstance; - public static DualCounter getDefaultInstance() { - return defaultInstance; - } - - public DualCounter getDefaultInstanceForType() { - return defaultInstance; - } - - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_DualCounter_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_DualCounter_fieldAccessorTable; - } - - // required uint32 count1 = 1; - public static final int COUNT1_FIELD_NUMBER = 1; - private boolean hasCount1; - private int count1_ = 0; - public boolean hasCount1() { return hasCount1; } - public int getCount1() { return count1_; } - - // required uint32 count2 = 2; - public static final int COUNT2_FIELD_NUMBER = 2; - private boolean hasCount2; - private int count2_ = 0; - public boolean hasCount2() { return hasCount2; } - public int getCount2() { return count2_; } - - private void initFields() { - } - public final boolean isInitialized() { - if (!hasCount1) return false; - if (!hasCount2) return false; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (hasCount1()) { - output.writeUInt32(1, getCount1()); - } - if (hasCount2()) { - output.writeUInt32(2, getCount2()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (hasCount1()) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(1, getCount1()); - } - if (hasCount2()) { - size += com.google.protobuf.CodedOutputStream - .computeUInt32Size(2, getCount2()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return newBuilder().mergeFrom(data, extensionRegistry) - .buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseFrom(java.io.InputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - Builder builder = newBuilder(); - if (builder.mergeDelimitedFrom(input, extensionRegistry)) { - return builder.buildParsed(); - } else { - return null; - } - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return newBuilder().mergeFrom(input).buildParsed(); - } - public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return newBuilder().mergeFrom(input, extensionRegistry) - .buildParsed(); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder { - private se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter result; - - // Construct using se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter.newBuilder() - private Builder() {} - - private static Builder create() { - Builder builder = new Builder(); - builder.result = new se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter(); - return builder; - } - - protected se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter internalGetResult() { - return result; - } - - public Builder clear() { - if (result == null) { - throw new IllegalStateException( - "Cannot call clear() after build()."); - } - result = new se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter(); - return this; - } - - public Builder clone() { - return create().mergeFrom(result); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter.getDescriptor(); - } - - public se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter getDefaultInstanceForType() { - return se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter.getDefaultInstance(); - } - - public boolean isInitialized() { - return result.isInitialized(); - } - public se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter build() { - if (result != null && !isInitialized()) { - throw newUninitializedMessageException(result); - } - return buildPartial(); - } - - private se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter buildParsed() - throws com.google.protobuf.InvalidProtocolBufferException { - if (!isInitialized()) { - throw newUninitializedMessageException( - result).asInvalidProtocolBufferException(); - } - return buildPartial(); - } - - public se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter buildPartial() { - if (result == null) { - throw new IllegalStateException( - "build() has already been called on this Builder."); - } - se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter returnMe = result; - result = null; - return returnMe; - } - - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter) { - return mergeFrom((se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter other) { - if (other == se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter.getDefaultInstance()) return this; - if (other.hasCount1()) { - setCount1(other.getCount1()); - } - if (other.hasCount2()) { - setCount2(other.getCount2()); - } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder( - this.getUnknownFields()); - while (true) { - int tag = input.readTag(); - switch (tag) { - case 0: - this.setUnknownFields(unknownFields.build()); - return this; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - this.setUnknownFields(unknownFields.build()); - return this; - } - break; - } - case 8: { - setCount1(input.readUInt32()); - break; - } - case 16: { - setCount2(input.readUInt32()); - break; - } - } - } - } - - - // required uint32 count1 = 1; - public boolean hasCount1() { - return result.hasCount1(); - } - public int getCount1() { - return result.getCount1(); - } - public Builder setCount1(int value) { - result.hasCount1 = true; - result.count1_ = value; - return this; - } - public Builder clearCount1() { - result.hasCount1 = false; - result.count1_ = 0; - return this; - } - - // required uint32 count2 = 2; - public boolean hasCount2() { - return result.hasCount2(); - } - public int getCount2() { - return result.getCount2(); - } - public Builder setCount2(int value) { - result.hasCount2 = true; - result.count2_ = value; - return this; - } - public Builder clearCount2() { - result.hasCount2 = false; - result.count2_ = 0; - return this; - } - - // @@protoc_insertion_point(builder_scope:se.scalablesolutions.akka.actor.DualCounter) - } - - static { - defaultInstance = new DualCounter(true); - se.scalablesolutions.akka.actor.ProtobufProtocol.internalForceInit(); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:se.scalablesolutions.akka.actor.DualCounter) - } - - private static com.google.protobuf.Descriptors.Descriptor - internal_static_se_scalablesolutions_akka_actor_ProtobufPOJO_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_se_scalablesolutions_akka_actor_ProtobufPOJO_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_se_scalablesolutions_akka_actor_Counter_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_se_scalablesolutions_akka_actor_Counter_fieldAccessorTable; - private static com.google.protobuf.Descriptors.Descriptor - internal_static_se_scalablesolutions_akka_actor_DualCounter_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_se_scalablesolutions_akka_actor_DualCounter_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\026ProtobufProtocol.proto\022\037se.scalablesol" + - "utions.akka.actor\"8\n\014ProtobufPOJO\022\n\n\002id\030" + - "\001 \002(\004\022\014\n\004name\030\002 \002(\t\022\016\n\006status\030\003 \002(\010\"\030\n\007C" + - "ounter\022\r\n\005count\030\001 \002(\r\"-\n\013DualCounter\022\016\n\006" + - "count1\030\001 \002(\r\022\016\n\006count2\030\002 \002(\r" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - internal_static_se_scalablesolutions_akka_actor_ProtobufPOJO_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_se_scalablesolutions_akka_actor_ProtobufPOJO_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_se_scalablesolutions_akka_actor_ProtobufPOJO_descriptor, - new java.lang.String[] { "Id", "Name", "Status", }, - se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO.class, - se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO.Builder.class); - internal_static_se_scalablesolutions_akka_actor_Counter_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_se_scalablesolutions_akka_actor_Counter_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_se_scalablesolutions_akka_actor_Counter_descriptor, - new java.lang.String[] { "Count", }, - se.scalablesolutions.akka.actor.ProtobufProtocol.Counter.class, - se.scalablesolutions.akka.actor.ProtobufProtocol.Counter.Builder.class); - internal_static_se_scalablesolutions_akka_actor_DualCounter_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_se_scalablesolutions_akka_actor_DualCounter_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_se_scalablesolutions_akka_actor_DualCounter_descriptor, - new java.lang.String[] { "Count1", "Count2", }, - se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter.class, - se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter.Builder.class); - return null; - } - }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - } - - public static void internalForceInit() {} - - // @@protoc_insertion_point(outer_class_scope) -} diff --git a/akka-core/src/test/scala/Messages.scala b/akka-core/src/test/scala/Messages.scala deleted file mode 100644 index ad1fcf8885..0000000000 --- a/akka-core/src/test/scala/Messages.scala +++ /dev/null @@ -1,44 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka - -import se.scalablesolutions.akka.serialization.Serializable -import sbinary._ -import sbinary.Operations._ - -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 - -case class User(val usernamePassword: Tuple2[String, String], - val email: String, - val age: Int) - extends Serializable.SBinary[User] { - def this() = this(null, null, 0) - import sbinary.DefaultProtocol._ - implicit object UserFormat extends Format[User] { - def reads(in : Input) = User( - read[Tuple2[String, String]](in), - read[String](in), - read[Int](in)) - def writes(out: Output, value: User) = { - write[Tuple2[String, String]](out, value.usernamePassword) - write[String](out, value.email) - write[Int](out, value.age) - } - } - def fromBytes(bytes: Array[Byte]) = fromByteArray[User](bytes) - def toBytes: Array[Byte] = toByteArray(this) -} - -case object RemotePing extends TestMessage -case object RemotePong extends TestMessage -case object RemoteOneWay extends TestMessage -case object RemoteDie extends TestMessage -case object RemoteNotifySupervisorExit extends TestMessage diff --git a/akka-core/src/test/scala/actor/actor/ActorFireForgetRequestReplySpec.scala b/akka-core/src/test/scala/actor/actor/ActorFireForgetRequestReplySpec.scala deleted file mode 100644 index 9d3ce765ec..0000000000 --- a/akka-core/src/test/scala/actor/actor/ActorFireForgetRequestReplySpec.scala +++ /dev/null @@ -1,92 +0,0 @@ -package se.scalablesolutions.akka.actor - -import java.util.concurrent.{TimeUnit, CyclicBarrier, TimeoutException} -import se.scalablesolutions.akka.config.ScalaConfig._ -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import se.scalablesolutions.akka.dispatch.Dispatchers -import Actor._ - -object ActorFireForgetRequestReplySpec { - class ReplyActor extends Actor { - self.dispatcher = Dispatchers.newThreadBasedDispatcher(self) - - def receive = { - case "Send" => - self.reply("Reply") - case "SendImplicit" => - self.sender.get ! "ReplyImplicit" - } - } - - class CrashingTemporaryActor extends Actor { - self.lifeCycle = Some(LifeCycle(Temporary)) - - def receive = { - case "Die" => - state.finished.await - throw new Exception("Expected exception") - } - } - - class SenderActor(replyActor: ActorRef) extends Actor { - self.dispatcher = Dispatchers.newThreadBasedDispatcher(self) - - def receive = { - case "Init" => replyActor ! "Send" - case "Reply" => { - state.s = "Reply" - state.finished.await - } - case "InitImplicit" => replyActor ! "SendImplicit" - case "ReplyImplicit" => { - state.s = "ReplyImplicit" - state.finished.await - } - } - } - - object state { - var s = "NIL" - val finished = new CyclicBarrier(2) - } -} - -class ActorFireForgetRequestReplySpec extends JUnitSuite { - import ActorFireForgetRequestReplySpec._ - - @Test - def shouldReplyToBangMessageUsingReply = { - state.finished.reset - val replyActor = actorOf[ReplyActor].start - val senderActor = actorOf(new SenderActor(replyActor)).start - senderActor ! "Init" - try { state.finished.await(1L, TimeUnit.SECONDS) } - catch { case e: TimeoutException => fail("Never got the message") } - assert("Reply" === state.s) - } - - @Test - def shouldReplyToBangMessageUsingImplicitSender = { - state.finished.reset - val replyActor = actorOf[ReplyActor].start - val senderActor = actorOf(new SenderActor(replyActor)).start - senderActor ! "InitImplicit" - try { state.finished.await(1L, TimeUnit.SECONDS) } - catch { case e: TimeoutException => fail("Never got the message") } - assert("ReplyImplicit" === state.s) - } - - @Test - def shouldShutdownCrashedTemporaryActor = { - state.finished.reset - val actor = actorOf[CrashingTemporaryActor].start - assert(actor.isRunning) - actor ! "Die" - try { state.finished.await(1L, TimeUnit.SECONDS) } - catch { case e: TimeoutException => fail("Never got the message") } - Thread.sleep(100) - assert(actor.isShutdown) - } -} diff --git a/akka-core/src/test/scala/actor/actor/AgentSpec.scala b/akka-core/src/test/scala/actor/actor/AgentSpec.scala deleted file mode 100644 index 71911c3ad8..0000000000 --- a/akka-core/src/test/scala/actor/actor/AgentSpec.scala +++ /dev/null @@ -1,111 +0,0 @@ -package se.scalablesolutions.akka.actor - -import se.scalablesolutions.akka.actor.Actor.transactor -import org.scalatest.Suite -import org.scalatest.junit.JUnitRunner -import org.scalatest.matchers.MustMatchers - -import org.junit.runner.RunWith -import org.junit.Test - -import java.util.concurrent.{TimeUnit, CountDownLatch} - -@RunWith(classOf[JUnitRunner]) -class AgentSpec extends junit.framework.TestCase with Suite with MustMatchers { - - @Test def testSendFun = { - val agent = Agent(5) - agent send (_ + 1) - agent send (_ * 2) - val result = agent() - result must be(12) - agent.close - } - - @Test def testSendValue = { - val agent = Agent(5) - agent send 6 - val result = agent() - result must be(6) - agent.close - } - - @Test def testSendProc = { - val agent = Agent(5) - var result = 0 - val latch = new CountDownLatch(2) - agent sendProc { e => result += e; latch.countDown } - agent sendProc { e => result += e; latch.countDown } - assert(latch.await(5, TimeUnit.SECONDS)) - result must be(10) - agent.close - } - - @Test def testOneAgentsendWithinEnlosingTransactionSuccess = { - case object Go - val agent = Agent(5) - val latch = new CountDownLatch(1) - val tx = transactor { - case Go => agent send { e => latch.countDown; e + 1 } - } - tx ! Go - assert(latch.await(5, TimeUnit.SECONDS)) - val result = agent() - result must be(6) - agent.close - tx.stop - } - -/* - // Strange test - do we really need it? - @Test def testDoingAgentGetInEnlosingTransactionShouldYieldException = { - case object Go - val latch = new CountDownLatch(1) - val agent = Agent(5) - val tx = transactor { - case Go => - agent send (_ * 2) - try { agent() } - catch { - case _ => latch.countDown - } - } - tx ! Go - assert(latch.await(5, TimeUnit.SECONDS)) - agent.close - tx.stop - assert(true) - } -*/ - - @Test def testAgentForeach = { - val agent1 = Agent(3) - var result = 0 - for (first <- agent1) { - result = first + 1 - } - result must be(4) - agent1.close - } - - @Test def testAgentMap = { - val agent1 = Agent(3) - val result = for (first <- agent1) yield first + 1 - result() must be(4) - result.close - agent1.close - } - - @Test def testAgentFlatMap = { - val agent1 = Agent(3) - val agent2 = Agent(5) - val result = for { - first <- agent1 - second <- agent2 - } yield second + first - result() must be(8) - result.close - agent1.close - agent2.close - } -} diff --git a/akka-core/src/test/scala/actor/actor/Bench.scala b/akka-core/src/test/scala/actor/actor/Bench.scala deleted file mode 100644 index 8e3a44f3a0..0000000000 --- a/akka-core/src/test/scala/actor/actor/Bench.scala +++ /dev/null @@ -1,119 +0,0 @@ -/* The Computer Language Benchmarks Game - http://shootout.alioth.debian.org/ - contributed by Julien Gaugaz - inspired by the version contributed by Yura Taras and modified by Isaac Gouy -*/ -package se.scalablesolutions.akka.actor - -import se.scalablesolutions.akka.actor.Actor._ - -object Chameneos { - - sealed trait ChameneosEvent - case class Meet(from: ActorRef, colour: Colour) extends ChameneosEvent - case class Change(colour: Colour) extends ChameneosEvent - case class MeetingCount(count: Int) extends ChameneosEvent - case object Exit extends ChameneosEvent - - abstract class Colour - case object RED extends Colour - case object YELLOW extends Colour - case object BLUE extends Colour - case object FADED extends Colour - - val colours = Array[Colour](BLUE, RED, YELLOW) - - var start = 0L - var end = 0L - - class Chameneo(var mall: ActorRef, var colour: Colour, cid: Int) extends Actor { - var meetings = 0 - self.start - mall ! Meet(self, colour) - - def receive = { - case Meet(from, otherColour) => - colour = complement(otherColour) - meetings = meetings +1 - from ! Change(colour) - mall ! Meet(self, colour) - - case Change(newColour) => - colour = newColour - meetings = meetings +1 - mall ! Meet(self, colour) - - case Exit => - colour = FADED - self.sender.get ! MeetingCount(meetings) - } - - def complement(otherColour: Colour): Colour = colour match { - case RED => otherColour match { - case RED => RED - case YELLOW => BLUE - case BLUE => YELLOW - case FADED => FADED - } - case YELLOW => otherColour match { - case RED => BLUE - case YELLOW => YELLOW - case BLUE => RED - case FADED => FADED - } - case BLUE => otherColour match { - case RED => YELLOW - case YELLOW => RED - case BLUE => BLUE - case FADED => FADED - } - case FADED => FADED - } - - override def toString = cid + "(" + colour + ")" - } - - class Mall(var n: Int, numChameneos: Int) extends Actor { - var waitingChameneo: Option[ActorRef] = None - var sumMeetings = 0 - var numFaded = 0 - - override def init = { - for (i <- 0 until numChameneos) actorOf(new Chameneo(self, colours(i % 3), i)) - } - - def receive = { - case MeetingCount(i) => - numFaded += 1 - sumMeetings += i - if (numFaded == numChameneos) { - Chameneos.end = System.currentTimeMillis - self.stop - } - - case msg @ Meet(a, c) => - if (n > 0) { - waitingChameneo match { - case Some(chameneo) => - n -= 1 - chameneo ! msg - waitingChameneo = None - case None => waitingChameneo = self.sender - } - } else { - waitingChameneo.foreach(_ ! Exit) - self.sender.get ! Exit - } - } - } - - def run { -// System.setProperty("akka.config", "akka.conf") - Chameneos.start = System.currentTimeMillis - actorOf(new Mall(1000000, 4)).start - Thread.sleep(10000) - println("Elapsed: " + (end - start)) - } - - def main(args : Array[String]): Unit = run -} diff --git a/akka-core/src/test/scala/actor/actor/ForwardActorSpec.scala b/akka-core/src/test/scala/actor/actor/ForwardActorSpec.scala deleted file mode 100644 index e3ab0bded7..0000000000 --- a/akka-core/src/test/scala/actor/actor/ForwardActorSpec.scala +++ /dev/null @@ -1,81 +0,0 @@ -package se.scalablesolutions.akka.actor - -import java.util.concurrent.{TimeUnit, CountDownLatch} -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import Actor._ - -object ForwardActorSpec { - object ForwardState { - var sender: Option[ActorRef] = None - } - - class ReceiverActor extends Actor { - val latch = new CountDownLatch(1) - def receive = { - case "SendBang" => { - ForwardState.sender = self.sender - latch.countDown - } - case "SendBangBang" => self.reply("SendBangBang") - } - } - - - class ForwardActor extends Actor { - val receiverActor = actorOf[ReceiverActor] - receiverActor.start - def receive = { - case "SendBang" => receiverActor.forward("SendBang") - case "SendBangBang" => receiverActor.forward("SendBangBang") - } - } - - class BangSenderActor extends Actor { - val forwardActor = actorOf[ForwardActor] - forwardActor.start - forwardActor ! "SendBang" - def receive = { - case _ => {} - } - } - - class BangBangSenderActor extends Actor { - val latch = new CountDownLatch(1) - val forwardActor = actorOf[ForwardActor] - forwardActor.start - (forwardActor !! "SendBangBang") match { - case Some(_) => latch.countDown - case None => {} - } - def receive = { - case _ => {} - } - } -} - -class ForwardActorSpec extends JUnitSuite { - import ForwardActorSpec._ - - @Test - def shouldForwardActorReferenceWhenInvokingForwardOnBang { - val senderActor = actorOf[BangSenderActor] - val latch = senderActor.actor.asInstanceOf[BangSenderActor] - .forwardActor.actor.asInstanceOf[ForwardActor] - .receiverActor.actor.asInstanceOf[ReceiverActor] - .latch - senderActor.start - assert(latch.await(1L, TimeUnit.SECONDS)) - assert(ForwardState.sender ne null) - assert(senderActor.toString === ForwardState.sender.get.toString) - } - - @Test - def shouldForwardActorReferenceWhenInvokingForwardOnBangBang { - val senderActor = actorOf[BangBangSenderActor] - senderActor.start - val latch = senderActor.actor.asInstanceOf[BangBangSenderActor].latch - assert(latch.await(1L, TimeUnit.SECONDS)) - } -} diff --git a/akka-core/src/test/scala/actor/actor/FsmActorSpec.scala b/akka-core/src/test/scala/actor/actor/FsmActorSpec.scala deleted file mode 100644 index e4515bd3da..0000000000 --- a/akka-core/src/test/scala/actor/actor/FsmActorSpec.scala +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import org.multiverse.api.latches.StandardLatch - -import java.util.concurrent.TimeUnit - -object FSMActorSpec { - - class Lock(code: String, - timeout: Int, - unlockedLatch: StandardLatch, - lockedLatch: StandardLatch) extends Actor with FSM[CodeState] { - - def initialState = State(NextState, locked, CodeState("", code)) - - def locked: StateFunction = { - case Event(digit: Char, CodeState(soFar, code)) => { - soFar + digit match { - case incomplete if incomplete.length < code.length => - State(NextState, locked, CodeState(incomplete, code)) - case codeTry if (codeTry == code) => { - doUnlock - State(NextState, open, CodeState("", code), Some(timeout)) - } - case wrong => { - log.error("Wrong code %s", wrong) - State(NextState, locked, CodeState("", code)) - } - } - } - } - - def open: StateFunction = { - case Event(StateTimeout, stateData) => { - doLock - State(NextState, locked, stateData) - } - } - - private def doLock() { - log.info("Locked") - lockedLatch.open - } - - private def doUnlock = { - log.info("Unlocked") - unlockedLatch.open - } - } - - case class CodeState(soFar: String, code: String) -} - -class FSMActorSpec extends JUnitSuite { - import FSMActorSpec._ - - @Test - def unlockTheLock = { - val unlockedLatch = new StandardLatch - val lockedLatch = new StandardLatch - - // lock that locked after being open for 1 sec - val lock = Actor.actorOf(new Lock("33221", 1000, unlockedLatch, lockedLatch)).start - - lock ! '3' - lock ! '3' - lock ! '2' - lock ! '2' - lock ! '1' - - assert(unlockedLatch.tryAwait(1, TimeUnit.SECONDS)) - assert(lockedLatch.tryAwait(2, TimeUnit.SECONDS)) - } -} - diff --git a/akka-core/src/test/scala/actor/actor/ReceiveTimeoutSpec.scala b/akka-core/src/test/scala/actor/actor/ReceiveTimeoutSpec.scala deleted file mode 100644 index ff43467efc..0000000000 --- a/akka-core/src/test/scala/actor/actor/ReceiveTimeoutSpec.scala +++ /dev/null @@ -1,77 +0,0 @@ -package se.scalablesolutions.akka.actor - -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import java.util.concurrent.TimeUnit -import org.multiverse.api.latches.StandardLatch -import Actor._ - -class ReceiveTimeoutSpec extends JUnitSuite { - - @Test def receiveShouldGetTimeout= { - - val timeoutLatch = new StandardLatch - - val timeoutActor = actorOf(new Actor { - self.receiveTimeout = Some(500L) - - protected def receive = { - case ReceiveTimeout => timeoutLatch.open - } - }).start - - assert(timeoutLatch.tryAwait(3, TimeUnit.SECONDS)) - } - - @Test def swappedReceiveShouldAlsoGetTimout = { - val timeoutLatch = new StandardLatch - - val timeoutActor = actorOf(new Actor { - self.receiveTimeout = Some(500L) - - protected def receive = { - case ReceiveTimeout => timeoutLatch.open - } - }).start - - // after max 1 second the timeout should already been sent - assert(timeoutLatch.tryAwait(3, TimeUnit.SECONDS)) - - val swappedLatch = new StandardLatch - timeoutActor ! HotSwap(Some{ - case ReceiveTimeout => swappedLatch.open - }) - - assert(swappedLatch.tryAwait(3, TimeUnit.SECONDS)) - } - - @Test def timeoutShouldBeCancelledAfterRegularReceive = { - - val timeoutLatch = new StandardLatch - case object Tick - val timeoutActor = actorOf(new Actor { - self.receiveTimeout = Some(500L) - - protected def receive = { - case Tick => () - case ReceiveTimeout => timeoutLatch.open - } - }).start - timeoutActor ! Tick - - assert(timeoutLatch.tryAwait(2, TimeUnit.SECONDS) == false) - } - - @Test def timeoutShouldNotBeSentWhenNotSpecified = { - val timeoutLatch = new StandardLatch - val timeoutActor = actorOf(new Actor { - - protected def receive = { - case ReceiveTimeout => timeoutLatch.open - } - }).start - - assert(timeoutLatch.tryAwait(1, TimeUnit.SECONDS) == false) - } -} diff --git a/akka-core/src/test/scala/actor/actor/TransactorSpec.scala b/akka-core/src/test/scala/actor/actor/TransactorSpec.scala deleted file mode 100644 index dd23a76a88..0000000000 --- a/akka-core/src/test/scala/actor/actor/TransactorSpec.scala +++ /dev/null @@ -1,255 +0,0 @@ -package se.scalablesolutions.akka.actor - -import java.util.concurrent.{TimeUnit, CountDownLatch} -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import se.scalablesolutions.akka.stm.{Ref, TransactionalMap, TransactionalVector} -import Actor._ - -object TransactorSpec { - case class GetMapState(key: String) - case object GetVectorState - case object GetVectorSize - case object GetRefState - - case class SetMapState(key: String, value: String) - case class SetVectorState(key: String) - case class SetRefState(key: String) - case class Success(key: String, value: String) - case class Failure(key: String, value: String, failer: ActorRef) - - case class SetMapStateOneWay(key: String, value: String) - case class SetVectorStateOneWay(key: String) - case class SetRefStateOneWay(key: String) - case class SuccessOneWay(key: String, value: String) - case class FailureOneWay(key: String, value: String, failer: ActorRef) - - case object GetNotifier -} -import TransactorSpec._ - -class StatefulTransactor(expectedInvocationCount: Int) extends Transactor { - def this() = this(0) - self.timeout = 5000 - - val notifier = new CountDownLatch(expectedInvocationCount) - - private val mapState = TransactionalMap[String, String]() - private val vectorState = TransactionalVector[String]() - private val refState = Ref[String]() - - def receive = { - case GetNotifier => - self.reply(notifier) - case GetMapState(key) => - self.reply(mapState.get(key).get) - notifier.countDown - case GetVectorSize => - self.reply(vectorState.length.asInstanceOf[AnyRef]) - notifier.countDown - case GetRefState => - self.reply(refState.get) - notifier.countDown - case SetMapState(key, msg) => - mapState.put(key, msg) - self.reply(msg) - notifier.countDown - case SetVectorState(msg) => - vectorState.add(msg) - self.reply(msg) - notifier.countDown - case SetRefState(msg) => - refState.swap(msg) - self.reply(msg) - notifier.countDown - case Success(key, msg) => - mapState.put(key, msg) - vectorState.add(msg) - refState.swap(msg) - self.reply(msg) - notifier.countDown - case Failure(key, msg, failer) => - mapState.put(key, msg) - vectorState.add(msg) - refState.swap(msg) - failer !! "Failure" - self.reply(msg) - notifier.countDown - case SetMapStateOneWay(key, msg) => - mapState.put(key, msg) - notifier.countDown - case SetVectorStateOneWay(msg) => - vectorState.add(msg) - notifier.countDown - case SetRefStateOneWay(msg) => - refState.swap(msg) - notifier.countDown - case SuccessOneWay(key, msg) => - mapState.put(key, msg) - vectorState.add(msg) - refState.swap(msg) - notifier.countDown - case FailureOneWay(key, msg, failer) => - mapState.put(key, msg) - vectorState.add(msg) - refState.swap(msg) - notifier.countDown - failer ! "Failure" - } -} - -@serializable -class FailerTransactor extends Transactor { - - def receive = { - case "Failure" => - throw new RuntimeException("Expected exception; to test fault-tolerance") - } -} - -class TransactorSpec extends JUnitSuite { - - @Test - def shouldOneWayMapShouldNotRollbackStateForStatefulServerInCaseOfSuccess = { - val stateful = actorOf(new StatefulTransactor(2)) - stateful.start - stateful ! SetMapStateOneWay("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "init") // set init state - stateful ! SuccessOneWay("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state") // transactionrequired - val notifier = (stateful !! GetNotifier).as[CountDownLatch] - assert(notifier.get.await(1, TimeUnit.SECONDS)) - assert("new state" === (stateful !! GetMapState("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess")).get) - } - - @Test - def shouldMapShouldNotRollbackStateForStatefulServerInCaseOfSuccess = { - val stateful = actorOf[StatefulTransactor] - stateful.start - stateful !! SetMapState("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "init") // set init state - stateful !! Success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state") // transactionrequired - assert("new state" === (stateful !! GetMapState("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess")).get) - } - - @Test - def shouldOneWayMapShouldRollbackStateForStatefulServerInCaseOfFailure = { - val stateful = actorOf(new StatefulTransactor(2)) - stateful.start - val failer = actorOf[FailerTransactor] - failer.start - stateful ! SetMapStateOneWay("testShouldRollbackStateForStatefulServerInCaseOfFailure", "init") // set init state - stateful ! FailureOneWay("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) // call failing transactionrequired method - val notifier = (stateful !! GetNotifier).as[CountDownLatch] - assert(notifier.get.await(5, TimeUnit.SECONDS)) - assert("init" === (stateful !! GetMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure")).get) // check that state is == init state - } - - @Test - def shouldMapShouldRollbackStateForStatefulServerInCaseOfFailure = { - val stateful = actorOf[StatefulTransactor] - stateful.start - stateful !! SetMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure", "init") // set init state - val failer = actorOf[FailerTransactor] - failer.start - try { - stateful !! Failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) // call failing transactionrequired method - fail("should have thrown an exception") - } catch {case e: RuntimeException => {}} - assert("init" === (stateful !! GetMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure")).get) // check that state is == init state - } - - @Test - def shouldOneWayVectorShouldNotRollbackStateForStatefulServerInCaseOfSuccess = { - val stateful = actorOf(new StatefulTransactor(2)) - stateful.start - stateful ! SetVectorStateOneWay("init") // set init state - stateful ! SuccessOneWay("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state") // transactionrequired - val notifier = (stateful !! GetNotifier).as[CountDownLatch] - assert(notifier.get.await(1, TimeUnit.SECONDS)) - assert(2 === (stateful !! GetVectorSize).get) - } - - @Test - def shouldVectorShouldNotRollbackStateForStatefulServerInCaseOfSuccess = { - val stateful = actorOf[StatefulTransactor] - stateful.start - stateful !! SetVectorState("init") // set init state - stateful !! Success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state") // transactionrequired - assert(2 === (stateful !! GetVectorSize).get) - } - - @Test - def shouldOneWayVectorShouldRollbackStateForStatefulServerInCaseOfFailure = { - val stateful = actorOf(new StatefulTransactor(2)) - stateful.start - stateful ! SetVectorStateOneWay("init") // set init state - Thread.sleep(1000) - val failer = actorOf[FailerTransactor] - failer.start - stateful ! FailureOneWay("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) // call failing transactionrequired method - val notifier = (stateful !! GetNotifier).as[CountDownLatch] - assert(notifier.get.await(1, TimeUnit.SECONDS)) - assert(1 === (stateful !! GetVectorSize).get) - } - - @Test - def shouldVectorShouldRollbackStateForStatefulServerInCaseOfFailure = { - val stateful = actorOf[StatefulTransactor] - stateful.start - stateful !! SetVectorState("init") // set init state - val failer = actorOf[FailerTransactor] - failer.start - try { - stateful !! Failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) // call failing transactionrequired method - fail("should have thrown an exception") - } catch {case e: RuntimeException => {}} - assert(1 === (stateful !! GetVectorSize).get) - } - - @Test - def shouldOneWayRefShouldNotRollbackStateForStatefulServerInCaseOfSuccess = { - val stateful = actorOf(new StatefulTransactor(2)) - stateful.start - stateful ! SetRefStateOneWay("init") // set init state - stateful ! SuccessOneWay("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state") // transactionrequired - val notifier = (stateful !! GetNotifier).as[CountDownLatch] - assert(notifier.get.await(1, TimeUnit.SECONDS)) - assert("new state" === (stateful !! GetRefState).get) - } - - @Test - def shouldRefShouldNotRollbackStateForStatefulServerInCaseOfSuccess = { - val stateful = actorOf[StatefulTransactor] - stateful.start - stateful !! SetRefState("init") // set init state - stateful !! Success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state") // transactionrequired - assert("new state" === (stateful !! GetRefState).get) - } - - @Test - def shouldOneWayRefShouldRollbackStateForStatefulServerInCaseOfFailure = { - val stateful = actorOf(new StatefulTransactor(2)) - stateful.start - stateful ! SetRefStateOneWay("init") // set init state - Thread.sleep(1000) - val failer = actorOf[FailerTransactor] - failer.start - stateful ! FailureOneWay("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) // call failing transactionrequired method - val notifier = (stateful !! GetNotifier).as[CountDownLatch] - assert(notifier.get.await(1, TimeUnit.SECONDS)) - assert("init" === (stateful !! (GetRefState, 1000000)).get) // check that state is == init state - } - - @Test - def shouldRefShouldRollbackStateForStatefulServerInCaseOfFailure = { - val stateful = actorOf[StatefulTransactor] - stateful.start - stateful !! SetRefState("init") // set init state - val failer = actorOf[FailerTransactor] - failer.start - try { - stateful !! Failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) // call failing transactionrequired method - fail("should have thrown an exception") - } catch {case e: RuntimeException => {}} - assert("init" === (stateful !! GetRefState).get) // check that state is == init state - } -} diff --git a/akka-core/src/test/scala/actor/supervisor/RestartStrategySpec.scala b/akka-core/src/test/scala/actor/supervisor/RestartStrategySpec.scala deleted file mode 100644 index 5023c756e1..0000000000 --- a/akka-core/src/test/scala/actor/supervisor/RestartStrategySpec.scala +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import Actor._ -import se.scalablesolutions.akka.config.OneForOneStrategy -import java.util.concurrent.{TimeUnit, CountDownLatch} -import se.scalablesolutions.akka.config.ScalaConfig.{Permanent, LifeCycle} -import org.multiverse.api.latches.StandardLatch - -class RestartStrategySpec extends JUnitSuite { - - object Ping - object Crash - - @Test - def slaveShouldStayDeadAfterMaxRestarts = { - - val boss = actorOf(new Actor{ - self.trapExit = List(classOf[Throwable]) - self.faultHandler = Some(OneForOneStrategy(1, 1000)) - protected def receive = { case _ => () } - }).start - - val restartLatch = new StandardLatch - val secondRestartLatch = new StandardLatch - val countDownLatch = new CountDownLatch(2) - - - val slave = actorOf(new Actor{ - - protected def receive = { - case Ping => countDownLatch.countDown - case Crash => throw new Exception("Crashing...") - } - override def postRestart(reason: Throwable) = { - restartLatch.open - } - - override def shutdown = { - if (restartLatch.isOpen) { - secondRestartLatch.open - } - } - }) - boss.startLink(slave) - - slave ! Ping - slave ! Crash - slave ! Ping - - // test restart and post restart ping - assert(restartLatch.tryAwait(1, TimeUnit.SECONDS)) - assert(countDownLatch.await(1, TimeUnit.SECONDS)) - - // now crash again... should not restart - slave ! Crash - - assert(secondRestartLatch.tryAwait(1, TimeUnit.SECONDS)) - val exceptionLatch = new StandardLatch - try { - slave ! Ping // this should fail - } catch { - case e => exceptionLatch.open // expected here - } - assert(exceptionLatch.tryAwait(1, TimeUnit.SECONDS)) - } -} - diff --git a/akka-core/src/test/scala/actor/supervisor/SupervisorHierarchySpec.scala b/akka-core/src/test/scala/actor/supervisor/SupervisorHierarchySpec.scala deleted file mode 100644 index ffc9dbd860..0000000000 --- a/akka-core/src/test/scala/actor/supervisor/SupervisorHierarchySpec.scala +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import Actor._ -import se.scalablesolutions.akka.config.OneForOneStrategy - -import java.util.concurrent.{TimeUnit, CountDownLatch} - -object SupervisorHierarchySpec { - class FireWorkerException(msg: String) extends Exception(msg) - - class CountDownActor(countDown: CountDownLatch) extends Actor { - protected def receive = { case _ => () } - override def postRestart(reason: Throwable) = countDown.countDown - } - - class CrasherActor extends Actor { - protected def receive = { case _ => () } - } -} - -class SupervisorHierarchySpec extends JUnitSuite { - import SupervisorHierarchySpec._ - - @Test - def killWorkerShouldRestartMangerAndOtherWorkers = { - val countDown = new CountDownLatch(4) - - val workerOne = actorOf(new CountDownActor(countDown)) - val workerTwo = actorOf(new CountDownActor(countDown)) - val workerThree = actorOf(new CountDownActor(countDown)) - - val boss = actorOf(new Actor{ - self.trapExit = List(classOf[Throwable]) - self.faultHandler = Some(OneForOneStrategy(5, 1000)) - - protected def receive = { case _ => () } - }).start - - val manager = actorOf(new CountDownActor(countDown)) - boss.startLink(manager) - - manager.startLink(workerOne) - manager.startLink(workerTwo) - manager.startLink(workerThree) - - workerOne ! Exit(workerOne, new FireWorkerException("Fire the worker!")) - - // manager + all workers should be restarted by only killing a worker - // manager doesn't trap exits, so boss will restart manager - - assert(countDown.await(2, TimeUnit.SECONDS)) - } - - @Test - def supervisorShouldReceiveNotificationMessageWhenMaximumNumberOfRestartsWithinTimeRangeIsReached = { - val countDown = new CountDownLatch(2) - val crasher = actorOf(new CountDownActor(countDown)) - val boss = actorOf(new Actor{ - self.trapExit = List(classOf[Throwable]) - self.faultHandler = Some(OneForOneStrategy(1, 5000)) - protected def receive = { - case MaximumNumberOfRestartsWithinTimeRangeReached(_, _, _, _) => - countDown.countDown - } - }).start - boss.startLink(crasher) - - crasher ! Exit(crasher, new FireWorkerException("Fire the worker!")) - crasher ! Exit(crasher, new FireWorkerException("Fire the worker!")) - - assert(countDown.await(2, TimeUnit.SECONDS)) - } -} - diff --git a/akka-core/src/test/scala/actor/supervisor/SupervisorSpec.scala b/akka-core/src/test/scala/actor/supervisor/SupervisorSpec.scala deleted file mode 100644 index 01eb9cb006..0000000000 --- a/akka-core/src/test/scala/actor/supervisor/SupervisorSpec.scala +++ /dev/null @@ -1,605 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import se.scalablesolutions.akka.config.ScalaConfig._ -import se.scalablesolutions.akka.config.OneForOneStrategy -import se.scalablesolutions.akka.{OneWay, Die, Ping} -import Actor._ - -import org.scalatest.junit.JUnitSuite -import org.junit.Test -import java.util.concurrent.{TimeUnit, LinkedBlockingQueue} - -object SupervisorSpec { - var messageLog = new LinkedBlockingQueue[String] - var oneWayLog = new LinkedBlockingQueue[String] - - def clearMessageLogs { - messageLog.clear - oneWayLog.clear - } - - class PingPong1Actor extends Actor { - import self._ - //dispatcher = Dispatchers.newThreadBasedDispatcher(self) - def receive = { - case Ping => - messageLog.put("ping") - reply("pong") - - case OneWay => - oneWayLog.put("oneway") - - case Die => - println("******************** GOT DIE 1") - throw new RuntimeException("Expected exception; to test fault-tolerance") - } - override def postRestart(reason: Throwable) { - println("******************** restart 1") - messageLog.put(reason.getMessage) - } - } - - class PingPong2Actor extends Actor { - import self._ - def receive = { - case Ping => - messageLog.put("ping") - reply("pong") - case Die => - println("******************** GOT DIE 2") - throw new RuntimeException("Expected exception; to test fault-tolerance") - } - override def postRestart(reason: Throwable) { - println("******************** restart 2") - messageLog.put(reason.getMessage) - } - } - - class PingPong3Actor extends Actor { - import self._ - def receive = { - case Ping => - messageLog.put("ping") - reply("pong") - case Die => - println("******************** GOT DIE 3") - throw new RuntimeException("Expected exception; to test fault-tolerance") - } - - override def postRestart(reason: Throwable) { - println("******************** restart 3") - messageLog.put(reason.getMessage) - } - } - - class TemporaryActor extends Actor { - import self._ - lifeCycle = Some(LifeCycle(Temporary)) - def receive = { - case Ping => - messageLog.put("ping") - reply("pong") - case Die => - println("******************** GOT DIE 3") - throw new RuntimeException("Expected exception; to test fault-tolerance") - } - - override def postRestart(reason: Throwable) { - println("******************** restart temporary") - messageLog.put(reason.getMessage) - } - } - - class Master extends Actor { - self.trapExit = classOf[Exception] :: Nil - self.faultHandler = Some(OneForOneStrategy(5, 1000)) - val temp = self.spawnLink[TemporaryActor] - override def receive = { - case Die => temp !! (Die, 5000) - } - } -} - -/** - * @author Jonas Bonér - */ -class SupervisorSpec extends JUnitSuite { - import SupervisorSpec._ - - var pingpong1: ActorRef = _ - var pingpong2: ActorRef = _ - var pingpong3: ActorRef = _ - var temporaryActor: ActorRef = _ - -/* - @Test def shouldStartServer = { - clearMessageLogs - val sup = getSingleActorAllForOneSupervisor - sup.start - - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - } -*/ - @Test def shoulNotRestartProgrammaticallyLinkedTemporaryActor = { - clearMessageLogs - val master = actorOf[Master].start - - intercept[RuntimeException] { - master !! (Die, 5000) - } - - Thread.sleep(1000) - assert(messageLog.size === 0) - } - - @Test def shoulNotRestartTemporaryActor = { - clearMessageLogs - val sup = getTemporaryActorAllForOneSupervisor - - intercept[RuntimeException] { - temporaryActor !! (Die, 5000) - } - - Thread.sleep(1000) - assert(messageLog.size === 0) - } - - @Test def shouldStartServerForNestedSupervisorHierarchy = { - clearMessageLogs - val sup = getNestedSupervisorsAllForOneConf - sup.start - - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - } - - @Test def shouldKillSingleActorOneForOne = { - clearMessageLogs - val sup = getSingleActorOneForOneSupervisor - - intercept[RuntimeException] { - pingpong1 !! (Die, 5000) - } - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldCallKillCallSingleActorOneForOne = { - clearMessageLogs - val sup = getSingleActorOneForOneSupervisor - - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - intercept[RuntimeException] { - pingpong1 !! (Die, 5000) - } - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldKillSingleActorAllForOne = { - clearMessageLogs - val sup = getSingleActorAllForOneSupervisor - - intercept[RuntimeException] { - pingpong1 !! (Die, 5000) - } - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldCallKillCallSingleActorAllForOne = { - clearMessageLogs - val sup = getSingleActorAllForOneSupervisor - - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - intercept[RuntimeException] { - pingpong1 !! (Die, 5000) - } - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldKillMultipleActorsOneForOne1 = { - clearMessageLogs - val sup = getMultipleActorsOneForOneConf - - intercept[RuntimeException] { - pingpong1 !! (Die, 5000) - } - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldKillMultipleActorsOneForOne2 = { - clearMessageLogs - val sup = getMultipleActorsOneForOneConf - - intercept[RuntimeException] { - pingpong3 !! (Die, 5000) - } - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldKillCallMultipleActorsOneForOne = { - clearMessageLogs - val sup = getMultipleActorsOneForOneConf - - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong2 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong3 !! (Ping, 5000)).getOrElse("nil") - } - - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - intercept[RuntimeException] { - pingpong2 !! (Die, 5000) - } - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong2 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong3 !! (Ping, 5000)).getOrElse("nil") - } - - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldKillMultipleActorsAllForOne = { - clearMessageLogs - val sup = getMultipleActorsAllForOneConf - - intercept[RuntimeException] { - pingpong2 !! (Die, 5000) - } - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldCallKillCallMultipleActorsAllForOne = { - clearMessageLogs - val sup = getMultipleActorsAllForOneConf - - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong2 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong3 !! (Ping, 5000)).getOrElse("nil") - } - - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - intercept[RuntimeException] { - pingpong2 !! (Die, 5000) - } - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong2 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong3 !! (Ping, 5000)).getOrElse("nil") - } - - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldOneWayKillSingleActorOneForOne = { - clearMessageLogs - val sup = getSingleActorOneForOneSupervisor - - pingpong1 ! Die - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldOneWayCallKillCallSingleActorOneForOne = { - clearMessageLogs - val sup = getSingleActorOneForOneSupervisor - - pingpong1 ! OneWay - - expect("oneway") { - oneWayLog.poll(5, TimeUnit.SECONDS) - } - pingpong1 ! Die - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - pingpong1 ! OneWay - - expect("oneway") { - oneWayLog.poll(5, TimeUnit.SECONDS) - } - } - - @Test def shouldRestartKilledActorsForNestedSupervisorHierarchy = { - clearMessageLogs - val sup = getNestedSupervisorsAllForOneConf - - - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong2 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong3 !! (Ping, 5000)).getOrElse("nil") - } - - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - intercept[RuntimeException] { - pingpong2 !! (Die, 5000) - } - - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5 , TimeUnit.SECONDS) - } - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("Expected exception; to test fault-tolerance") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("pong") { - (pingpong1 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong2 !! (Ping, 5000)).getOrElse("nil") - } - - expect("pong") { - (pingpong3 !! (Ping, 5000)).getOrElse("nil") - } - - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - expect("ping") { - messageLog.poll(5, TimeUnit.SECONDS) - } - } - - // ============================================= - // Create some supervisors with different configurations - - def getTemporaryActorAllForOneSupervisor: Supervisor = { - temporaryActor = actorOf[TemporaryActor].start - - Supervisor( - SupervisorConfig( - RestartStrategy(AllForOne, 3, 5000, List(classOf[Exception])), - Supervise( - temporaryActor, - LifeCycle(Temporary)) - :: Nil)) - } - - def getSingleActorAllForOneSupervisor: Supervisor = { - pingpong1 = actorOf[PingPong1Actor].start - - Supervisor( - SupervisorConfig( - RestartStrategy(AllForOne, 3, 5000, List(classOf[Exception])), - Supervise( - pingpong1, - LifeCycle(Permanent)) - :: Nil)) - } - - def getSingleActorOneForOneSupervisor: Supervisor = { - pingpong1 = actorOf[PingPong1Actor].start - - Supervisor( - SupervisorConfig( - RestartStrategy(OneForOne, 3, 5000, List(classOf[Exception])), - Supervise( - pingpong1, - LifeCycle(Permanent)) - :: Nil)) - } - - def getMultipleActorsAllForOneConf: Supervisor = { - pingpong1 = actorOf[PingPong1Actor].start - pingpong2 = actorOf[PingPong2Actor].start - pingpong3 = actorOf[PingPong3Actor].start - - Supervisor( - SupervisorConfig( - RestartStrategy(AllForOne, 3, 5000, List(classOf[Exception])), - Supervise( - pingpong1, - LifeCycle(Permanent)) - :: - Supervise( - pingpong2, - LifeCycle(Permanent)) - :: - Supervise( - pingpong3, - LifeCycle(Permanent)) - :: Nil)) - } - - def getMultipleActorsOneForOneConf: Supervisor = { - pingpong1 = actorOf[PingPong1Actor].start - pingpong2 = actorOf[PingPong2Actor].start - pingpong3 = actorOf[PingPong3Actor].start - - Supervisor( - SupervisorConfig( - RestartStrategy(OneForOne, 3, 5000, List(classOf[Exception])), - Supervise( - pingpong1, - LifeCycle(Permanent)) - :: - Supervise( - pingpong2, - LifeCycle(Permanent)) - :: - Supervise( - pingpong3, - LifeCycle(Permanent)) - :: Nil)) - } - - def getNestedSupervisorsAllForOneConf: Supervisor = { - pingpong1 = actorOf[PingPong1Actor].start - pingpong2 = actorOf[PingPong2Actor].start - pingpong3 = actorOf[PingPong3Actor].start - - Supervisor( - SupervisorConfig( - RestartStrategy(AllForOne, 3, 5000, List(classOf[Exception])), - Supervise( - pingpong1, - LifeCycle(Permanent)) - :: - SupervisorConfig( - RestartStrategy(AllForOne, 3, 5000, Nil), - Supervise( - pingpong2, - LifeCycle(Permanent)) - :: - Supervise( - pingpong3, - LifeCycle(Permanent)) - :: Nil) - :: Nil)) - } -} diff --git a/akka-core/src/test/scala/dispatch/DispatchersSpec.scala b/akka-core/src/test/scala/dispatch/DispatchersSpec.scala deleted file mode 100644 index bb548b9251..0000000000 --- a/akka-core/src/test/scala/dispatch/DispatchersSpec.scala +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ -package se.scalablesolutions.akka.actor.dispatch - -import java.util.concurrent.{CountDownLatch, TimeUnit} -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import net.lag.configgy.Config -import scala.reflect.{Manifest} -import se.scalablesolutions.akka.dispatch._ - -object DispatchersSpec { - import Dispatchers._ - // - val tipe = "type" - val keepalivems = "keep-alive-ms" - val corepoolsizefactor = "core-pool-size-factor" - val maxpoolsizefactor = "max-pool-size-factor" - val executorbounds = "executor-bounds" - val allowcoretimeout = "allow-core-timeout" - val rejectionpolicy = "rejection-policy" // abort, caller-runs, discard-oldest, discard - val throughput = "throughput" // Throughput for ExecutorBasedEventDrivenDispatcher - val aggregate = "aggregate" // Aggregate on/off for HawtDispatchers - - def instance(dispatcher: MessageDispatcher): (MessageDispatcher) => Boolean = _ == dispatcher - def ofType[T <: MessageDispatcher : Manifest]: (MessageDispatcher) => Boolean = _.getClass == manifest[T].erasure - - def typesAndValidators: Map[String,(MessageDispatcher) => Boolean] = Map( - "ReactorBasedSingleThreadEventDriven" -> ofType[ReactorBasedSingleThreadEventDrivenDispatcher], - "ExecutorBasedEventDrivenWorkStealing" -> ofType[ExecutorBasedEventDrivenWorkStealingDispatcher], - "ExecutorBasedEventDriven" -> ofType[ExecutorBasedEventDrivenDispatcher], - "ReactorBasedThreadPoolEventDriven" -> ofType[ReactorBasedThreadPoolEventDrivenDispatcher], - "Hawt" -> ofType[HawtDispatcher], - "GlobalReactorBasedSingleThreadEventDriven" -> instance(globalReactorBasedSingleThreadEventDrivenDispatcher), - "GlobalReactorBasedThreadPoolEventDriven" -> instance(globalReactorBasedThreadPoolEventDrivenDispatcher), - "GlobalExecutorBasedEventDriven" -> instance(globalExecutorBasedEventDrivenDispatcher), - "GlobalHawt" -> instance(globalHawtDispatcher) - ) - - def validTypes = typesAndValidators.keys.toList - - lazy val allDispatchers: Map[String,Option[MessageDispatcher]] = { - validTypes.map(t => (t,from(Config.fromMap(Map(tipe -> t))))).toMap - } -} - -class DispatchersSpec extends JUnitSuite { - - import Dispatchers._ - import DispatchersSpec._ - - @Test def shouldYieldNoneIfTypeIsMissing { - assert(from(Config.fromMap(Map())) === None) - } - - @Test(expected = classOf[IllegalArgumentException]) - def shouldThrowIllegalArgumentExceptionIfTypeDoesntExist { - from(Config.fromMap(Map(tipe -> "typedoesntexist"))) - } - - @Test def shouldGetTheCorrectTypesOfDispatchers { - //It can create/obtain all defined types - assert(allDispatchers.values.forall(_.isDefined)) - //All created/obtained dispatchers are of the expeced type/instance - assert(typesAndValidators.forall( tuple => tuple._2(allDispatchers(tuple._1).get) )) - } - - @Test def defaultingToDefaultWhileLoadingTheDefaultShouldWork { - assert(from(Config.fromMap(Map())).getOrElse(defaultGlobalDispatcher) == defaultGlobalDispatcher) - } - -} diff --git a/akka-core/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala b/akka-core/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala deleted file mode 100644 index 9cdf43682e..0000000000 --- a/akka-core/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala +++ /dev/null @@ -1,68 +0,0 @@ -package se.scalablesolutions.akka.actor.dispatch - -import java.util.concurrent.{CountDownLatch, TimeUnit} -import org.scalatest.junit.JUnitSuite -import org.junit.Test -import se.scalablesolutions.akka.dispatch.Dispatchers -import se.scalablesolutions.akka.actor.Actor -import Actor._ - -object ExecutorBasedEventDrivenDispatcherActorSpec { - class TestActor extends Actor { - self.dispatcher = Dispatchers.newExecutorBasedEventDrivenDispatcher(self.uuid) - def receive = { - case "Hello" => - self.reply("World") - case "Failure" => - throw new RuntimeException("Expected exception; to test fault-tolerance") - } - } - - object OneWayTestActor { - val oneWay = new CountDownLatch(1) - } - class OneWayTestActor extends Actor { - self.dispatcher = Dispatchers.newExecutorBasedEventDrivenDispatcher(self.uuid) - def receive = { - case "OneWay" => OneWayTestActor.oneWay.countDown - } - } -} -class ExecutorBasedEventDrivenDispatcherActorSpec extends JUnitSuite { - import ExecutorBasedEventDrivenDispatcherActorSpec._ - - private val unit = TimeUnit.MILLISECONDS - - @Test def shouldSendOneWay = { - val actor = actorOf[OneWayTestActor].start - val result = actor ! "OneWay" - assert(OneWayTestActor.oneWay.await(1, TimeUnit.SECONDS)) - actor.stop - } - - @Test def shouldSendReplySync = { - val actor = actorOf[TestActor].start - val result = (actor !! ("Hello", 10000)).as[String] - assert("World" === result.get) - actor.stop - } - - @Test def shouldSendReplyAsync = { - val actor = actorOf[TestActor].start - val result = actor !! "Hello" - assert("World" === result.get.asInstanceOf[String]) - actor.stop - } - - @Test def shouldSendReceiveException = { - val actor = actorOf[TestActor].start - try { - actor !! "Failure" - fail("Should have thrown an exception") - } catch { - case e => - assert("Expected exception; to test fault-tolerance" === e.getMessage()) - } - actor.stop - } -} diff --git a/akka-core/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala b/akka-core/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala deleted file mode 100644 index fc8f1aa37f..0000000000 --- a/akka-core/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala +++ /dev/null @@ -1,61 +0,0 @@ -package se.scalablesolutions.akka.actor.dispatch - -import org.scalatest.junit.JUnitSuite -import org.junit.Test -import org.scalatest.matchers.MustMatchers -import java.util.concurrent.CountDownLatch -import se.scalablesolutions.akka.actor.Actor -import Actor._ - -/** - * Tests the behaviour of the executor based event driven dispatcher when multiple actors are being dispatched on it. - * - * @author Jan Van Besien - */ -class ExecutorBasedEventDrivenDispatcherActorsSpec extends JUnitSuite with MustMatchers { - class SlowActor(finishedCounter: CountDownLatch) extends Actor { - self.id = "SlowActor" - - def receive = { - case x: Int => { - Thread.sleep(50) // slow actor - finishedCounter.countDown - } - } - } - - class FastActor(finishedCounter: CountDownLatch) extends Actor { - self.id = "FastActor" - - def receive = { - case x: Int => { - finishedCounter.countDown - } - } - } - - @Test def slowActorShouldntBlockFastActor { - val sFinished = new CountDownLatch(50) - val fFinished = new CountDownLatch(10) - val s = actorOf(new SlowActor(sFinished)).start - val f = actorOf(new FastActor(fFinished)).start - - // send a lot of stuff to s - for (i <- 1 to 50) { - s ! i - } - - // send some messages to f - for (i <- 1 to 10) { - f ! i - } - - // now assert that f is finished while s is still busy - fFinished.await - assert(sFinished.getCount > 0) - sFinished.await - assert(sFinished.getCount === 0) - f.stop - s.stop - } -} diff --git a/akka-core/src/test/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala b/akka-core/src/test/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala deleted file mode 100644 index cde57a0544..0000000000 --- a/akka-core/src/test/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala +++ /dev/null @@ -1,107 +0,0 @@ -package se.scalablesolutions.akka.actor.dispatch - -import org.scalatest.matchers.MustMatchers -import org.scalatest.junit.JUnitSuite - -import org.junit.Test - -import se.scalablesolutions.akka.dispatch.Dispatchers - -import java.util.concurrent.{TimeUnit, CountDownLatch} -import se.scalablesolutions.akka.actor.{IllegalActorStateException, Actor} -import Actor._ - -object ExecutorBasedEventDrivenWorkStealingDispatcherSpec { - val delayableActorDispatcher = Dispatchers.newExecutorBasedEventDrivenWorkStealingDispatcher("pooled-dispatcher") - val sharedActorDispatcher = Dispatchers.newExecutorBasedEventDrivenWorkStealingDispatcher("pooled-dispatcher") - val parentActorDispatcher = Dispatchers.newExecutorBasedEventDrivenWorkStealingDispatcher("pooled-dispatcher") - - class DelayableActor(name: String, delay: Int, finishedCounter: CountDownLatch) extends Actor { - self.dispatcher = delayableActorDispatcher - var invocationCount = 0 - self.id = name - - def receive = { - case x: Int => { - Thread.sleep(delay) - invocationCount += 1 - finishedCounter.countDown - } - } - } - - class FirstActor extends Actor { - self.dispatcher = sharedActorDispatcher - def receive = {case _ => {}} - } - - class SecondActor extends Actor { - self.dispatcher = sharedActorDispatcher - def receive = {case _ => {}} - } - - class ParentActor extends Actor { - self.dispatcher = parentActorDispatcher - def receive = {case _ => {}} - } - - class ChildActor extends ParentActor { - } -} - -/** - * @author Jan Van Besien - */ -class ExecutorBasedEventDrivenWorkStealingDispatcherSpec extends JUnitSuite with MustMatchers { - import ExecutorBasedEventDrivenWorkStealingDispatcherSpec._ - - @Test def fastActorShouldStealWorkFromSlowActor { - val finishedCounter = new CountDownLatch(110) - - val slow = actorOf(new DelayableActor("slow", 50, finishedCounter)).start - val fast = actorOf(new DelayableActor("fast", 10, finishedCounter)).start - - for (i <- 1 to 100) { - // send most work to slow actor - if (i % 20 == 0) - fast ! i - else - slow ! i - } - - // now send some messages to actors to keep the dispatcher dispatching messages - for (i <- 1 to 10) { - Thread.sleep(150) - if (i % 2 == 0) - fast ! i - else - slow ! i - } - - finishedCounter.await(5, TimeUnit.SECONDS) - fast.actor.asInstanceOf[DelayableActor].invocationCount must be > - (slow.actor.asInstanceOf[DelayableActor].invocationCount) - slow.stop - fast.stop - } - - @Test def canNotUseActorsOfDifferentTypesInSameDispatcher(): Unit = { - val first = actorOf[FirstActor] - val second = actorOf[SecondActor] - - first.start - intercept[IllegalActorStateException] { - second.start - } - } - - @Test def canNotUseActorsOfDifferentSubTypesInSameDispatcher(): Unit = { - val parent = actorOf[ParentActor] - val child = actorOf[ChildActor] - - parent.start - intercept[IllegalActorStateException] { - child.start - } - } -} diff --git a/akka-core/src/test/scala/dispatch/FutureSpec.scala b/akka-core/src/test/scala/dispatch/FutureSpec.scala deleted file mode 100644 index f740763fdf..0000000000 --- a/akka-core/src/test/scala/dispatch/FutureSpec.scala +++ /dev/null @@ -1,106 +0,0 @@ -package se.scalablesolutions.akka.actor - -import org.scalatest.junit.JUnitSuite -import org.junit.Test -import se.scalablesolutions.akka.dispatch.Futures -import Actor._ - -object FutureSpec { - class TestActor extends Actor { - def receive = { - case "Hello" => - self.reply("World") - case "NoReply" => {} - case "Failure" => - throw new RuntimeException("Expected exception; to test fault-tolerance") - } - } -} - -class FutureSpec extends JUnitSuite { - import FutureSpec._ - - @Test def shouldActorReplyResultThroughExplicitFuture { - val actor = actorOf[TestActor] - actor.start - val future = actor !!! "Hello" - future.await - assert(future.result.isDefined) - assert("World" === future.result.get) - actor.stop - } - - @Test def shouldActorReplyExceptionThroughExplicitFuture { - val actor = actorOf[TestActor] - actor.start - val future = actor !!! "Failure" - future.await - assert(future.exception.isDefined) - assert("Expected exception; to test fault-tolerance" === future.exception.get.getMessage) - actor.stop - } - - /* - // FIXME: implement Futures.awaitEither, and uncomment these two tests - @Test def shouldFutureAwaitEitherLeft = { - val actor1 = actorOf[TestActor].start - val actor2 = actorOf[TestActor].start - val future1 = actor1 !!! "Hello" - val future2 = actor2 !!! "NoReply" - val result = Futures.awaitEither(future1, future2) - assert(result.isDefined) - assert("World" === result.get) - actor1.stop - actor2.stop - } - - @Test def shouldFutureAwaitEitherRight = { - val actor1 = actorOf[TestActor].start - val actor2 = actorOf[TestActor].start - val future1 = actor1 !!! "NoReply" - val future2 = actor2 !!! "Hello" - val result = Futures.awaitEither(future1, future2) - assert(result.isDefined) - assert("World" === result.get) - actor1.stop - actor2.stop - } - */ - @Test def shouldFutureAwaitOneLeft = { - val actor1 = actorOf[TestActor].start - val actor2 = actorOf[TestActor].start - val future1 = actor1 !!! "NoReply" - val future2 = actor2 !!! "Hello" - val result = Futures.awaitOne(List(future1, future2)) - assert(result.result.isDefined) - assert("World" === result.result.get) - actor1.stop - actor2.stop - } - - @Test def shouldFutureAwaitOneRight = { - val actor1 = actorOf[TestActor].start - val actor2 = actorOf[TestActor].start - val future1 = actor1 !!! "Hello" - val future2 = actor2 !!! "NoReply" - val result = Futures.awaitOne(List(future1, future2)) - assert(result.result.isDefined) - assert("World" === result.result.get) - actor1.stop - actor2.stop - } - - @Test def shouldFutureAwaitAll = { - val actor1 = actorOf[TestActor].start - val actor2 = actorOf[TestActor].start - val future1 = actor1 !!! "Hello" - val future2 = actor2 !!! "Hello" - Futures.awaitAll(List(future1, future2)) - assert(future1.result.isDefined) - assert("World" === future1.result.get) - assert(future2.result.isDefined) - assert("World" === future2.result.get) - actor1.stop - actor2.stop - } -} diff --git a/akka-core/src/test/scala/dispatch/HawtDispatcherActorSpec.scala b/akka-core/src/test/scala/dispatch/HawtDispatcherActorSpec.scala deleted file mode 100644 index 2c45f3388c..0000000000 --- a/akka-core/src/test/scala/dispatch/HawtDispatcherActorSpec.scala +++ /dev/null @@ -1,71 +0,0 @@ -package se.scalablesolutions.akka.actor.dispatch - -import java.util.concurrent.{CountDownLatch, TimeUnit} - -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import se.scalablesolutions.akka.dispatch.{HawtDispatcher, Dispatchers} -import se.scalablesolutions.akka.actor.Actor -import Actor._ - -object HawtDispatcherActorSpec { - class TestActor extends Actor { - self.dispatcher = new HawtDispatcher() - def receive = { - case "Hello" => - self.reply("World") - case "Failure" => - throw new RuntimeException("Expected exception; to test fault-tolerance") - } - } - - object OneWayTestActor { - val oneWay = new CountDownLatch(1) - } - class OneWayTestActor extends Actor { - self.dispatcher = new HawtDispatcher() - def receive = { - case "OneWay" => OneWayTestActor.oneWay.countDown - } - } -} - -class HawtDispatcherActorSpec extends JUnitSuite { - import HawtDispatcherActorSpec._ - - private val unit = TimeUnit.MILLISECONDS - - @Test def shouldSendOneWay = { - val actor = actorOf[OneWayTestActor].start - val result = actor ! "OneWay" - assert(OneWayTestActor.oneWay.await(1, TimeUnit.SECONDS)) - actor.stop - } - - @Test def shouldSendReplySync = { - val actor = actorOf[TestActor].start - val result = (actor !! ("Hello", 10000)).as[String] - assert("World" === result.get) - actor.stop - } - - @Test def shouldSendReplyAsync = { - val actor = actorOf[TestActor].start - val result = actor !! "Hello" - assert("World" === result.get.asInstanceOf[String]) - actor.stop - } - - @Test def shouldSendReceiveException = { - val actor = actorOf[TestActor].start - try { - actor !! "Failure" - fail("Should have thrown an exception") - } catch { - case e => - assert("Expected exception; to test fault-tolerance" === e.getMessage()) - } - actor.stop - } -} diff --git a/akka-core/src/test/scala/dispatch/HawtDispatcherEchoServer.scala b/akka-core/src/test/scala/dispatch/HawtDispatcherEchoServer.scala deleted file mode 100644 index 97f2e0df9d..0000000000 --- a/akka-core/src/test/scala/dispatch/HawtDispatcherEchoServer.scala +++ /dev/null @@ -1,207 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor.dispatch - -import scala.collection.mutable.ListBuffer - -import java.util.concurrent.TimeUnit -import java.net.InetSocketAddress -import java.io.IOException -import java.nio.ByteBuffer -import java.nio.channels.{SocketChannel, SelectionKey, ServerSocketChannel} - -import se.scalablesolutions.akka.actor._ -import se.scalablesolutions.akka.actor.Actor._ -import se.scalablesolutions.akka.dispatch.HawtDispatcher - -import org.fusesource.hawtdispatch.DispatchSource -import org.fusesource.hawtdispatch.ScalaDispatch._ - -/** - * This is an example of how to crate an Akka actor based TCP echo server using - * the HawtDispatch dispatcher and NIO event sources. - */ -object HawtDispatcherEchoServer { - - private val hawt = new HawtDispatcher - var port=4444; - var useReactorPattern=true - - def main(args:Array[String]):Unit = run - - def run() = { - val server = actorOf(new Server(port)) - server.start - Scheduler.schedule(server, DisplayStats, 1, 5, TimeUnit.SECONDS) - - println("Press enter to shutdown."); - System.in.read - server ! Shutdown - } - - case object Shutdown - case object DisplayStats - case class SessionClosed(session:ActorRef) - - class Server(val port: Int) extends Actor { - - self.dispatcher = hawt - - var channel:ServerSocketChannel = _ - var accept_source:DispatchSource = _ - var sessions = ListBuffer[ActorRef]() - - override def init = { - channel = ServerSocketChannel.open(); - channel.socket().bind(new InetSocketAddress(port)); - channel.configureBlocking(false); - - // Setup the accept source, it will callback to the handler methods - // via the actor's mailbox so you don't need to worry about - // synchronizing with the local variables - accept_source = createSource(channel, SelectionKey.OP_ACCEPT, HawtDispatcher.queue(self)); - accept_source.setEventHandler(^{ accept }); - accept_source.setDisposer(^{ - channel.close(); - println("Closed port: "+port); - }); - - accept_source.resume - - println("Listening on port: "+port); - } - - - private def accept() = { - var socket = channel.accept(); - while( socket!=null ) { - try { - socket.configureBlocking(false); - val session = actorOf(new Session(self, socket)) - session.start() - sessions += session - } catch { - case e: Exception => - socket.close - } - socket = channel.accept(); - } - } - - def receive = { - case SessionClosed(session) => - sessions = sessions.filterNot( _ == session ) - session.stop - case DisplayStats => - sessions.foreach { session=> - session ! DisplayStats - } - case Shutdown => - sessions.foreach { session=> - session.stop - } - sessions.clear - accept_source.release - self.stop - } - } - - class Session(val server:ActorRef, val channel: SocketChannel) extends Actor { - - self.dispatcher = hawt - - val buffer = ByteBuffer.allocate(1024); - val remote_address = channel.socket.getRemoteSocketAddress.toString - - var read_source:DispatchSource = _ - var write_source:DispatchSource = _ - - var readCounter = 0L - var writeCounter = 0L - var closed = false - - override def init = { - - if(useReactorPattern) { - // Then we will be using the reactor pattern for handling IO: - // Pin this actor to a single thread. The read/write event sources will poll - // a Selector on the pinned thread. Since the IO events are generated on the same - // thread as where the Actor is pinned to, it can avoid a substantial amount - // thread synchronization. Plus your GC will perform better since all the IO - // processing is done on a single thread. - HawtDispatcher.pin(self) - } else { - // Then we will be using sing the proactor pattern for handling IO: - // Then the actor will not be pinned to a specific thread. The read/write - // event sources will poll a Selector and then asynchronously dispatch the - // event's to the actor via the thread pool. - } - - // Setup the sources, they will callback to the handler methods - // via the actor's mailbox so you don't need to worry about - // synchronizing with the local variables - read_source = createSource(channel, SelectionKey.OP_READ, HawtDispatcher.queue(self)); - read_source.setEventHandler(^{ read }) - read_source.setCancelHandler(^{ close }) - - write_source = createSource(channel, SelectionKey.OP_READ, HawtDispatcher.queue(self)); - write_source.setEventHandler(^{ write }) - write_source.setCancelHandler(^{ close }) - - read_source.resume - println("Accepted connection from: "+remote_address); - } - - override def shutdown = { - closed = true - read_source.release - write_source.release - channel.close - } - - private def catchio(func: =>Unit):Unit = { - try { - func - } catch { - case e:IOException => close - } - } - - def read():Unit = catchio { - channel.read(buffer) match { - case -1 => - close // peer disconnected. - case 0 => - case count:Int => - readCounter += count - buffer.flip; - read_source.suspend - write_source.resume - write() - } - } - - def write() = catchio { - writeCounter += channel.write(buffer) - if (buffer.remaining == 0) { - buffer.clear - write_source.suspend - read_source.resume - } - } - - def close() = { - if( !closed ) { - closed = true - server ! SessionClosed(self) - } - } - - def receive = { - case DisplayStats => - println("connection to %s reads: %,d bytes, writes: %,d".format(remote_address, readCounter, writeCounter)) - } - } -} diff --git a/akka-core/src/test/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcherActorSpec.scala b/akka-core/src/test/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcherActorSpec.scala deleted file mode 100644 index de9b912bf5..0000000000 --- a/akka-core/src/test/scala/dispatch/ReactorBasedSingleThreadEventDrivenDispatcherActorSpec.scala +++ /dev/null @@ -1,71 +0,0 @@ -package se.scalablesolutions.akka.actor.dispatch - -import java.util.concurrent.{CountDownLatch, TimeUnit} -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import se.scalablesolutions.akka.dispatch.Dispatchers -import se.scalablesolutions.akka.actor.Actor -import Actor._ - -object ReactorBasedSingleThreadEventDrivenDispatcherActorSpec { - class TestActor extends Actor { - self.dispatcher = Dispatchers.newReactorBasedSingleThreadEventDrivenDispatcher(self.uuid) - - def receive = { - case "Hello" => - self.reply("World") - case "Failure" => - throw new RuntimeException("Expected exception; to test fault-tolerance") - } - } - - object OneWayTestActor { - val oneWay = new CountDownLatch(1) - } - class OneWayTestActor extends Actor { - self.dispatcher = Dispatchers.newExecutorBasedEventDrivenDispatcher(self.uuid) - def receive = { - case "OneWay" => OneWayTestActor.oneWay.countDown - } - } -} - -class ReactorBasedSingleThreadEventDrivenDispatcherActorSpec extends JUnitSuite { - import ReactorBasedSingleThreadEventDrivenDispatcherActorSpec._ - - private val unit = TimeUnit.MILLISECONDS - - @Test def shouldSendOneWay = { - val actor = actorOf[OneWayTestActor].start - val result = actor ! "OneWay" - assert(OneWayTestActor.oneWay.await(1, TimeUnit.SECONDS)) - actor.stop - } - - @Test def shouldSendReplySync = { - val actor = actorOf[TestActor].start - val result = (actor !! ("Hello", 10000)).as[String].get - assert("World" === result) - actor.stop - } - - @Test def shouldSendReplyAsync = { - val actor = actorOf[TestActor].start - val result = actor !! "Hello" - assert("World" === result.get.asInstanceOf[String]) - actor.stop - } - - @Test def shouldSendReceiveException = { - val actor = actorOf[TestActor].start - try { - actor !! "Failure" - fail("Should have thrown an exception") - } catch { - case e => - assert("Expected exception; to test fault-tolerance" === e.getMessage()) - } - actor.stop - } -} diff --git a/akka-core/src/test/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcherActorSpec.scala b/akka-core/src/test/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcherActorSpec.scala deleted file mode 100644 index 4001df8f56..0000000000 --- a/akka-core/src/test/scala/dispatch/ReactorBasedThreadPoolEventDrivenDispatcherActorSpec.scala +++ /dev/null @@ -1,66 +0,0 @@ -package se.scalablesolutions.akka.actor.dispatch - -import java.util.concurrent.{CountDownLatch, TimeUnit} -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import se.scalablesolutions.akka.dispatch.Dispatchers -import se.scalablesolutions.akka.actor.Actor -import Actor._ - -object ReactorBasedThreadPoolEventDrivenDispatcherActorSpec { - class TestActor extends Actor { - self.dispatcher = Dispatchers.newReactorBasedThreadPoolEventDrivenDispatcher(self.uuid) - def receive = { - case "Hello" => - self.reply("World") - case "Failure" => - throw new RuntimeException("Expected exception; to test fault-tolerance") - } - } -} - -class ReactorBasedThreadPoolEventDrivenDispatcherActorSpec extends JUnitSuite { - import ReactorBasedThreadPoolEventDrivenDispatcherActorSpec._ - - private val unit = TimeUnit.MILLISECONDS - - @Test def shouldSendOneWay { - val oneWay = new CountDownLatch(1) - val actor = actorOf(new Actor { - self.dispatcher = Dispatchers.newReactorBasedThreadPoolEventDrivenDispatcher(self.uuid) - def receive = { - case "OneWay" => oneWay.countDown - } - }).start - val result = actor ! "OneWay" - assert(oneWay.await(1, TimeUnit.SECONDS)) - actor.stop - } - - @Test def shouldSendReplySync = { - val actor = actorOf[TestActor].start - val result = (actor !! ("Hello", 10000)).as[String].get - assert("World" === result) - actor.stop - } - - @Test def shouldSendReplyAsync = { - val actor = actorOf[TestActor].start - val result = actor !! "Hello" - assert("World" === result.get.asInstanceOf[String]) - actor.stop - } - - @Test def shouldSendReceiveException = { - val actor = actorOf[TestActor].start - try { - actor !! "Failure" - fail("Should have thrown an exception") - } catch { - case e => - assert("Expected exception; to test fault-tolerance" === e.getMessage()) - } - actor.stop - } -} diff --git a/akka-core/src/test/scala/dispatch/ThreadBasedActorSpec.scala b/akka-core/src/test/scala/dispatch/ThreadBasedActorSpec.scala deleted file mode 100644 index d69ee984d8..0000000000 --- a/akka-core/src/test/scala/dispatch/ThreadBasedActorSpec.scala +++ /dev/null @@ -1,67 +0,0 @@ -package se.scalablesolutions.akka.actor.dispatch - -import java.util.concurrent.{CountDownLatch, TimeUnit} -import org.scalatest.junit.JUnitSuite -import org.junit.Test - -import se.scalablesolutions.akka.dispatch.Dispatchers -import se.scalablesolutions.akka.actor.Actor -import Actor._ - -object ThreadBasedActorSpec { - class TestActor extends Actor { - self.dispatcher = Dispatchers.newThreadBasedDispatcher(self) - - def receive = { - case "Hello" => - self.reply("World") - case "Failure" => - throw new RuntimeException("Expected exception; to test fault-tolerance") - } - } -} - -class ThreadBasedActorSpec extends JUnitSuite { - import ThreadBasedActorSpec._ - - private val unit = TimeUnit.MILLISECONDS - - @Test def shouldSendOneWay { - var oneWay = new CountDownLatch(1) - val actor = actorOf(new Actor { - self.dispatcher = Dispatchers.newThreadBasedDispatcher(self) - def receive = { - case "OneWay" => oneWay.countDown - } - }).start - val result = actor ! "OneWay" - assert(oneWay.await(1, TimeUnit.SECONDS)) - actor.stop - } - - @Test def shouldSendReplySync = { - val actor = actorOf[TestActor].start - val result = (actor !! ("Hello", 10000)).as[String] - assert("World" === result.get) - actor.stop - } - - @Test def shouldSendReplyAsync = { - val actor = actorOf[TestActor].start - val result = actor !! "Hello" - assert("World" === result.get.asInstanceOf[String]) - actor.stop - } - - @Test def shouldSendReceiveException = { - val actor = actorOf[TestActor].start - try { - actor !! "Failure" - fail("Should have thrown an exception") - } catch { - case e => - assert("Expected exception; to test fault-tolerance" === e.getMessage()) - } - actor.stop - } -} diff --git a/akka-core/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala b/akka-core/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala deleted file mode 100644 index 44cd9aade3..0000000000 --- a/akka-core/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala +++ /dev/null @@ -1,91 +0,0 @@ -package se.scalablesolutions.akka.dispatch - -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit -import java.util.concurrent.atomic.AtomicBoolean -import java.util.concurrent.locks.Lock -import java.util.concurrent.locks.ReentrantLock - -import org.scalatest.junit.JUnitSuite -import org.junit.{Test, Before} - -import se.scalablesolutions.akka.actor.Actor -import Actor._ - -// FIXME use this test when we have removed the MessageInvoker classes -/* -class ThreadBasedDispatcherSpec extends JUnitSuite { - private var threadingIssueDetected: AtomicBoolean = null - val key1 = actorOf(new Actor { def receive = { case _ => {}} }) - val key2 = actorOf(new Actor { def receive = { case _ => {}} }) - val key3 = actorOf(new Actor { def receive = { case _ => {}} }) - - class TestMessageHandle(handleLatch: CountDownLatch) extends MessageInvoker { - val guardLock: Lock = new ReentrantLock - - def invoke(message: MessageInvocation) { - try { - if (threadingIssueDetected.get) return - if (guardLock.tryLock) { - handleLatch.countDown - } else { - threadingIssueDetected.set(true) - } - } catch { - case e: Exception => threadingIssueDetected.set(true) - } finally { - guardLock.unlock - } - } - } - - @Before - def setUp = { - threadingIssueDetected = new AtomicBoolean(false) - } - - @Test - def shouldMessagesDispatchedToTheSameHandlerAreExecutedSequentially = { - internalTestMessagesDispatchedToTheSameHandlerAreExecutedSequentially - } - - @Test - def shouldMessagesDispatchedToHandlersAreExecutedInFIFOOrder = { - internalTestMessagesDispatchedToHandlersAreExecutedInFIFOOrder - } - - private def internalTestMessagesDispatchedToTheSameHandlerAreExecutedSequentially(): Unit = { - val guardLock = new ReentrantLock - val handleLatch = new CountDownLatch(100) - val dispatcher = new ThreadBasedDispatcher("name", new TestMessageHandle(handleLatch)) - dispatcher.start - for (i <- 0 until 100) { - dispatcher.dispatch(new MessageInvocation(key1, new Object, None, None)) - } - assert(handleLatch.await(5, TimeUnit.SECONDS)) - assert(!threadingIssueDetected.get) - } - - private def internalTestMessagesDispatchedToHandlersAreExecutedInFIFOOrder(): Unit = { - val handleLatch = new CountDownLatch(100) - val dispatcher = new ThreadBasedDispatcher("name", new MessageInvoker { - var currentValue = -1; - def invoke(message: MessageInvocation) { - if (threadingIssueDetected.get) return - val messageValue = message.message.asInstanceOf[Int] - if (messageValue.intValue == currentValue + 1) { - currentValue = messageValue.intValue - handleLatch.countDown - } else threadingIssueDetected.set(true) - } - }) - dispatcher.start - for (i <- 0 until 100) { - dispatcher.dispatch(new MessageInvocation(key1, i, None, None)) - } - assert(handleLatch.await(5, TimeUnit.SECONDS)) - assert(!threadingIssueDetected.get) - dispatcher.shutdown - } -} -*/ diff --git a/akka-core/src/test/scala/misc/ActorRegistrySpec.scala b/akka-core/src/test/scala/misc/ActorRegistrySpec.scala deleted file mode 100644 index 8c9e0778ca..0000000000 --- a/akka-core/src/test/scala/misc/ActorRegistrySpec.scala +++ /dev/null @@ -1,255 +0,0 @@ -package se.scalablesolutions.akka.actor - -import org.scalatest.junit.JUnitSuite -import org.junit.Test -import Actor._ -import java.util.concurrent.{CyclicBarrier, TimeUnit, CountDownLatch} - -object ActorRegistrySpec { - var record = "" - class TestActor extends Actor { - self.id = "MyID" - def receive = { - case "ping" => - record = "pong" + record - self.reply("got ping") - } - } - - class TestActor2 extends Actor { - self.id = "MyID2" - def receive = { - case "ping" => - record = "pong" + record - self.reply("got ping") - case "ping2" => - record = "pong" + record - self.reply("got ping") - } - } - -} - -class ActorRegistrySpec extends JUnitSuite { - import ActorRegistrySpec._ - - @Test def shouldGetActorByIdFromActorRegistry { - ActorRegistry.shutdownAll - val actor = actorOf[TestActor] - actor.start - val actors = ActorRegistry.actorsFor("MyID") - assert(actors.size === 1) - assert(actors.head.actor.isInstanceOf[TestActor]) - assert(actors.head.id === "MyID") - actor.stop - } - - @Test def shouldGetActorByUUIDFromActorRegistry { - ActorRegistry.shutdownAll - val actor = actorOf[TestActor] - val uuid = actor.uuid - actor.start - val actorOrNone = ActorRegistry.actorFor(uuid) - assert(actorOrNone.isDefined) - assert(actorOrNone.get.uuid === uuid) - actor.stop - } - - @Test def shouldGetActorByClassFromActorRegistry { - ActorRegistry.shutdownAll - val actor = actorOf[TestActor] - actor.start - val actors = ActorRegistry.actorsFor(classOf[TestActor]) - assert(actors.size === 1) - assert(actors.head.actor.isInstanceOf[TestActor]) - assert(actors.head.id === "MyID") - actor.stop - } - - @Test def shouldGetActorByManifestFromActorRegistry { - ActorRegistry.shutdownAll - val actor = actorOf[TestActor] - actor.start - val actors = ActorRegistry.actorsFor[TestActor] - assert(actors.size === 1) - assert(actors.head.actor.isInstanceOf[TestActor]) - assert(actors.head.id === "MyID") - actor.stop - } - - @Test def shouldFindThingsFromActorRegistry { - ActorRegistry.shutdownAll - val actor = actorOf[TestActor] - actor.start - val found = ActorRegistry.find({ case a: ActorRef if a.actor.isInstanceOf[TestActor] => a }) - assert(found.isDefined) - assert(found.get.actor.isInstanceOf[TestActor]) - assert(found.get.id === "MyID") - actor.stop - } - - @Test def shouldGetActorsByIdFromActorRegistry { - ActorRegistry.shutdownAll - val actor1 = actorOf[TestActor] - actor1.start - val actor2 = actorOf[TestActor] - actor2.start - val actors = ActorRegistry.actorsFor("MyID") - assert(actors.size === 2) - assert(actors.head.actor.isInstanceOf[TestActor]) - assert(actors.head.id === "MyID") - assert(actors.last.actor.isInstanceOf[TestActor]) - assert(actors.last.id === "MyID") - actor1.stop - actor2.stop - } - - @Test def shouldGetActorsByClassFromActorRegistry { - ActorRegistry.shutdownAll - val actor1 = actorOf[TestActor] - actor1.start - val actor2 = actorOf[TestActor] - actor2.start - val actors = ActorRegistry.actorsFor(classOf[TestActor]) - assert(actors.size === 2) - assert(actors.head.actor.isInstanceOf[TestActor]) - assert(actors.head.id === "MyID") - assert(actors.last.actor.isInstanceOf[TestActor]) - assert(actors.last.id === "MyID") - actor1.stop - actor2.stop - } - - @Test def shouldGetActorsByManifestFromActorRegistry { - ActorRegistry.shutdownAll - val actor1 = actorOf[TestActor] - actor1.start - val actor2 = actorOf[TestActor] - actor2.start - val actors = ActorRegistry.actorsFor[TestActor] - assert(actors.size === 2) - assert(actors.head.actor.isInstanceOf[TestActor]) - assert(actors.head.id === "MyID") - assert(actors.last.actor.isInstanceOf[TestActor]) - assert(actors.last.id === "MyID") - actor1.stop - actor2.stop - } - - @Test def shouldGetActorsByMessageFromActorRegistry { - - ActorRegistry.shutdownAll - val actor1 = actorOf[TestActor] - actor1.start - val actor2 = actorOf[TestActor2] - actor2.start - - val actorsForAcotrTestActor = ActorRegistry.actorsFor[TestActor] - assert(actorsForAcotrTestActor.size === 1) - - val actorsForAcotrTestActor2 = ActorRegistry.actorsFor[TestActor2] - assert(actorsForAcotrTestActor2.size === 1) - - val actorsForAcotr = ActorRegistry.actorsFor[Actor] - assert(actorsForAcotr.size === 2) - - - val actorsForMessagePing2 = ActorRegistry.actorsFor[Actor]("ping2") - assert(actorsForMessagePing2.size === 1) - - val actorsForMessagePing = ActorRegistry.actorsFor[Actor]("ping") - assert(actorsForMessagePing.size === 2) - - actor1.stop - actor2.stop - } - - @Test def shouldGetAllActorsFromActorRegistry { - ActorRegistry.shutdownAll - val actor1 = actorOf[TestActor] - actor1.start - val actor2 = actorOf[TestActor] - actor2.start - val actors = ActorRegistry.actors - assert(actors.size === 2) - assert(actors.head.actor.isInstanceOf[TestActor]) - assert(actors.head.id === "MyID") - assert(actors.last.actor.isInstanceOf[TestActor]) - assert(actors.last.id === "MyID") - actor1.stop - actor2.stop - } - - @Test def shouldGetResponseByAllActorsInActorRegistryWhenInvokingForeach { - ActorRegistry.shutdownAll - val actor1 = actorOf[TestActor] - actor1.start - val actor2 = actorOf[TestActor] - actor2.start - record = "" - ActorRegistry.foreach(actor => actor !! "ping") - assert(record === "pongpong") - actor1.stop - actor2.stop - } - - @Test def shouldShutdownAllActorsInActorRegistry { - ActorRegistry.shutdownAll - val actor1 = actorOf[TestActor] - actor1.start - val actor2 = actorOf[TestActor] - actor2.start - ActorRegistry.shutdownAll - assert(ActorRegistry.actors.size === 0) - } - - @Test def shouldRemoveUnregisterActorInActorRegistry { - ActorRegistry.shutdownAll - val actor1 = actorOf[TestActor] - actor1.start - val actor2 = actorOf[TestActor] - actor2.start - assert(ActorRegistry.actors.size === 2) - ActorRegistry.unregister(actor1) - assert(ActorRegistry.actors.size === 1) - ActorRegistry.unregister(actor2) - assert(ActorRegistry.actors.size === 0) - } - - @Test def shouldBeAbleToRegisterActorsConcurrently { - ActorRegistry.shutdownAll - - val latch = new CountDownLatch(3) - val barrier = new CyclicBarrier(3) - - def mkTestActor(i:Int) = actorOf( new Actor { - self.id = i.toString - def receive = { case _ => } - }) - - def mkTestActors = for(i <- 1 to 10;j <- 1 to 1000) yield mkTestActor(i) - - def mkThread(actors: Iterable[ActorRef]) = new Thread { - start - override def run { - barrier.await - actors foreach { _.start } - latch.countDown - } - } - - val testActors1 = mkTestActors - val testActors2 = mkTestActors - val testActors3 = mkTestActors - - mkThread(testActors1) - mkThread(testActors2) - mkThread(testActors3) - - assert(latch.await(30,TimeUnit.SECONDS) === true) - - for(i <- 1 to 10) { - assert(ActorRegistry.actorsFor(i.toString).length === 3000) - } - } -} diff --git a/akka-core/src/test/scala/misc/SchedulerSpec.scala b/akka-core/src/test/scala/misc/SchedulerSpec.scala deleted file mode 100644 index 16dd21f327..0000000000 --- a/akka-core/src/test/scala/misc/SchedulerSpec.scala +++ /dev/null @@ -1,127 +0,0 @@ -package se.scalablesolutions.akka.actor - -import org.scalatest.junit.JUnitSuite -import Actor._ -import java.util.concurrent.{CountDownLatch, TimeUnit} -import se.scalablesolutions.akka.config.ScalaConfig._ -import org.multiverse.api.latches.StandardLatch -import org.junit.Test - -class SchedulerSpec extends JUnitSuite { - - def withCleanEndState(action: => Unit) { - action - Scheduler.restart - ActorRegistry.shutdownAll - } - - - @Test def schedulerShouldScheduleMoreThanOnce = withCleanEndState { - - case object Tick - val countDownLatch = new CountDownLatch(3) - val tickActor = actor { - case Tick => countDownLatch.countDown - } - // run every 50 millisec - Scheduler.schedule(tickActor, Tick, 0, 50, TimeUnit.MILLISECONDS) - - // after max 1 second it should be executed at least the 3 times already - assert(countDownLatch.await(1, TimeUnit.SECONDS)) - - val countDownLatch2 = new CountDownLatch(3) - - Scheduler.schedule( () => countDownLatch2.countDown, 0, 50, TimeUnit.MILLISECONDS) - - // after max 1 second it should be executed at least the 3 times already - assert(countDownLatch2.await(1, TimeUnit.SECONDS)) - } - - @Test def schedulerShouldScheduleOnce = withCleanEndState { - case object Tick - val countDownLatch = new CountDownLatch(3) - val tickActor = actor { - case Tick => countDownLatch.countDown - } - // run every 50 millisec - Scheduler.scheduleOnce(tickActor, Tick, 50, TimeUnit.MILLISECONDS) - Scheduler.scheduleOnce( () => countDownLatch.countDown, 50, TimeUnit.MILLISECONDS) - - // after 1 second the wait should fail - assert(countDownLatch.await(1, TimeUnit.SECONDS) == false) - // should still be 1 left - assert(countDownLatch.getCount == 1) - } - - /** - * ticket #372 - */ - @Test def schedulerShouldntCreateActors = withCleanEndState { - object Ping - val ticks = new CountDownLatch(1000) - val actor = actorOf(new Actor { - def receive = { case Ping => ticks.countDown } - }).start - val numActors = ActorRegistry.actors.length - (1 to 1000).foreach( _ => Scheduler.scheduleOnce(actor,Ping,1,TimeUnit.MILLISECONDS) ) - assert(ticks.await(10,TimeUnit.SECONDS)) - assert(ActorRegistry.actors.length === numActors) - } - - /** - * ticket #372 - */ - @Test def schedulerShouldBeCancellable = withCleanEndState { - object Ping - val ticks = new CountDownLatch(1) - - val actor = actorOf(new Actor { - def receive = { case Ping => ticks.countDown } - }).start - - (1 to 10).foreach { i => - val future = Scheduler.scheduleOnce(actor,Ping,1,TimeUnit.SECONDS) - future.cancel(true) - } - assert(ticks.await(3,TimeUnit.SECONDS) == false) //No counting down should've been made - } - - /** - * ticket #307 - */ - @Test def actorRestartShouldPickUpScheduleAgain = withCleanEndState { - - object Ping - object Crash - - val restartLatch = new StandardLatch - val pingLatch = new CountDownLatch(6) - - val actor = actorOf(new Actor { - self.lifeCycle = Some(LifeCycle(Permanent)) - - def receive = { - case Ping => pingLatch.countDown - case Crash => throw new Exception("CRASH") - } - - override def postRestart(reason: Throwable) = restartLatch.open - }) - Supervisor( - SupervisorConfig( - RestartStrategy(AllForOne, 3, 1000, - List(classOf[Exception])), - Supervise( - actor, - LifeCycle(Permanent)) - :: Nil)).start - - Scheduler.schedule(actor, Ping, 500, 500, TimeUnit.MILLISECONDS) - // appx 2 pings before crash - Scheduler.scheduleOnce(actor, Crash, 1000, TimeUnit.MILLISECONDS) - - assert(restartLatch.tryAwait(2, TimeUnit.SECONDS)) - // should be enough time for the ping countdown to recover and reach 6 pings - assert(pingLatch.await(4, TimeUnit.SECONDS)) - } -} diff --git a/akka-core/src/test/scala/routing/RoutingSpec.scala b/akka-core/src/test/scala/routing/RoutingSpec.scala deleted file mode 100644 index b51fa11a0e..0000000000 --- a/akka-core/src/test/scala/routing/RoutingSpec.scala +++ /dev/null @@ -1,179 +0,0 @@ -package se.scalablesolutions.akka.actor.routing - -import se.scalablesolutions.akka.actor.Actor -import se.scalablesolutions.akka.actor.Actor._ -import se.scalablesolutions.akka.util.Logging - -import org.scalatest.Suite -import org.junit.runner.RunWith -import org.scalatest.junit.JUnitRunner -import org.scalatest.matchers.MustMatchers -import org.junit.Test - -import java.util.concurrent.atomic.AtomicInteger -import java.util.concurrent.{CountDownLatch, TimeUnit} -import se.scalablesolutions.akka.routing._ - -@RunWith(classOf[JUnitRunner]) -class RoutingSpec extends junit.framework.TestCase with Suite with MustMatchers with Logging { - import Routing._ - - @Test def testDispatcher = { - val (testMsg1,testMsg2,testMsg3,testMsg4) = ("test1","test2","test3","test4") - val targetOk = new AtomicInteger(0) - val t1 = actorOf( new Actor() { - def receive = { - case `testMsg1` => self.reply(3) - case `testMsg2` => self.reply(7) - } - } ).start - - val t2 = actorOf( new Actor() { - def receive = { - case `testMsg3` => self.reply(11) - } - }).start - - val d = dispatcherActor { - case `testMsg1`|`testMsg2` => t1 - case `testMsg3` => t2 - }.start - - val result = for { - a <- (d !! (testMsg1, 5000)).as[Int] - b <- (d !! (testMsg2, 5000)).as[Int] - c <- (d !! (testMsg3, 5000)).as[Int] - } yield a + b + c - - result.isDefined must be (true) - result.get must be(21) - - for(a <- List(t1,t2,d)) a.stop - } - - @Test def testLogger = { - val msgs = new java.util.concurrent.ConcurrentSkipListSet[Any] - val latch = new CountDownLatch(2) - val t1 = actor { - case _ => - } - val l = loggerActor(t1,(x) => { msgs.add(x); latch.countDown }).start - val foo : Any = "foo" - val bar : Any = "bar" - l ! foo - l ! bar - val done = latch.await(5,TimeUnit.SECONDS) - done must be (true) - msgs must ( have size (2) and contain (foo) and contain (bar) ) - t1.stop - l.stop - } - - @Test def testSmallestMailboxFirstDispatcher = { - val t1ProcessedCount = new AtomicInteger(0) - val latch = new CountDownLatch(500) - val t1 = actor { - case x => - Thread.sleep(50) // slow actor - t1ProcessedCount.incrementAndGet - latch.countDown - } - - val t2ProcessedCount = new AtomicInteger(0) - val t2 = actor { - case x => t2ProcessedCount.incrementAndGet - latch.countDown - } - val d = loadBalancerActor(new SmallestMailboxFirstIterator(t1 :: t2 :: Nil)) - for (i <- 1 to 500) d ! i - val done = latch.await(10,TimeUnit.SECONDS) - done must be (true) - t1ProcessedCount.get must be < (t2ProcessedCount.get) // because t1 is much slower and thus has a bigger mailbox all the time - for(a <- List(t1,t2,d)) a.stop - } - - @Test def testListener = { - val latch = new CountDownLatch(2) - val foreachListener = new CountDownLatch(2) - val num = new AtomicInteger(0) - val i = actorOf(new Actor with Listeners { - def receive = listenerManagement orElse { - case "foo" => gossip("bar") - } - }) - i.start - - def newListener = actor { - case "bar" => - num.incrementAndGet - latch.countDown - case "foo" => foreachListener.countDown - } - - val a1 = newListener - val a2 = newListener - val a3 = newListener - - i ! Listen(a1) - i ! Listen(a2) - i ! Listen(a3) - i ! Deafen(a3) - i ! WithListeners(_ ! "foo") - i ! "foo" - - val done = latch.await(5,TimeUnit.SECONDS) - done must be (true) - num.get must be (2) - val withListeners = foreachListener.await(5,TimeUnit.SECONDS) - withListeners must be (true) - for(a <- List(i,a1,a2,a3)) a.stop - } - - @Test def testIsDefinedAt = { - import se.scalablesolutions.akka.actor.ActorRef - - val (testMsg1,testMsg2,testMsg3,testMsg4) = ("test1","test2","test3","test4") - - val t1 = actorOf( new Actor() { - def receive = { - case `testMsg1` => self.reply(3) - case `testMsg2` => self.reply(7) - } - } ).start - - val t2 = actorOf( new Actor() { - def receive = { - case `testMsg1` => self.reply(3) - case `testMsg2` => self.reply(7) - } - } ).start - - val t3 = actorOf( new Actor() { - def receive = { - case `testMsg1` => self.reply(3) - case `testMsg2` => self.reply(7) - } - } ).start - - val t4 = actorOf( new Actor() { - def receive = { - case `testMsg1` => self.reply(3) - case `testMsg2` => self.reply(7) - } - } ).start - - val d1 = loadBalancerActor(new SmallestMailboxFirstIterator(t1 :: t2 :: Nil)) - val d2 = loadBalancerActor(new CyclicIterator[ActorRef](t3 :: t4 :: Nil)) - - t1.isDefinedAt(testMsg1) must be (true) - t1.isDefinedAt(testMsg3) must be (false) - t2.isDefinedAt(testMsg1) must be (true) - t2.isDefinedAt(testMsg3) must be (false) - d1.isDefinedAt(testMsg1) must be (true) - d1.isDefinedAt(testMsg3) must be (false) - d2.isDefinedAt(testMsg1) must be (true) - d2.isDefinedAt(testMsg3) must be (false) - - for(a <- List(t1,t2,d1,d2)) a.stop - } -} diff --git a/akka-karaf/akka-features/src/main/resources/features.xml b/akka-karaf/akka-features/src/main/resources/features.xml index db48a13785..067e64f193 100644 --- a/akka-karaf/akka-features/src/main/resources/features.xml +++ b/akka-karaf/akka-features/src/main/resources/features.xml @@ -13,10 +13,10 @@ mvn:sjson.json/sjson/0.6-SNAPSHOT - + sjson mvn:se.scalablesolutions.akka.akka-wrap/jgroups-wrapper_2.8.0.RC3_osgi/2.9.0.GA mvn:org.jboss.netty/netty/3.2.0.CR1 - mvn:se.scalablesolutions.akka/akka-core_2.8.0.RC3_osgi/0.9 + mvn:se.scalablesolutions.akka/akka-remote_2.8.0.RC3_osgi/0.9 diff --git a/akka-core/src/main/protocol/RemoteProtocol.proto b/akka-remote/src/main/protocol/RemoteProtocol.proto similarity index 98% rename from akka-core/src/main/protocol/RemoteProtocol.proto rename to akka-remote/src/main/protocol/RemoteProtocol.proto index 6cf9bfd534..567bf54eba 100644 --- a/akka-core/src/main/protocol/RemoteProtocol.proto +++ b/akka-remote/src/main/protocol/RemoteProtocol.proto @@ -7,7 +7,7 @@ option optimize_for = SPEED; /****************************************** Compile with: - cd ./akka-core/src/main/protocol + cd ./akka-remote/src/main/protocol protoc RemoteProtocol.proto --java_out ../java *******************************************/ diff --git a/akka-core/src/main/scala/remote/BootableRemoteActorService.scala b/akka-remote/src/main/scala/remote/BootableRemoteActorService.scala similarity index 100% rename from akka-core/src/main/scala/remote/BootableRemoteActorService.scala rename to akka-remote/src/main/scala/remote/BootableRemoteActorService.scala diff --git a/akka-core/src/main/scala/remote/Cluster.scala b/akka-remote/src/main/scala/remote/Cluster.scala similarity index 100% rename from akka-core/src/main/scala/remote/Cluster.scala rename to akka-remote/src/main/scala/remote/Cluster.scala diff --git a/akka-core/src/main/scala/remote/JGroupsClusterActor.scala b/akka-remote/src/main/scala/remote/JGroupsClusterActor.scala similarity index 100% rename from akka-core/src/main/scala/remote/JGroupsClusterActor.scala rename to akka-remote/src/main/scala/remote/JGroupsClusterActor.scala diff --git a/akka-core/src/main/scala/remote/MessageSerializer.scala b/akka-remote/src/main/scala/remote/MessageSerializer.scala similarity index 100% rename from akka-core/src/main/scala/remote/MessageSerializer.scala rename to akka-remote/src/main/scala/remote/MessageSerializer.scala diff --git a/akka-core/src/main/scala/remote/RemoteClient.scala b/akka-remote/src/main/scala/remote/RemoteClient.scala similarity index 92% rename from akka-core/src/main/scala/remote/RemoteClient.scala rename to akka-remote/src/main/scala/remote/RemoteClient.scala index 6a8245e8b8..8a555bf5a1 100644 --- a/akka-core/src/main/scala/remote/RemoteClient.scala +++ b/akka-remote/src/main/scala/remote/RemoteClient.scala @@ -5,12 +5,14 @@ package se.scalablesolutions.akka.remote import se.scalablesolutions.akka.remote.protocol.RemoteProtocol._ -import se.scalablesolutions.akka.actor.{Exit, Actor, ActorRef, RemoteActorRef, IllegalActorStateException} +import se.scalablesolutions.akka.actor.{Exit, Actor, ActorRef, ActorType, RemoteActorRef, RemoteActorSerialization, IllegalActorStateException} import se.scalablesolutions.akka.dispatch.{DefaultCompletableFuture, CompletableFuture} import se.scalablesolutions.akka.util.{ListenerManagement, UUID, Logging, Duration} import se.scalablesolutions.akka.config.Config._ import se.scalablesolutions.akka.AkkaException import Actor._ +import RemoteActorSerialization._ + import org.jboss.netty.channel._ import group.DefaultChannelGroup import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory @@ -118,7 +120,8 @@ object RemoteClient extends Logging { private[akka] def clientFor(hostname: String, port: Int, loader: Option[ClassLoader]): RemoteClient = clientFor(new InetSocketAddress(hostname, port), loader) - private[akka] def clientFor(address: InetSocketAddress, loader: Option[ClassLoader]): RemoteClient = synchronized { + private[akka] def clientFor( + address: InetSocketAddress, loader: Option[ClassLoader]): RemoteClient = synchronized { val hostname = address.getHostName val port = address.getPort val hash = hostname + ':' + port @@ -151,7 +154,7 @@ object RemoteClient extends Logging { remoteClients.clear } - private[akka] def register(hostname: String, port: Int, uuid: String) = synchronized { + def register(hostname: String, port: Int, uuid: String) = synchronized { actorsFor(RemoteServer.Address(hostname, port)) += uuid } @@ -177,7 +180,8 @@ object RemoteClient extends Logging { * * @author Jonas Bonér */ -class RemoteClient private[akka] (val hostname: String, val port: Int, val loader: Option[ClassLoader] = None) +class RemoteClient private[akka] ( + val hostname: String, val port: Int, val loader: Option[ClassLoader] = None) extends Logging with ListenerManagement { val name = "RemoteClient@" + hostname + "::" + port @@ -200,7 +204,8 @@ class RemoteClient private[akka] (val hostname: String, val port: Int, val loade Duration(config.getInt("akka.remote.client.reconnection-time-window", 600), TIME_UNIT).toMillis @volatile private var reconnectionTimeWindowStart = 0L - bootstrap.setPipelineFactory(new RemoteClientPipelineFactory(name, futures, supervisors, bootstrap, remoteAddress, timer, this)) + bootstrap.setPipelineFactory(new RemoteClientPipelineFactory( + name, futures, supervisors, bootstrap, remoteAddress, timer, this)) bootstrap.setOption("tcpNoDelay", true) bootstrap.setOption("keepAlive", true) @@ -242,7 +247,24 @@ class RemoteClient private[akka] (val hostname: String, val port: Int, val loade protected override def manageLifeCycleOfListeners = false - def send[T](request: RemoteRequestProtocol, senderFuture: Option[CompletableFuture[T]]): Option[CompletableFuture[T]] = if (isRunning) { + def send[T]( + message: Any, + senderOption: Option[ActorRef], + senderFuture: Option[CompletableFuture[T]], + remoteAddress: InetSocketAddress, + timeout: Long, + isOneWay: Boolean, + actorRef: ActorRef, + typedActorInfo: Option[Tuple2[String, String]], + actorType: ActorType): Option[CompletableFuture[T]] = { + send(createRemoteRequestProtocolBuilder( + actorRef, message, isOneWay, senderOption, typedActorInfo, actorType).build, senderFuture) + } + + def send[T]( + request: RemoteRequestProtocol, + senderFuture: Option[CompletableFuture[T]]): + Option[CompletableFuture[T]] = if (isRunning) { if (request.getIsOneWay) { connection.getChannel.write(request) None @@ -256,7 +278,8 @@ class RemoteClient private[akka] (val hostname: String, val port: Int, val loade } } } else { - val exception = new RemoteClientException("Remote client is not running, make sure you have invoked 'RemoteClient.connect' before using it.", this) + val exception = new RemoteClientException( + "Remote client is not running, make sure you have invoked 'RemoteClient.connect' before using it.", this) foreachListener(l => l ! RemoteClientError(exception, this)) throw exception } diff --git a/akka-core/src/main/scala/remote/RemoteServer.scala b/akka-remote/src/main/scala/remote/RemoteServer.scala similarity index 98% rename from akka-core/src/main/scala/remote/RemoteServer.scala rename to akka-remote/src/main/scala/remote/RemoteServer.scala index 9c8f7454fa..f20f78cc96 100644 --- a/akka-core/src/main/scala/remote/RemoteServer.scala +++ b/akka-remote/src/main/scala/remote/RemoteServer.scala @@ -13,6 +13,7 @@ import se.scalablesolutions.akka.actor._ import se.scalablesolutions.akka.actor.Actor._ import se.scalablesolutions.akka.util._ import se.scalablesolutions.akka.remote.protocol.RemoteProtocol._ +import se.scalablesolutions.akka.remote.protocol.RemoteProtocol.ActorType._ import se.scalablesolutions.akka.config.Config._ import org.jboss.netty.bootstrap.ServerBootstrap @@ -443,9 +444,9 @@ class RemoteServerHandler( private def handleRemoteRequestProtocol(request: RemoteRequestProtocol, channel: Channel) = { log.debug("Received RemoteRequestProtocol[\n%s]", request.toString) val actorType = request.getActorInfo.getActorType - if (actorType == ActorType.SCALA_ACTOR) dispatchToActor(request, channel) - else if (actorType == ActorType.JAVA_ACTOR) throw new IllegalActorStateException("ActorType JAVA_ACTOR is currently not supported") - else if (actorType == ActorType.TYPED_ACTOR) dispatchToTypedActor(request, channel) + if (actorType == SCALA_ACTOR) dispatchToActor(request, channel) + else if (actorType == JAVA_ACTOR) throw new IllegalActorStateException("ActorType JAVA_ACTOR is currently not supported") + else if (actorType == TYPED_ACTOR) dispatchToTypedActor(request, channel) else throw new IllegalActorStateException("Unknown ActorType [" + actorType + "]") } diff --git a/akka-core/src/main/scala/serialization/Binary.scala b/akka-remote/src/main/scala/serialization/Binary.scala similarity index 100% rename from akka-core/src/main/scala/serialization/Binary.scala rename to akka-remote/src/main/scala/serialization/Binary.scala diff --git a/akka-core/src/main/scala/serialization/Compression.scala b/akka-remote/src/main/scala/serialization/Compression.scala similarity index 100% rename from akka-core/src/main/scala/serialization/Compression.scala rename to akka-remote/src/main/scala/serialization/Compression.scala diff --git a/akka-core/src/main/scala/serialization/Serializable.scala b/akka-remote/src/main/scala/serialization/Serializable.scala similarity index 100% rename from akka-core/src/main/scala/serialization/Serializable.scala rename to akka-remote/src/main/scala/serialization/Serializable.scala diff --git a/akka-remote/src/main/scala/serialization/SerializationProtocol.scala b/akka-remote/src/main/scala/serialization/SerializationProtocol.scala new file mode 100644 index 0000000000..e7bee8e9b9 --- /dev/null +++ b/akka-remote/src/main/scala/serialization/SerializationProtocol.scala @@ -0,0 +1,284 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package se.scalablesolutions.akka.actor + +import se.scalablesolutions.akka.config.{AllForOneStrategy, OneForOneStrategy, FaultHandlingStrategy} +import se.scalablesolutions.akka.config.ScalaConfig._ +import se.scalablesolutions.akka.stm.global._ +import se.scalablesolutions.akka.stm.TransactionManagement._ +import se.scalablesolutions.akka.stm.TransactionManagement +import se.scalablesolutions.akka.remote.protocol.RemoteProtocol._ +import se.scalablesolutions.akka.remote.{RemoteServer, RemoteRequestProtocolIdFactory, MessageSerializer} +import se.scalablesolutions.akka.remote.protocol.RemoteProtocol.ActorType._ +import se.scalablesolutions.akka.serialization.Serializer + +import com.google.protobuf.ByteString + +/** + * Type class definition for Actor Serialization + */ +trait FromBinary[T <: Actor] { + def fromBinary(bytes: Array[Byte], act: T): T +} + +trait ToBinary[T <: Actor] { + def toBinary(t: T): Array[Byte] +} + +// client needs to implement Format[] for the respective actor +trait Format[T <: Actor] extends FromBinary[T] with ToBinary[T] + +/** + * A default implementation for a stateless actor + * + * Create a Format object with the client actor as the implementation of the type class + * + *

+ * object BinaryFormatMyStatelessActor {
+ *   implicit object MyStatelessActorFormat extends StatelessActorFormat[MyStatelessActor]
+ * }
+ * 
+ */ +trait StatelessActorFormat[T <: Actor] extends Format[T] { + def fromBinary(bytes: Array[Byte], act: T) = act + def toBinary(ac: T) = Array.empty[Byte] +} + +/** + * A default implementation of the type class for a Format that specifies a serializer + * + * Create a Format object with the client actor as the implementation of the type class and + * a serializer object + * + *
+ * object BinaryFormatMyJavaSerializableActor {
+ *   implicit object MyJavaSerializableActorFormat extends SerializerBasedActorFormat[MyJavaSerializableActor] {
+ *     val serializer = Serializer.Java
+ *   }
+ * }
+ * 
+ */ +trait SerializerBasedActorFormat[T <: Actor] extends Format[T] { + val serializer: Serializer + def fromBinary(bytes: Array[Byte], act: T) = serializer.fromBinary(bytes, Some(act.self.actorClass)).asInstanceOf[T] + def toBinary(ac: T) = serializer.toBinary(ac) +} + +/** + * Module for local actor serialization + */ +object ActorSerialization { + + def fromBinary[T <: Actor](bytes: Array[Byte])(implicit format: Format[T]): ActorRef = + fromBinaryToLocalActorRef(bytes, format) + + def toBinary[T <: Actor](a: ActorRef)(implicit format: Format[T]): Array[Byte] = + toSerializedActorRefProtocol(a, format).toByteArray + + // wrapper for implicits to be used by Java + def fromBinaryJ[T <: Actor](bytes: Array[Byte], format: Format[T]): ActorRef = + fromBinary(bytes)(format) + + // wrapper for implicits to be used by Java + def toBinaryJ[T <: Actor](a: ActorRef, format: Format[T]): Array[Byte] = + toBinary(a)(format) + + private def toSerializedActorRefProtocol[T <: Actor]( + actorRef: ActorRef, format: Format[T]): SerializedActorRefProtocol = { + val lifeCycleProtocol: Option[LifeCycleProtocol] = { + def setScope(builder: LifeCycleProtocol.Builder, scope: Scope) = scope match { + case Permanent => builder.setLifeCycle(LifeCycleType.PERMANENT) + case Temporary => builder.setLifeCycle(LifeCycleType.TEMPORARY) + } + val builder = LifeCycleProtocol.newBuilder + actorRef.lifeCycle match { + case Some(LifeCycle(scope)) => + setScope(builder, scope) + Some(builder.build) + case None => None + } + } + + val originalAddress = AddressProtocol.newBuilder + .setHostname(actorRef.homeAddress.getHostName) + .setPort(actorRef.homeAddress.getPort) + .build + + val builder = SerializedActorRefProtocol.newBuilder + .setUuid(actorRef.uuid) + .setId(actorRef.id) + .setActorClassname(actorRef.actorClass.getName) + .setOriginalAddress(originalAddress) + .setIsTransactor(actorRef.isTransactor) + .setTimeout(actorRef.timeout) + + actorRef.receiveTimeout.foreach(builder.setReceiveTimeout(_)) + builder.setActorInstance(ByteString.copyFrom(format.toBinary(actorRef.actor.asInstanceOf[T]))) + lifeCycleProtocol.foreach(builder.setLifeCycle(_)) + actorRef.supervisor.foreach(s => builder.setSupervisor(RemoteActorSerialization.toRemoteActorRefProtocol(s))) + // FIXME: how to serialize the hotswap PartialFunction ?? + //hotswap.foreach(builder.setHotswapStack(_)) + builder.build + } + + private def fromBinaryToLocalActorRef[T <: Actor](bytes: Array[Byte], format: Format[T]): ActorRef = + fromProtobufToLocalActorRef(SerializedActorRefProtocol.newBuilder.mergeFrom(bytes).build, format, None) + + private def fromProtobufToLocalActorRef[T <: Actor]( + protocol: SerializedActorRefProtocol, format: Format[T], loader: Option[ClassLoader]): ActorRef = { + Actor.log.debug("Deserializing SerializedActorRefProtocol to LocalActorRef:\n" + protocol) + + val serializer = + if (format.isInstanceOf[SerializerBasedActorFormat[_]]) + Some(format.asInstanceOf[SerializerBasedActorFormat[_]].serializer) + else None + + val lifeCycle = + if (protocol.hasLifeCycle) { + val lifeCycleProtocol = protocol.getLifeCycle + Some(if (lifeCycleProtocol.getLifeCycle == LifeCycleType.PERMANENT) LifeCycle(Permanent) + else if (lifeCycleProtocol.getLifeCycle == LifeCycleType.TEMPORARY) LifeCycle(Temporary) + else throw new IllegalActorStateException("LifeCycle type is not valid: " + lifeCycleProtocol.getLifeCycle)) + } else None + + val supervisor = + if (protocol.hasSupervisor) + Some(RemoteActorSerialization.fromProtobufToRemoteActorRef(protocol.getSupervisor, loader)) + else None + + val hotswap = + if (serializer.isDefined && protocol.hasHotswapStack) Some(serializer.get + .fromBinary(protocol.getHotswapStack.toByteArray, Some(classOf[PartialFunction[Any, Unit]])) + .asInstanceOf[PartialFunction[Any, Unit]]) + else None + + val classLoader = loader.getOrElse(getClass.getClassLoader) + + val factory = () => { + val actorClass = classLoader.loadClass(protocol.getActorClassname) + if (format.isInstanceOf[SerializerBasedActorFormat[_]]) + format.asInstanceOf[SerializerBasedActorFormat[_]].serializer.fromBinary( + protocol.getActorInstance.toByteArray, Some(actorClass)).asInstanceOf[Actor] + else actorClass.newInstance.asInstanceOf[Actor] + } + + val ar = new LocalActorRef( + protocol.getUuid, + protocol.getId, + protocol.getOriginalAddress.getHostname, + protocol.getOriginalAddress.getPort, + if (protocol.hasIsTransactor) protocol.getIsTransactor else false, + if (protocol.hasTimeout) protocol.getTimeout else Actor.TIMEOUT, + if (protocol.hasReceiveTimeout) Some(protocol.getReceiveTimeout) else None, + lifeCycle, + supervisor, + hotswap, + classLoader, // TODO: should we fall back to getClass.getClassLoader? + factory) + + val messages = protocol.getMessagesList.toArray.toList.asInstanceOf[List[RemoteRequestProtocol]] + messages.foreach(message => ar ! MessageSerializer.deserialize(message.getMessage)) + + if (format.isInstanceOf[SerializerBasedActorFormat[_]] == false) + format.fromBinary(protocol.getActorInstance.toByteArray, ar.actor.asInstanceOf[T]) + ar + } +} + +object RemoteActorSerialization { + /** + * Deserializes a byte array (Array[Byte]) into an RemoteActorRef instance. + */ + def fromBinaryToRemoteActorRef(bytes: Array[Byte]): ActorRef = + fromProtobufToRemoteActorRef(RemoteActorRefProtocol.newBuilder.mergeFrom(bytes).build, None) + + /** + * Deserializes a byte array (Array[Byte]) into an RemoteActorRef instance. + */ + def fromBinaryToRemoteActorRef(bytes: Array[Byte], loader: ClassLoader): ActorRef = + fromProtobufToRemoteActorRef(RemoteActorRefProtocol.newBuilder.mergeFrom(bytes).build, Some(loader)) + + /** + * Deserializes a RemoteActorRefProtocol Protocol Buffers (protobuf) Message into an RemoteActorRef instance. + */ + private[akka] def fromProtobufToRemoteActorRef(protocol: RemoteActorRefProtocol, loader: Option[ClassLoader]): ActorRef = { + Actor.log.debug("Deserializing RemoteActorRefProtocol to RemoteActorRef:\n" + protocol) + RemoteActorRef( + protocol.getUuid, + protocol.getActorClassname, + protocol.getHomeAddress.getHostname, + protocol.getHomeAddress.getPort, + protocol.getTimeout, + loader) + } + + /** + * Serializes the ActorRef instance into a Protocol Buffers (protobuf) Message. + */ + def toRemoteActorRefProtocol(ar: ActorRef): RemoteActorRefProtocol = { + import ar._ + val host = homeAddress.getHostName + val port = homeAddress.getPort + + if (!registeredInRemoteNodeDuringSerialization) { + Actor.log.debug("Register serialized Actor [%s] as remote @ [%s:%s]", actorClass.getName, host, port) + RemoteServer.getOrCreateServer(homeAddress) + RemoteServer.registerActor(homeAddress, uuid, ar) + registeredInRemoteNodeDuringSerialization = true + } + + RemoteActorRefProtocol.newBuilder + .setUuid(uuid) + .setActorClassname(actorClass.getName) + .setHomeAddress(AddressProtocol.newBuilder.setHostname(host).setPort(port).build) + .setTimeout(timeout) + .build + } + + def createRemoteRequestProtocolBuilder( + actorRef: ActorRef, + message: Any, + isOneWay: Boolean, + senderOption: Option[ActorRef], + typedActorInfo: Option[Tuple2[String, String]], + actorType: ActorType): + RemoteRequestProtocol.Builder = { + import actorRef._ + + val actorInfoBuilder = ActorInfoProtocol.newBuilder + .setUuid(uuid) + .setTarget(actorClassName) + .setTimeout(timeout) + + typedActorInfo.foreach { typedActor => + actorInfoBuilder.setTypedActorInfo( + TypedActorInfoProtocol.newBuilder + .setInterface(typedActor._1) + .setMethod(typedActor._2) + .build) + } + + actorType match { + case ActorType.ScalaActor => actorInfoBuilder.setActorType(SCALA_ACTOR) + case ActorType.TypedActor => actorInfoBuilder.setActorType(TYPED_ACTOR) + } + val actorInfo = actorInfoBuilder.build + + val requestBuilder = RemoteRequestProtocol.newBuilder + .setId(RemoteRequestProtocolIdFactory.nextId) + .setMessage(MessageSerializer.serialize(message)) + .setActorInfo(actorInfo) + .setIsOneWay(isOneWay) + + val id = registerSupervisorAsRemoteActor + if (id.isDefined) requestBuilder.setSupervisorUuid(id.get) + + senderOption.foreach { sender => + RemoteServer.getOrCreateServer(sender.homeAddress).register(sender.uuid, sender) + requestBuilder.setSender(toRemoteActorRefProtocol(sender)) + } + requestBuilder + } +} diff --git a/akka-core/src/main/scala/serialization/Serializer.scala b/akka-remote/src/main/scala/serialization/Serializer.scala similarity index 100% rename from akka-core/src/main/scala/serialization/Serializer.scala rename to akka-remote/src/main/scala/serialization/Serializer.scala diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/ProtobufProtocol.java b/akka-remote/src/test/java/se/scalablesolutions/akka/actor/ProtobufProtocol.java similarity index 98% rename from akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/ProtobufProtocol.java rename to akka-remote/src/test/java/se/scalablesolutions/akka/actor/ProtobufProtocol.java index 683f008729..183d2025d0 100644 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/ProtobufProtocol.java +++ b/akka-remote/src/test/java/se/scalablesolutions/akka/actor/ProtobufProtocol.java @@ -15,47 +15,47 @@ public final class ProtobufProtocol { initFields(); } private ProtobufPOJO(boolean noInit) {} - + private static final ProtobufPOJO defaultInstance; public static ProtobufPOJO getDefaultInstance() { return defaultInstance; } - + public ProtobufPOJO getDefaultInstanceForType() { return defaultInstance; } - + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_ProtobufPOJO_descriptor; } - + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_ProtobufPOJO_fieldAccessorTable; } - + // required uint64 id = 1; public static final int ID_FIELD_NUMBER = 1; private boolean hasId; private long id_ = 0L; public boolean hasId() { return hasId; } public long getId() { return id_; } - + // required string name = 2; public static final int NAME_FIELD_NUMBER = 2; private boolean hasName; private java.lang.String name_ = ""; public boolean hasName() { return hasName; } public java.lang.String getName() { return name_; } - + // required bool status = 3; public static final int STATUS_FIELD_NUMBER = 3; private boolean hasStatus; private boolean status_ = false; public boolean hasStatus() { return hasStatus; } public boolean getStatus() { return status_; } - + private void initFields() { } public final boolean isInitialized() { @@ -64,7 +64,7 @@ public final class ProtobufProtocol { if (!hasStatus) return false; return true; } - + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { getSerializedSize(); @@ -79,12 +79,12 @@ public final class ProtobufProtocol { } getUnknownFields().writeTo(output); } - + private int memoizedSerializedSize = -1; public int getSerializedSize() { int size = memoizedSerializedSize; if (size != -1) return size; - + size = 0; if (hasId()) { size += com.google.protobuf.CodedOutputStream @@ -102,7 +102,7 @@ public final class ProtobufProtocol { memoizedSerializedSize = size; return size; } - + public static se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { @@ -169,31 +169,31 @@ public final class ProtobufProtocol { return newBuilder().mergeFrom(input, extensionRegistry) .buildParsed(); } - + public static Builder newBuilder() { return Builder.create(); } public Builder newBuilderForType() { return newBuilder(); } public static Builder newBuilder(se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO prototype) { return newBuilder().mergeFrom(prototype); } public Builder toBuilder() { return newBuilder(this); } - + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder { private se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO result; - + // Construct using se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO.newBuilder() private Builder() {} - + private static Builder create() { Builder builder = new Builder(); builder.result = new se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO(); return builder; } - + protected se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO internalGetResult() { return result; } - + public Builder clear() { if (result == null) { throw new IllegalStateException( @@ -202,20 +202,20 @@ public final class ProtobufProtocol { result = new se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO(); return this; } - + public Builder clone() { return create().mergeFrom(result); } - + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { return se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO.getDescriptor(); } - + public se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO getDefaultInstanceForType() { return se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO.getDefaultInstance(); } - + public boolean isInitialized() { return result.isInitialized(); } @@ -225,7 +225,7 @@ public final class ProtobufProtocol { } return buildPartial(); } - + private se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO buildParsed() throws com.google.protobuf.InvalidProtocolBufferException { if (!isInitialized()) { @@ -234,7 +234,7 @@ public final class ProtobufProtocol { } return buildPartial(); } - + public se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO buildPartial() { if (result == null) { throw new IllegalStateException( @@ -244,7 +244,7 @@ public final class ProtobufProtocol { result = null; return returnMe; } - + public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO) { return mergeFrom((se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO)other); @@ -253,7 +253,7 @@ public final class ProtobufProtocol { return this; } } - + public Builder mergeFrom(se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO other) { if (other == se.scalablesolutions.akka.actor.ProtobufProtocol.ProtobufPOJO.getDefaultInstance()) return this; if (other.hasId()) { @@ -268,7 +268,7 @@ public final class ProtobufProtocol { this.mergeUnknownFields(other.getUnknownFields()); return this; } - + public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -305,8 +305,8 @@ public final class ProtobufProtocol { } } } - - + + // required uint64 id = 1; public boolean hasId() { return result.hasId(); @@ -324,7 +324,7 @@ public final class ProtobufProtocol { result.id_ = 0L; return this; } - + // required string name = 2; public boolean hasName() { return result.hasName(); @@ -345,7 +345,7 @@ public final class ProtobufProtocol { result.name_ = getDefaultInstance().getName(); return this; } - + // required bool status = 3; public boolean hasStatus() { return result.hasStatus(); @@ -363,19 +363,19 @@ public final class ProtobufProtocol { result.status_ = false; return this; } - + // @@protoc_insertion_point(builder_scope:se.scalablesolutions.akka.actor.ProtobufPOJO) } - + static { defaultInstance = new ProtobufPOJO(true); se.scalablesolutions.akka.actor.ProtobufProtocol.internalForceInit(); defaultInstance.initFields(); } - + // @@protoc_insertion_point(class_scope:se.scalablesolutions.akka.actor.ProtobufPOJO) } - + public static final class Counter extends com.google.protobuf.GeneratedMessage { // Use Counter.newBuilder() to construct. @@ -383,40 +383,40 @@ public final class ProtobufProtocol { initFields(); } private Counter(boolean noInit) {} - + private static final Counter defaultInstance; public static Counter getDefaultInstance() { return defaultInstance; } - + public Counter getDefaultInstanceForType() { return defaultInstance; } - + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_Counter_descriptor; } - + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_Counter_fieldAccessorTable; } - + // required uint32 count = 1; public static final int COUNT_FIELD_NUMBER = 1; private boolean hasCount; private int count_ = 0; public boolean hasCount() { return hasCount; } public int getCount() { return count_; } - + private void initFields() { } public final boolean isInitialized() { if (!hasCount) return false; return true; } - + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { getSerializedSize(); @@ -425,12 +425,12 @@ public final class ProtobufProtocol { } getUnknownFields().writeTo(output); } - + private int memoizedSerializedSize = -1; public int getSerializedSize() { int size = memoizedSerializedSize; if (size != -1) return size; - + size = 0; if (hasCount()) { size += com.google.protobuf.CodedOutputStream @@ -440,7 +440,7 @@ public final class ProtobufProtocol { memoizedSerializedSize = size; return size; } - + public static se.scalablesolutions.akka.actor.ProtobufProtocol.Counter parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { @@ -507,31 +507,31 @@ public final class ProtobufProtocol { return newBuilder().mergeFrom(input, extensionRegistry) .buildParsed(); } - + public static Builder newBuilder() { return Builder.create(); } public Builder newBuilderForType() { return newBuilder(); } public static Builder newBuilder(se.scalablesolutions.akka.actor.ProtobufProtocol.Counter prototype) { return newBuilder().mergeFrom(prototype); } public Builder toBuilder() { return newBuilder(this); } - + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder { private se.scalablesolutions.akka.actor.ProtobufProtocol.Counter result; - + // Construct using se.scalablesolutions.akka.actor.ProtobufProtocol.Counter.newBuilder() private Builder() {} - + private static Builder create() { Builder builder = new Builder(); builder.result = new se.scalablesolutions.akka.actor.ProtobufProtocol.Counter(); return builder; } - + protected se.scalablesolutions.akka.actor.ProtobufProtocol.Counter internalGetResult() { return result; } - + public Builder clear() { if (result == null) { throw new IllegalStateException( @@ -540,20 +540,20 @@ public final class ProtobufProtocol { result = new se.scalablesolutions.akka.actor.ProtobufProtocol.Counter(); return this; } - + public Builder clone() { return create().mergeFrom(result); } - + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { return se.scalablesolutions.akka.actor.ProtobufProtocol.Counter.getDescriptor(); } - + public se.scalablesolutions.akka.actor.ProtobufProtocol.Counter getDefaultInstanceForType() { return se.scalablesolutions.akka.actor.ProtobufProtocol.Counter.getDefaultInstance(); } - + public boolean isInitialized() { return result.isInitialized(); } @@ -563,7 +563,7 @@ public final class ProtobufProtocol { } return buildPartial(); } - + private se.scalablesolutions.akka.actor.ProtobufProtocol.Counter buildParsed() throws com.google.protobuf.InvalidProtocolBufferException { if (!isInitialized()) { @@ -572,7 +572,7 @@ public final class ProtobufProtocol { } return buildPartial(); } - + public se.scalablesolutions.akka.actor.ProtobufProtocol.Counter buildPartial() { if (result == null) { throw new IllegalStateException( @@ -582,7 +582,7 @@ public final class ProtobufProtocol { result = null; return returnMe; } - + public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof se.scalablesolutions.akka.actor.ProtobufProtocol.Counter) { return mergeFrom((se.scalablesolutions.akka.actor.ProtobufProtocol.Counter)other); @@ -591,7 +591,7 @@ public final class ProtobufProtocol { return this; } } - + public Builder mergeFrom(se.scalablesolutions.akka.actor.ProtobufProtocol.Counter other) { if (other == se.scalablesolutions.akka.actor.ProtobufProtocol.Counter.getDefaultInstance()) return this; if (other.hasCount()) { @@ -600,7 +600,7 @@ public final class ProtobufProtocol { this.mergeUnknownFields(other.getUnknownFields()); return this; } - + public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -629,8 +629,8 @@ public final class ProtobufProtocol { } } } - - + + // required uint32 count = 1; public boolean hasCount() { return result.hasCount(); @@ -648,19 +648,19 @@ public final class ProtobufProtocol { result.count_ = 0; return this; } - + // @@protoc_insertion_point(builder_scope:se.scalablesolutions.akka.actor.Counter) } - + static { defaultInstance = new Counter(true); se.scalablesolutions.akka.actor.ProtobufProtocol.internalForceInit(); defaultInstance.initFields(); } - + // @@protoc_insertion_point(class_scope:se.scalablesolutions.akka.actor.Counter) } - + public static final class DualCounter extends com.google.protobuf.GeneratedMessage { // Use DualCounter.newBuilder() to construct. @@ -668,40 +668,40 @@ public final class ProtobufProtocol { initFields(); } private DualCounter(boolean noInit) {} - + private static final DualCounter defaultInstance; public static DualCounter getDefaultInstance() { return defaultInstance; } - + public DualCounter getDefaultInstanceForType() { return defaultInstance; } - + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_DualCounter_descriptor; } - + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { return se.scalablesolutions.akka.actor.ProtobufProtocol.internal_static_se_scalablesolutions_akka_actor_DualCounter_fieldAccessorTable; } - + // required uint32 count1 = 1; public static final int COUNT1_FIELD_NUMBER = 1; private boolean hasCount1; private int count1_ = 0; public boolean hasCount1() { return hasCount1; } public int getCount1() { return count1_; } - + // required uint32 count2 = 2; public static final int COUNT2_FIELD_NUMBER = 2; private boolean hasCount2; private int count2_ = 0; public boolean hasCount2() { return hasCount2; } public int getCount2() { return count2_; } - + private void initFields() { } public final boolean isInitialized() { @@ -709,7 +709,7 @@ public final class ProtobufProtocol { if (!hasCount2) return false; return true; } - + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { getSerializedSize(); @@ -721,12 +721,12 @@ public final class ProtobufProtocol { } getUnknownFields().writeTo(output); } - + private int memoizedSerializedSize = -1; public int getSerializedSize() { int size = memoizedSerializedSize; if (size != -1) return size; - + size = 0; if (hasCount1()) { size += com.google.protobuf.CodedOutputStream @@ -740,7 +740,7 @@ public final class ProtobufProtocol { memoizedSerializedSize = size; return size; } - + public static se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { @@ -807,31 +807,31 @@ public final class ProtobufProtocol { return newBuilder().mergeFrom(input, extensionRegistry) .buildParsed(); } - + public static Builder newBuilder() { return Builder.create(); } public Builder newBuilderForType() { return newBuilder(); } public static Builder newBuilder(se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter prototype) { return newBuilder().mergeFrom(prototype); } public Builder toBuilder() { return newBuilder(this); } - + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder { private se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter result; - + // Construct using se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter.newBuilder() private Builder() {} - + private static Builder create() { Builder builder = new Builder(); builder.result = new se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter(); return builder; } - + protected se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter internalGetResult() { return result; } - + public Builder clear() { if (result == null) { throw new IllegalStateException( @@ -840,20 +840,20 @@ public final class ProtobufProtocol { result = new se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter(); return this; } - + public Builder clone() { return create().mergeFrom(result); } - + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { return se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter.getDescriptor(); } - + public se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter getDefaultInstanceForType() { return se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter.getDefaultInstance(); } - + public boolean isInitialized() { return result.isInitialized(); } @@ -863,7 +863,7 @@ public final class ProtobufProtocol { } return buildPartial(); } - + private se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter buildParsed() throws com.google.protobuf.InvalidProtocolBufferException { if (!isInitialized()) { @@ -872,7 +872,7 @@ public final class ProtobufProtocol { } return buildPartial(); } - + public se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter buildPartial() { if (result == null) { throw new IllegalStateException( @@ -882,7 +882,7 @@ public final class ProtobufProtocol { result = null; return returnMe; } - + public Builder mergeFrom(com.google.protobuf.Message other) { if (other instanceof se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter) { return mergeFrom((se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter)other); @@ -891,7 +891,7 @@ public final class ProtobufProtocol { return this; } } - + public Builder mergeFrom(se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter other) { if (other == se.scalablesolutions.akka.actor.ProtobufProtocol.DualCounter.getDefaultInstance()) return this; if (other.hasCount1()) { @@ -903,7 +903,7 @@ public final class ProtobufProtocol { this.mergeUnknownFields(other.getUnknownFields()); return this; } - + public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) @@ -936,8 +936,8 @@ public final class ProtobufProtocol { } } } - - + + // required uint32 count1 = 1; public boolean hasCount1() { return result.hasCount1(); @@ -955,7 +955,7 @@ public final class ProtobufProtocol { result.count1_ = 0; return this; } - + // required uint32 count2 = 2; public boolean hasCount2() { return result.hasCount2(); @@ -973,19 +973,19 @@ public final class ProtobufProtocol { result.count2_ = 0; return this; } - + // @@protoc_insertion_point(builder_scope:se.scalablesolutions.akka.actor.DualCounter) } - + static { defaultInstance = new DualCounter(true); se.scalablesolutions.akka.actor.ProtobufProtocol.internalForceInit(); defaultInstance.initFields(); } - + // @@protoc_insertion_point(class_scope:se.scalablesolutions.akka.actor.DualCounter) } - + private static com.google.protobuf.Descriptors.Descriptor internal_static_se_scalablesolutions_akka_actor_ProtobufPOJO_descriptor; private static @@ -1001,7 +1001,7 @@ public final class ProtobufProtocol { private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_se_scalablesolutions_akka_actor_DualCounter_fieldAccessorTable; - + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { return descriptor; @@ -1053,8 +1053,8 @@ public final class ProtobufProtocol { new com.google.protobuf.Descriptors.FileDescriptor[] { }, assigner); } - + public static void internalForceInit() {} - + // @@protoc_insertion_point(outer_class_scope) } diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOne.java b/akka-remote/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOne.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOne.java rename to akka-remote/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOne.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOneImpl.java b/akka-remote/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOneImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOneImpl.java rename to akka-remote/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOneImpl.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwo.java b/akka-remote/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwo.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwo.java rename to akka-remote/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwo.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwoImpl.java b/akka-remote/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwoImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwoImpl.java rename to akka-remote/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwoImpl.java diff --git a/akka-typed-actors/src/main/java/se/scalablesolutions/akka/config/DependencyBinding.java b/akka-remote/src/test/java/se/scalablesolutions/akka/config/DependencyBinding.java similarity index 100% rename from akka-typed-actors/src/main/java/se/scalablesolutions/akka/config/DependencyBinding.java rename to akka-remote/src/test/java/se/scalablesolutions/akka/config/DependencyBinding.java diff --git a/akka-typed-actors/src/main/java/se/scalablesolutions/akka/config/TypedActorGuiceModule.java b/akka-remote/src/test/java/se/scalablesolutions/akka/config/TypedActorGuiceModule.java similarity index 100% rename from akka-typed-actors/src/main/java/se/scalablesolutions/akka/config/TypedActorGuiceModule.java rename to akka-remote/src/test/java/se/scalablesolutions/akka/config/TypedActorGuiceModule.java diff --git a/akka-core/src/main/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java b/akka-remote/src/test/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java similarity index 100% rename from akka-core/src/main/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java rename to akka-remote/src/test/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java diff --git a/akka-core/src/test/protocol/ProtobufProtocol.proto b/akka-remote/src/test/protocol/ProtobufProtocol.proto similarity index 92% rename from akka-core/src/test/protocol/ProtobufProtocol.proto rename to akka-remote/src/test/protocol/ProtobufProtocol.proto index 35ffec95e3..a63ebdff62 100644 --- a/akka-core/src/test/protocol/ProtobufProtocol.proto +++ b/akka-remote/src/test/protocol/ProtobufProtocol.proto @@ -6,7 +6,7 @@ package se.scalablesolutions.akka.actor; /* Compile with: - cd ./akka-core/src/test/protocol + cd ./akka-remote/src/test/protocol protoc ProtobufProtocol.proto --java_out ../java */ diff --git a/akka-core/src/test/resources/META-INF/aop.xml b/akka-remote/src/test/resources/META-INF/aop.xml similarity index 100% rename from akka-core/src/test/resources/META-INF/aop.xml rename to akka-remote/src/test/resources/META-INF/aop.xml diff --git a/akka-core/src/test/resources/logback-test.xml b/akka-remote/src/test/resources/logback-test.xml similarity index 100% rename from akka-core/src/test/resources/logback-test.xml rename to akka-remote/src/test/resources/logback-test.xml diff --git a/akka-actors/src/test/scala/Messages.scala b/akka-remote/src/test/scala/Messages.scala similarity index 83% rename from akka-actors/src/test/scala/Messages.scala rename to akka-remote/src/test/scala/Messages.scala index ad1fcf8885..2b99155626 100644 --- a/akka-actors/src/test/scala/Messages.scala +++ b/akka-remote/src/test/scala/Messages.scala @@ -8,14 +8,6 @@ import se.scalablesolutions.akka.serialization.Serializable import sbinary._ import sbinary.Operations._ -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 - case class User(val usernamePassword: Tuple2[String, String], val email: String, val age: Int) diff --git a/akka-core/src/test/scala/remote/ClientInitiatedRemoteActorSpec.scala b/akka-remote/src/test/scala/remote/ClientInitiatedRemoteActorSpec.scala similarity index 100% rename from akka-core/src/test/scala/remote/ClientInitiatedRemoteActorSpec.scala rename to akka-remote/src/test/scala/remote/ClientInitiatedRemoteActorSpec.scala diff --git a/akka-core/src/test/scala/remote/RemoteSupervisorSpec.scala b/akka-remote/src/test/scala/remote/RemoteSupervisorSpec.scala similarity index 100% rename from akka-core/src/test/scala/remote/RemoteSupervisorSpec.scala rename to akka-remote/src/test/scala/remote/RemoteSupervisorSpec.scala diff --git a/akka-core/src/test/scala/remote/RemoteTransactionalTypedActorSpec.scala b/akka-remote/src/test/scala/remote/RemoteTransactionalTypedActorSpec.scala similarity index 100% rename from akka-core/src/test/scala/remote/RemoteTransactionalTypedActorSpec.scala rename to akka-remote/src/test/scala/remote/RemoteTransactionalTypedActorSpec.scala diff --git a/akka-core/src/test/scala/remote/RemoteTypedActorSpec.scala b/akka-remote/src/test/scala/remote/RemoteTypedActorSpec.scala similarity index 100% rename from akka-core/src/test/scala/remote/RemoteTypedActorSpec.scala rename to akka-remote/src/test/scala/remote/RemoteTypedActorSpec.scala diff --git a/akka-core/src/test/scala/remote/ServerInitiatedRemoteActorSample.scala b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSample.scala similarity index 100% rename from akka-core/src/test/scala/remote/ServerInitiatedRemoteActorSample.scala rename to akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSample.scala diff --git a/akka-core/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala similarity index 100% rename from akka-core/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala rename to akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala diff --git a/akka-core/src/test/scala/remote/ShutdownSpec.scala b/akka-remote/src/test/scala/remote/ShutdownSpec.scala similarity index 100% rename from akka-core/src/test/scala/remote/ShutdownSpec.scala rename to akka-remote/src/test/scala/remote/ShutdownSpec.scala diff --git a/akka-core/src/test/scala/serialization/ProtobufActorMessageSerializationSpec.scala b/akka-remote/src/test/scala/serialization/ProtobufActorMessageSerializationSpec.scala similarity index 100% rename from akka-core/src/test/scala/serialization/ProtobufActorMessageSerializationSpec.scala rename to akka-remote/src/test/scala/serialization/ProtobufActorMessageSerializationSpec.scala diff --git a/akka-core/src/test/scala/serialization/SerializableTypeClassActorSpec.scala b/akka-remote/src/test/scala/serialization/SerializableTypeClassActorSpec.scala similarity index 100% rename from akka-core/src/test/scala/serialization/SerializableTypeClassActorSpec.scala rename to akka-remote/src/test/scala/serialization/SerializableTypeClassActorSpec.scala diff --git a/akka-core/src/test/scala/serialization/SerializerSpec.scala b/akka-remote/src/test/scala/serialization/SerializerSpec.scala similarity index 100% rename from akka-core/src/test/scala/serialization/SerializerSpec.scala rename to akka-remote/src/test/scala/serialization/SerializerSpec.scala diff --git a/akka-core/src/test/scala/serialization/UntypedActorSerializationSpec.scala b/akka-remote/src/test/scala/serialization/UntypedActorSerializationSpec.scala similarity index 100% rename from akka-core/src/test/scala/serialization/UntypedActorSerializationSpec.scala rename to akka-remote/src/test/scala/serialization/UntypedActorSerializationSpec.scala diff --git a/akka-core/src/test/scala/ticket/Ticket001Spec.scala b/akka-remote/src/test/scala/ticket/Ticket001Spec.scala similarity index 100% rename from akka-core/src/test/scala/ticket/Ticket001Spec.scala rename to akka-remote/src/test/scala/ticket/Ticket001Spec.scala diff --git a/akka-samples/akka-sample-chat/Buildfile b/akka-samples/akka-sample-chat/Buildfile index fecc093964..814e6e4149 100644 --- a/akka-samples/akka-sample-chat/Buildfile +++ b/akka-samples/akka-sample-chat/Buildfile @@ -7,7 +7,7 @@ repositories.remote << "http://www.ibiblio.org/maven2/" repositories.remote << "http://www.lag.net/repo" repositories.remote << "http://multiverse.googlecode.com/svn/maven-repository/releases" -AKKA = group('akka-core', 'akka-comet', 'akka-util','akka-kernel', 'akka-rest', 'akka-util-java', +AKKA = group('akka-remote', 'akka-comet', 'akka-util','akka-kernel', 'akka-rest', 'akka-util-java', 'akka-security','akka-persistence-common', 'akka-persistence-redis', 'akka-amqp', :under=> 'se.scalablesolutions.akka', diff --git a/akka-sbt-plugin/src/main/scala/AkkaProject.scala b/akka-sbt-plugin/src/main/scala/AkkaProject.scala index ecf19ae135..ad0f98eee1 100644 --- a/akka-sbt-plugin/src/main/scala/AkkaProject.scala +++ b/akka-sbt-plugin/src/main/scala/AkkaProject.scala @@ -46,6 +46,6 @@ trait AkkaProject extends AkkaBaseProject { // convenience method def akkaModule(module: String) = "se.scalablesolutions.akka" %% ("akka-" + module) % akkaVersion - // akka core dependency by default - val akkaCore = akkaModule("core") + // akka remote dependency by default + val akkaRemote = akkaModule("remote") } diff --git a/akka-typed-actor/src/main/java/se/scalablesolutions/akka/config/DependencyBinding.java b/akka-typed-actor/src/main/java/se/scalablesolutions/akka/config/DependencyBinding.java new file mode 100644 index 0000000000..2956e6860f --- /dev/null +++ b/akka-typed-actor/src/main/java/se/scalablesolutions/akka/config/DependencyBinding.java @@ -0,0 +1,24 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package se.scalablesolutions.akka.config; + +/** + * @author Jonas Bonér + */ +public class DependencyBinding { + private final Class intf; + private final Object target; + + public DependencyBinding(final Class intf, final Object target) { + this.intf = intf; + this.target = target; + } + public Class getInterface() { + return intf; + } + public Object getTarget() { + return target; + } +} diff --git a/akka-typed-actor/src/main/java/se/scalablesolutions/akka/config/TypedActorGuiceModule.java b/akka-typed-actor/src/main/java/se/scalablesolutions/akka/config/TypedActorGuiceModule.java new file mode 100644 index 0000000000..0c2ed11402 --- /dev/null +++ b/akka-typed-actor/src/main/java/se/scalablesolutions/akka/config/TypedActorGuiceModule.java @@ -0,0 +1,32 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package se.scalablesolutions.akka.config; + +import java.util.List; + +import com.google.inject.AbstractModule; +import com.google.inject.Singleton; +//import com.google.inject.jsr250.ResourceProviderFactory; + +/** + * @author Jonas Bonér + */ +public class TypedActorGuiceModule extends AbstractModule { + private final List bindings; + + public TypedActorGuiceModule(final List bindings) { + this.bindings = bindings; + } + + protected void configure() { + //bind(ResourceProviderFactory.class); + for (int i = 0; i < bindings.size(); i++) { + final DependencyBinding db = bindings.get(i); + //if (db.getInterface() ne null) bind((Class) db.getInterface()).to((Class) db.getTarget()).in(Singleton.class); + //else + this.bind(db.getInterface()).toInstance(db.getTarget()); + } + } +} diff --git a/akka-typed-actors/src/main/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java b/akka-typed-actor/src/main/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java similarity index 100% rename from akka-typed-actors/src/main/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java rename to akka-typed-actor/src/main/java/se/scalablesolutions/akka/remote/protocol/RemoteProtocol.java diff --git a/akka-typed-actors/src/main/scala/actor/TypedActor.scala b/akka-typed-actor/src/main/scala/actor/TypedActor.scala similarity index 94% rename from akka-typed-actors/src/main/scala/actor/TypedActor.scala rename to akka-typed-actor/src/main/scala/actor/TypedActor.scala index c3d2444e55..96790b590b 100644 --- a/akka-typed-actors/src/main/scala/actor/TypedActor.scala +++ b/akka-typed-actor/src/main/scala/actor/TypedActor.scala @@ -6,12 +6,10 @@ package se.scalablesolutions.akka.actor import Actor._ import se.scalablesolutions.akka.config.FaultHandlingStrategy -import se.scalablesolutions.akka.remote.protocol.RemoteProtocol._ -import se.scalablesolutions.akka.remote.{MessageSerializer, RemoteClient, RemoteRequestProtocolIdFactory} import se.scalablesolutions.akka.dispatch.{MessageDispatcher, Future, CompletableFuture, Dispatchers} import se.scalablesolutions.akka.config.ScalaConfig._ -import se.scalablesolutions.akka.serialization.Serializer import se.scalablesolutions.akka.util._ +import ReflectiveAccess._ import org.codehaus.aspectwerkz.joinpoint.{MethodRtti, JoinPoint} import org.codehaus.aspectwerkz.proxy.Proxy @@ -226,8 +224,11 @@ abstract class TypedActor extends Actor with Proxyable { if (arg.getClass.getName.contains(TypedActor.AW_PROXY_PREFIX)) unserializable = true } if (!unserializable && hasMutableArgument) { - val copyOfArgs = Serializer.Java.deepClone(args) - joinPoint.getRtti.asInstanceOf[MethodRtti].setParameterValues(copyOfArgs.asInstanceOf[Array[AnyRef]]) + + //FIXME serializeArguments + // val copyOfArgs = Serializer.Java.deepClone(args) + // joinPoint.getRtti.asInstanceOf[MethodRtti].setParameterValues(copyOfArgs.asInstanceOf[Array[AnyRef]]) + joinPoint } } } @@ -538,11 +539,11 @@ object TypedActor extends Logging { private[akka] def supervise(restartStrategy: RestartStrategy, components: List[Supervise]): Supervisor = Supervisor(SupervisorConfig(restartStrategy, components)) - private[akka] def isJoinPointAndOneWay(message: AnyRef): Boolean = if (isJoinPoint(message)) + def isJoinPointAndOneWay(message: Any): Boolean = if (isJoinPoint(message)) isOneWay(message.asInstanceOf[JoinPoint].getRtti.asInstanceOf[MethodRtti]) else false - private[akka] def isJoinPoint(message: AnyRef): Boolean = message.isInstanceOf[JoinPoint]) + private[akka] def isJoinPoint(message: Any): Boolean = message.isInstanceOf[JoinPoint] } /** @@ -604,33 +605,14 @@ private[akka] sealed class TypedActorAspect { private def remoteDispatch(joinPoint: JoinPoint): AnyRef = { val methodRtti = joinPoint.getRtti.asInstanceOf[MethodRtti] val isOneWay = TypedActor.isOneWay(methodRtti) + val (message: Array[AnyRef], isEscaped) = escapeArguments(methodRtti.getParameterValues) - - val typedActorInfo = TypedActorInfoProtocol.newBuilder - .setInterface(interfaceClass.getName) - .setMethod(methodRtti.getMethod.getName) - .build - - val actorInfo = ActorInfoProtocol.newBuilder - .setUuid(uuid) - .setTarget(typedActor.getClass.getName) - .setTimeout(timeout) - .setActorType(ActorType.TYPED_ACTOR) - .setTypedActorInfo(typedActorInfo) - .build - - val requestBuilder = RemoteRequestProtocol.newBuilder - .setId(RemoteRequestProtocolIdFactory.nextId) - .setMessage(MessageSerializer.serialize(message)) - .setActorInfo(actorInfo) - .setIsOneWay(isOneWay) - - val id = actorRef.registerSupervisorAsRemoteActor - if (id.isDefined) requestBuilder.setSupervisorUuid(id.get) - - val remoteMessage = requestBuilder.build - - val future = RemoteClient.clientFor(remoteAddress.get).send(remoteMessage, None) + + val future = RemoteClientModule.send[AnyRef]( + message, None, None, remoteAddress.get, + timeout, isOneWay, actorRef, + Some((interfaceClass.getName, methodRtti.getMethod.getName)), + ActorType.TypedActor) if (isOneWay) null // for void methods else { diff --git a/akka-typed-actors/src/main/scala/config/TypedActorConfigurator.scala b/akka-typed-actor/src/main/scala/config/TypedActorConfigurator.scala similarity index 100% rename from akka-typed-actors/src/main/scala/config/TypedActorConfigurator.scala rename to akka-typed-actor/src/main/scala/config/TypedActorConfigurator.scala diff --git a/akka-typed-actors/src/main/scala/config/TypedActorGuiceConfigurator.scala b/akka-typed-actor/src/main/scala/config/TypedActorGuiceConfigurator.scala similarity index 97% rename from akka-typed-actors/src/main/scala/config/TypedActorGuiceConfigurator.scala rename to akka-typed-actor/src/main/scala/config/TypedActorGuiceConfigurator.scala index 718050655c..339c4d297d 100644 --- a/akka-typed-actors/src/main/scala/config/TypedActorGuiceConfigurator.scala +++ b/akka-typed-actor/src/main/scala/config/TypedActorGuiceConfigurator.scala @@ -6,8 +6,8 @@ package se.scalablesolutions.akka.config import se.scalablesolutions.akka.actor._ import se.scalablesolutions.akka.config.ScalaConfig._ -import se.scalablesolutions.akka.remote.RemoteServer -import se.scalablesolutions.akka.util.Logging +import se.scalablesolutions.akka.util._ +import ReflectiveAccess._ import org.codehaus.aspectwerkz.proxy.Proxy @@ -122,7 +122,7 @@ private[akka] class TypedActorGuiceConfigurator extends TypedActorConfiguratorBa remoteAddress.foreach { address => actorRef.makeRemote(remoteAddress.get) - RemoteServer.registerTypedActor(address, implementationClass.getName, proxy) + RemoteServerModule.registerTypedActor(address, implementationClass.getName, proxy) } AspectInitRegistry.register( diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/Bar.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/Bar.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/Bar.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/Bar.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/BarImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/BarImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/BarImpl.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/BarImpl.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/Ext.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/Ext.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/Ext.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/Ext.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/ExtImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/ExtImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/ExtImpl.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/ExtImpl.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/Foo.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/Foo.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/Foo.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/Foo.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/FooImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/FooImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/FooImpl.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/FooImpl.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActor.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActor.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActor.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActor.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/SamplePojo.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SamplePojo.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/SamplePojo.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SamplePojo.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojo.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojo.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojo.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojo.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCaller.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCaller.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCaller.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCaller.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCallerImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCallerImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCallerImpl.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCallerImpl.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoImpl.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoImpl.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActor.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActor.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActor.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActor.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailer.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailer.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailer.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailer.java diff --git a/akka-core/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailerImpl.java b/akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailerImpl.java similarity index 100% rename from akka-core/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailerImpl.java rename to akka-typed-actor/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailerImpl.java diff --git a/akka-typed-actors/src/test/resources/META-INF/aop.xml b/akka-typed-actor/src/test/resources/META-INF/aop.xml similarity index 100% rename from akka-typed-actors/src/test/resources/META-INF/aop.xml rename to akka-typed-actor/src/test/resources/META-INF/aop.xml diff --git a/akka-core/src/test/scala/actor/typed-actor/NestedTransactionalTypedActorSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/NestedTransactionalTypedActorSpec.scala similarity index 100% rename from akka-core/src/test/scala/actor/typed-actor/NestedTransactionalTypedActorSpec.scala rename to akka-typed-actor/src/test/scala/actor/typed-actor/NestedTransactionalTypedActorSpec.scala diff --git a/akka-core/src/test/scala/actor/typed-actor/RestartNestedTransactionalTypedActorSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/RestartNestedTransactionalTypedActorSpec.scala similarity index 100% rename from akka-core/src/test/scala/actor/typed-actor/RestartNestedTransactionalTypedActorSpec.scala rename to akka-typed-actor/src/test/scala/actor/typed-actor/RestartNestedTransactionalTypedActorSpec.scala diff --git a/akka-core/src/test/scala/actor/typed-actor/RestartTransactionalTypedActorSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/RestartTransactionalTypedActorSpec.scala similarity index 100% rename from akka-core/src/test/scala/actor/typed-actor/RestartTransactionalTypedActorSpec.scala rename to akka-typed-actor/src/test/scala/actor/typed-actor/RestartTransactionalTypedActorSpec.scala diff --git a/akka-core/src/test/scala/actor/typed-actor/TransactionalTypedActorSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TransactionalTypedActorSpec.scala similarity index 100% rename from akka-core/src/test/scala/actor/typed-actor/TransactionalTypedActorSpec.scala rename to akka-typed-actor/src/test/scala/actor/typed-actor/TransactionalTypedActorSpec.scala diff --git a/akka-core/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala similarity index 100% rename from akka-core/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala rename to akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala diff --git a/akka-core/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala similarity index 100% rename from akka-core/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala rename to akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala diff --git a/akka-core/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala similarity index 100% rename from akka-core/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala rename to akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala diff --git a/akka-core/src/test/scala/actor/typed-actor/TypedActorSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorSpec.scala similarity index 100% rename from akka-core/src/test/scala/actor/typed-actor/TypedActorSpec.scala rename to akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorSpec.scala diff --git a/akka-core/src/test/scala/actor/typed-actor/TypedActorUtilFunctionsSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorUtilFunctionsSpec.scala similarity index 100% rename from akka-core/src/test/scala/actor/typed-actor/TypedActorUtilFunctionsSpec.scala rename to akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorUtilFunctionsSpec.scala diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/Bar.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/Bar.java deleted file mode 100644 index 906476b789..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/Bar.java +++ /dev/null @@ -1,6 +0,0 @@ -package se.scalablesolutions.akka.actor; - -public interface Bar { - void bar(String msg); - Ext getExt(); -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/BarImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/BarImpl.java deleted file mode 100644 index 9cb41a85cf..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/BarImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import com.google.inject.Inject; -import se.scalablesolutions.akka.actor.*; - -public class BarImpl extends TypedActor implements Bar { - @Inject - private Ext ext; - - public Ext getExt() { - return ext; - } - - public void bar(String msg) { - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/Ext.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/Ext.java deleted file mode 100644 index c37219cf00..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/Ext.java +++ /dev/null @@ -1,6 +0,0 @@ -package se.scalablesolutions.akka.actor; - -public interface Ext { - void ext(); -} - diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/ExtImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/ExtImpl.java deleted file mode 100644 index dd8ca55089..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/ExtImpl.java +++ /dev/null @@ -1,6 +0,0 @@ -package se.scalablesolutions.akka.actor; - -public class ExtImpl implements Ext { - public void ext() { - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/Foo.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/Foo.java deleted file mode 100644 index a64f975bce..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/Foo.java +++ /dev/null @@ -1,14 +0,0 @@ -package se.scalablesolutions.akka.actor; - -public interface Foo { - public Foo body(); - public Bar getBar(); - - public String foo(String msg); - public void bar(String msg); - - public String longRunning(); - public String throwsException(); - - public int $tag() throws java.rmi.RemoteException; -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/FooImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/FooImpl.java deleted file mode 100644 index ded09f4e07..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/FooImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import com.google.inject.Inject; -import se.scalablesolutions.akka.actor.*; - -public class FooImpl extends TypedActor implements Foo { - @Inject - private Bar bar; - - public Foo body() { return this; } - - public Bar getBar() { - return bar; - } - - public String foo(String msg) { - return msg + "return_foo "; - } - - public void bar(String msg) { - bar.bar(msg); - } - - public String longRunning() { - try { - Thread.sleep(1200); - } catch (InterruptedException e) { - } - return "test"; - } - - public String throwsException() { - if (true) throw new RuntimeException("Expected exception; to test fault-tolerance"); - return "test"; - } - - public int $tag() throws java.rmi.RemoteException { - return 0; - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActor.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActor.java deleted file mode 100644 index fbd241763f..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActor.java +++ /dev/null @@ -1,12 +0,0 @@ -package se.scalablesolutions.akka.actor; - -public interface NestedTransactionalTypedActor { - public String getMapState(String key); - public String getVectorState(); - public String getRefState(); - public void setMapState(String key, String msg); - public void setVectorState(String msg); - public void setRefState(String msg); - public void success(String key, String msg); - public String failure(String key, String msg, TypedActorFailer failer); -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java deleted file mode 100644 index 1b95517c22..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/NestedTransactionalTypedActorImpl.java +++ /dev/null @@ -1,59 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import se.scalablesolutions.akka.actor.*; -import se.scalablesolutions.akka.stm.*; - -public class NestedTransactionalTypedActorImpl extends TypedTransactor implements NestedTransactionalTypedActor { - private TransactionalMap mapState; - private TransactionalVector vectorState; - private Ref refState; - private boolean isInitialized = false; - - @Override - public void init() { - if (!isInitialized) { - mapState = new TransactionalMap(); - vectorState = new TransactionalVector(); - refState = new Ref(); - isInitialized = true; - } - } - - public String getMapState(String key) { - return (String) mapState.get(key).get(); - } - - public String getVectorState() { - return (String) vectorState.last(); - } - - public String getRefState() { - return (String) refState.get(); - } - - public void setMapState(String key, String msg) { - mapState.put(key, msg); - } - - public void setVectorState(String msg) { - vectorState.add(msg); - } - - public void setRefState(String msg) { - refState.swap(msg); - } - - public void success(String key, String msg) { - mapState.put(key, msg); - vectorState.add(msg); - refState.swap(msg); - } - - public String failure(String key, String msg, TypedActorFailer failer) { - mapState.put(key, msg); - vectorState.add(msg); - refState.swap(msg); - failer.fail(); - return msg; - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOne.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOne.java deleted file mode 100644 index dd03a45d12..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOne.java +++ /dev/null @@ -1,6 +0,0 @@ -package se.scalablesolutions.akka.actor; - -public interface RemoteTypedActorOne { - public String requestReply(String s) throws Exception; - public void oneWay() throws Exception; -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOneImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOneImpl.java deleted file mode 100644 index 715e5366a4..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorOneImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package se.scalablesolutions.akka.actor.remote; - -import se.scalablesolutions.akka.actor.*; - -import java.util.concurrent.CountDownLatch; - -public class RemoteTypedActorOneImpl extends TypedActor implements RemoteTypedActorOne { - - public static CountDownLatch latch = new CountDownLatch(1); - - public String requestReply(String s) throws Exception { - if (s.equals("ping")) { - RemoteTypedActorLog.messageLog().put("ping"); - return "pong"; - } else if (s.equals("die")) { - throw new RuntimeException("Expected exception; to test fault-tolerance"); - } else return null; - } - - public void oneWay() throws Exception { - RemoteTypedActorLog.oneWayLog().put("oneway"); - } - - @Override - public void preRestart(Throwable e) { - try { RemoteTypedActorLog.messageLog().put(e.getMessage()); } catch(Exception ex) {} - latch.countDown(); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwo.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwo.java deleted file mode 100644 index 5fd289b8c2..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwo.java +++ /dev/null @@ -1,6 +0,0 @@ -package se.scalablesolutions.akka.actor; - -public interface RemoteTypedActorTwo { - public String requestReply(String s) throws Exception; - public void oneWay() throws Exception; -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwoImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwoImpl.java deleted file mode 100644 index a5882fd4e6..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/RemoteTypedActorTwoImpl.java +++ /dev/null @@ -1,29 +0,0 @@ -package se.scalablesolutions.akka.actor.remote; - -import se.scalablesolutions.akka.actor.*; - -import java.util.concurrent.CountDownLatch; - -public class RemoteTypedActorTwoImpl extends TypedActor implements RemoteTypedActorTwo { - - public static CountDownLatch latch = new CountDownLatch(1); - - public String requestReply(String s) throws Exception { - if (s.equals("ping")) { - RemoteTypedActorLog.messageLog().put("ping"); - return "pong"; - } else if (s.equals("die")) { - throw new RuntimeException("Expected exception; to test fault-tolerance"); - } else return null; - } - - public void oneWay() throws Exception { - RemoteTypedActorLog.oneWayLog().put("oneway"); - } - - @Override - public void preRestart(Throwable e) { - try { RemoteTypedActorLog.messageLog().put(e.getMessage()); } catch(Exception ex) {} - latch.countDown(); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SamplePojo.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SamplePojo.java deleted file mode 100644 index 5d06afdc9c..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SamplePojo.java +++ /dev/null @@ -1,8 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import java.util.concurrent.CountDownLatch; - -public interface SamplePojo { - public String greet(String s); - public String fail(); -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java deleted file mode 100644 index 12985c72ce..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SamplePojoImpl.java +++ /dev/null @@ -1,45 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import se.scalablesolutions.akka.actor.*; - -import java.util.concurrent.CountDownLatch; - -public class SamplePojoImpl extends TypedActor implements SamplePojo { - - public static CountDownLatch latch = new CountDownLatch(1); - - public static boolean _pre = false; - public static boolean _post = false; - public static boolean _down = false; - public static void reset() { - _pre = false; - _post = false; - _down = false; - } - - public String greet(String s) { - return "hello " + s; - } - - public String fail() { - throw new RuntimeException("expected"); - } - - @Override - public void preRestart(Throwable e) { - _pre = true; - latch.countDown(); - } - - @Override - public void postRestart(Throwable e) { - _post = true; - latch.countDown(); - } - - @Override - public void shutdown() { - _down = true; - latch.countDown(); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojo.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojo.java deleted file mode 100644 index d3a18abbd9..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojo.java +++ /dev/null @@ -1,14 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import se.scalablesolutions.akka.dispatch.Future; -import se.scalablesolutions.akka.dispatch.CompletableFuture; -import se.scalablesolutions.akka.dispatch.Future; - -public interface SimpleJavaPojo { - public Object getSender(); - public Object getSenderFuture(); - public Future square(int value); - public void setName(String name); - public String getName(); - public void throwException(); -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCaller.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCaller.java deleted file mode 100644 index e35702846f..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCaller.java +++ /dev/null @@ -1,9 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import se.scalablesolutions.akka.dispatch.CompletableFuture; - -public interface SimpleJavaPojoCaller { - public void setPojo(SimpleJavaPojo pojo); - public Object getSenderFromSimpleJavaPojo(); - public Object getSenderFutureFromSimpleJavaPojo(); -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCallerImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCallerImpl.java deleted file mode 100644 index 760b69f8b9..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoCallerImpl.java +++ /dev/null @@ -1,26 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import se.scalablesolutions.akka.actor.*; -import se.scalablesolutions.akka.dispatch.Future; - -public class SimpleJavaPojoCallerImpl extends TypedActor implements SimpleJavaPojoCaller { - - SimpleJavaPojo pojo; - - public void setPojo(SimpleJavaPojo pojo) { - this.pojo = pojo; - } - - public Object getSenderFromSimpleJavaPojo() { - Object sender = pojo.getSender(); - return sender; - } - - public Object getSenderFutureFromSimpleJavaPojo() { - return pojo.getSenderFuture(); - } - - public Future square(int value) { - return future(value * value); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoImpl.java deleted file mode 100644 index c02d266ce8..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/SimpleJavaPojoImpl.java +++ /dev/null @@ -1,53 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import se.scalablesolutions.akka.actor.*; -import se.scalablesolutions.akka.dispatch.Future; -import se.scalablesolutions.akka.dispatch.CompletableFuture; - -public class SimpleJavaPojoImpl extends TypedActor implements SimpleJavaPojo { - - public static boolean _pre = false; - public static boolean _post = false; - public static boolean _down = false; - public static void reset() { - _pre = false; - _post = false; - _down = false; - } - - private String name; - - public Future square(int value) { - return future(value * value); - } - - public Object getSender() { - return getContext().getSender(); - } - - public CompletableFuture getSenderFuture() { - return getContext().getSenderFuture().get(); - } - - public void setName(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - @Override - public void preRestart(Throwable e) { - _pre = true; - } - - @Override - public void postRestart(Throwable e) { - _post = true; - } - - public void throwException() { - throw new RuntimeException(); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActor.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActor.java deleted file mode 100644 index 6e7c43745b..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActor.java +++ /dev/null @@ -1,14 +0,0 @@ -package se.scalablesolutions.akka.actor; - -public interface TransactionalTypedActor { - public String getMapState(String key); - public String getVectorState(); - public String getRefState(); - public void setMapState(String key, String msg); - public void setVectorState(String msg); - public void setRefState(String msg); - public void success(String key, String msg); - public void success(String key, String msg, NestedTransactionalTypedActor nested); - public String failure(String key, String msg, TypedActorFailer failer); - public String failure(String key, String msg, NestedTransactionalTypedActor nested, TypedActorFailer failer); -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java deleted file mode 100644 index 9b32f5d329..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TransactionalTypedActorImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import se.scalablesolutions.akka.actor.*; -import se.scalablesolutions.akka.stm.*; - -public class TransactionalTypedActorImpl extends TypedTransactor implements TransactionalTypedActor { - private TransactionalMap mapState; - private TransactionalVector vectorState; - private Ref refState; - private boolean isInitialized = false; - - @Override - public void initTransactionalState() { - if (!isInitialized) { - mapState = new TransactionalMap(); - vectorState = new TransactionalVector(); - refState = new Ref(); - isInitialized = true; - } - } - - public String getMapState(String key) { - return (String)mapState.get(key).get(); - } - - public String getVectorState() { - return (String)vectorState.last(); - } - - public String getRefState() { - return (String)refState.get(); - } - - public void setMapState(String key, String msg) { - mapState.put(key, msg); - } - - public void setVectorState(String msg) { - vectorState.add(msg); - } - - public void setRefState(String msg) { - refState.swap(msg); - } - - public void success(String key, String msg) { - mapState.put(key, msg); - vectorState.add(msg); - refState.swap(msg); - } - - public void success(String key, String msg, NestedTransactionalTypedActor nested) { - mapState.put(key, msg); - vectorState.add(msg); - refState.swap(msg); - nested.success(key, msg); - } - - public String failure(String key, String msg, TypedActorFailer failer) { - mapState.put(key, msg); - vectorState.add(msg); - refState.swap(msg); - failer.fail(); - return msg; - } - - public String failure(String key, String msg, NestedTransactionalTypedActor nested, TypedActorFailer failer) { - mapState.put(key, msg); - vectorState.add(msg); - refState.swap(msg); - nested.failure(key, msg, failer); - return msg; - } - - @Override - public void preRestart(Throwable e) { - System.out.println("################ PRE RESTART"); - } - - @Override - public void postRestart(Throwable e) { - System.out.println("################ POST RESTART"); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailer.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailer.java deleted file mode 100644 index e0b1e72c33..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailer.java +++ /dev/null @@ -1,5 +0,0 @@ -package se.scalablesolutions.akka.actor; - -public interface TypedActorFailer extends java.io.Serializable { - public int fail(); -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailerImpl.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailerImpl.java deleted file mode 100644 index 89a97330df..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/actor/TypedActorFailerImpl.java +++ /dev/null @@ -1,9 +0,0 @@ -package se.scalablesolutions.akka.actor; - -import se.scalablesolutions.akka.actor.*; - -public class TypedActorFailerImpl extends TypedActor implements TypedActorFailer { - public int fail() { - throw new RuntimeException("expected"); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/Address.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/Address.java deleted file mode 100644 index cb3057929f..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/Address.java +++ /dev/null @@ -1,13 +0,0 @@ -package se.scalablesolutions.akka.stm; - -public class Address { - private String location; - - public Address(String location) { - this.location = location; - } - - @Override public String toString() { - return "Address(" + location + ")"; - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/CounterExample.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/CounterExample.java deleted file mode 100644 index 57a9a07daa..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/CounterExample.java +++ /dev/null @@ -1,26 +0,0 @@ -package se.scalablesolutions.akka.stm; - -import se.scalablesolutions.akka.stm.Ref; -import se.scalablesolutions.akka.stm.local.Atomic; - -public class CounterExample { - final static Ref ref = new Ref(0); - - public static int counter() { - return new Atomic() { - public Integer atomically() { - int inc = ref.get() + 1; - ref.set(inc); - return inc; - } - }.execute(); - } - - public static void main(String[] args) { - System.out.println(); - System.out.println("Counter example"); - System.out.println(); - System.out.println("counter 1: " + counter()); - System.out.println("counter 2: " + counter()); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/JavaStmTests.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/JavaStmTests.java deleted file mode 100644 index 7204013808..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/JavaStmTests.java +++ /dev/null @@ -1,91 +0,0 @@ -package se.scalablesolutions.akka.stm; - -import static org.junit.Assert.*; -import org.junit.Test; -import org.junit.Before; - -import se.scalablesolutions.akka.stm.*; -import se.scalablesolutions.akka.stm.local.Atomic; - -import org.multiverse.api.ThreadLocalTransaction; -import org.multiverse.api.TransactionConfiguration; -import org.multiverse.api.exceptions.ReadonlyException; - -public class JavaStmTests { - - private Ref ref; - - private int getRefValue() { - return new Atomic() { - public Integer atomically() { - return ref.get(); - } - }.execute(); - } - - public int increment() { - return new Atomic() { - public Integer atomically() { - int inc = ref.get() + 1; - ref.set(inc); - return inc; - } - }.execute(); - } - - @Before public void initialise() { - ref = new Ref(0); - } - - @Test public void incrementRef() { - assertEquals(0, getRefValue()); - increment(); - increment(); - increment(); - assertEquals(3, getRefValue()); - } - - @Test public void failSetRef() { - assertEquals(0, getRefValue()); - try { - new Atomic() { - public Object atomically() { - ref.set(3); - throw new RuntimeException(); - } - }.execute(); - } catch(RuntimeException e) {} - assertEquals(0, getRefValue()); - } - - @Test public void configureTransaction() { - TransactionFactory txFactory = new TransactionFactoryBuilder() - .setFamilyName("example") - .setReadonly(true) - .build(); - - // get transaction config from multiverse - TransactionConfiguration config = new Atomic(txFactory) { - public TransactionConfiguration atomically() { - ref.get(); - return ThreadLocalTransaction.getThreadLocalTransaction().getConfiguration(); - } - }.execute(); - - assertEquals("example", config.getFamilyName()); - assertEquals(true, config.isReadonly()); - } - - @Test(expected=ReadonlyException.class) public void failReadonlyTransaction() { - TransactionFactory txFactory = new TransactionFactoryBuilder() - .setFamilyName("example") - .setReadonly(true) - .build(); - - new Atomic(txFactory) { - public Object atomically() { - return ref.set(3); - } - }.execute(); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/RefExample.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/RefExample.java deleted file mode 100644 index f590524fd7..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/RefExample.java +++ /dev/null @@ -1,36 +0,0 @@ -package se.scalablesolutions.akka.stm; - -import se.scalablesolutions.akka.stm.Ref; -import se.scalablesolutions.akka.stm.local.Atomic; - -public class RefExample { - public static void main(String[] args) { - System.out.println(); - System.out.println("Ref example"); - System.out.println(); - - final Ref ref = new Ref(0); - - Integer value1 = new Atomic() { - public Integer atomically() { - return ref.get(); - } - }.execute(); - - System.out.println("value 1: " + value1); - - new Atomic() { - public Object atomically() { - return ref.set(5); - } - }.execute(); - - Integer value2 = new Atomic() { - public Integer atomically() { - return ref.get(); - } - }.execute(); - - System.out.println("value 2: " + value2); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/StmExamples.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/StmExamples.java deleted file mode 100644 index a8526f2dd0..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/StmExamples.java +++ /dev/null @@ -1,18 +0,0 @@ -package se.scalablesolutions.akka.stm; - -import se.scalablesolutions.akka.stm.Ref; -import se.scalablesolutions.akka.stm.local.Atomic; - -public class StmExamples { - public static void main(String[] args) { - System.out.println(); - System.out.println("STM examples"); - System.out.println(); - - CounterExample.main(args); - RefExample.main(args); - TransactionFactoryExample.main(args); - TransactionalMapExample.main(args); - TransactionalVectorExample.main(args); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/TransactionFactoryExample.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/TransactionFactoryExample.java deleted file mode 100644 index 00dd87b7c5..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/TransactionFactoryExample.java +++ /dev/null @@ -1,30 +0,0 @@ -package se.scalablesolutions.akka.stm; - -import se.scalablesolutions.akka.stm.*; -import se.scalablesolutions.akka.stm.local.Atomic; - -import org.multiverse.api.ThreadLocalTransaction; -import org.multiverse.api.TransactionConfiguration; - -public class TransactionFactoryExample { - public static void main(String[] args) { - System.out.println(); - System.out.println("TransactionFactory example"); - System.out.println(); - - TransactionFactory txFactory = new TransactionFactoryBuilder() - .setFamilyName("example") - .setReadonly(true) - .build(); - - new Atomic(txFactory) { - public Object atomically() { - // check config has been passed to multiverse - TransactionConfiguration config = ThreadLocalTransaction.getThreadLocalTransaction().getConfiguration(); - System.out.println("family name: " + config.getFamilyName()); - System.out.println("readonly: " + config.isReadonly()); - return null; - } - }.execute(); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/TransactionalMapExample.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/TransactionalMapExample.java deleted file mode 100644 index 7c4940c7a5..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/TransactionalMapExample.java +++ /dev/null @@ -1,35 +0,0 @@ -package se.scalablesolutions.akka.stm; - -import se.scalablesolutions.akka.stm.*; -import se.scalablesolutions.akka.stm.local.Atomic; - -public class TransactionalMapExample { - public static void main(String[] args) { - System.out.println(); - System.out.println("TransactionalMap example"); - System.out.println(); - - final TransactionalMap users = new TransactionalMap(); - - // fill users map (in a transaction) - new Atomic() { - public Object atomically() { - users.put("bill", new User("bill")); - users.put("mary", new User("mary")); - users.put("john", new User("john")); - return null; - } - }.execute(); - - System.out.println("users: " + users); - - // access users map (in a transaction) - User user = new Atomic() { - public User atomically() { - return users.get("bill").get(); - } - }.execute(); - - System.out.println("user: " + user); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/TransactionalVectorExample.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/TransactionalVectorExample.java deleted file mode 100644 index 7274848beb..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/TransactionalVectorExample.java +++ /dev/null @@ -1,34 +0,0 @@ -package se.scalablesolutions.akka.stm; - -import se.scalablesolutions.akka.stm.*; -import se.scalablesolutions.akka.stm.local.Atomic; - -public class TransactionalVectorExample { - public static void main(String[] args) { - System.out.println(); - System.out.println("TransactionalVector example"); - System.out.println(); - - final TransactionalVector
addresses = new TransactionalVector
(); - - // fill addresses vector (in a transaction) - new Atomic() { - public Object atomically() { - addresses.add(new Address("somewhere")); - addresses.add(new Address("somewhere else")); - return null; - } - }.execute(); - - System.out.println("addresses: " + addresses); - - // access addresses vector (in a transaction) - Address address = new Atomic
() { - public Address atomically() { - return addresses.get(0); - } - }.execute(); - - System.out.println("address: " + address); - } -} diff --git a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/User.java b/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/User.java deleted file mode 100644 index c9dc4b3723..0000000000 --- a/akka-typed-actors/src/test/java/se/scalablesolutions/akka/stm/User.java +++ /dev/null @@ -1,13 +0,0 @@ -package se.scalablesolutions.akka.stm; - -public class User { - private String name; - - public User(String name) { - this.name = name; - } - - @Override public String toString() { - return "User(" + name + ")"; - } -} diff --git a/akka-typed-actors/src/test/scala/actor/typed-actor/NestedTransactionalTypedActorSpec.scala b/akka-typed-actors/src/test/scala/actor/typed-actor/NestedTransactionalTypedActorSpec.scala deleted file mode 100644 index 7338e8df41..0000000000 --- a/akka-typed-actors/src/test/scala/actor/typed-actor/NestedTransactionalTypedActorSpec.scala +++ /dev/null @@ -1,102 +0,0 @@ - /** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import org.scalatest.Spec -import org.scalatest.Assertions -import org.scalatest.matchers.ShouldMatchers -import org.scalatest.BeforeAndAfterAll -import org.scalatest.junit.JUnitRunner -import org.junit.runner.RunWith - -import se.scalablesolutions.akka.actor._ - -@RunWith(classOf[JUnitRunner]) -class NestedTransactionalTypedActorSpec extends - Spec with - ShouldMatchers with - BeforeAndAfterAll { - - private var messageLog = "" - - override def afterAll { - // ActorRegistry.shutdownAll - } - - describe("Declaratively nested supervised transactional in-memory TypedActor") { - - it("map should not rollback state for stateful server in case of success") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - stateful.setMapState("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "init") // set init state - val nested = TypedActor.newInstance(classOf[NestedTransactionalTypedActor], classOf[NestedTransactionalTypedActorImpl]) - nested.setMapState("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "init") // set init state - stateful.success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state", nested) // transactionrequired - stateful.getMapState("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess") should equal("new state") - nested.getMapState("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess") should equal("new state") - } - - it("map should rollback state for stateful server in case of failure") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - stateful.setMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure", "init") // set init state - val nested = TypedActor.newInstance(classOf[NestedTransactionalTypedActor], classOf[NestedTransactionalTypedActorImpl]) - nested.setMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure", "init") // set init state - val failer = TypedActor.newInstance(classOf[TypedActorFailer], classOf[TypedActorFailerImpl]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", nested, failer) - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure") should equal("init") - nested.getMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure") should equal("init") - } - - it("vector should not rollback state for stateful server in case of success") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - stateful.setVectorState("init") // set init state - val nested = TypedActor.newInstance(classOf[NestedTransactionalTypedActor], classOf[NestedTransactionalTypedActorImpl]) - nested.setVectorState("init") // set init state - stateful.success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state", nested) // transactionrequired - stateful.getVectorState should equal("new state") - nested.getVectorState should equal("new state") - } - - it("vector should rollback state for stateful server in case of failure") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - stateful.setVectorState("init") // set init state - val nested = TypedActor.newInstance(classOf[NestedTransactionalTypedActor], classOf[NestedTransactionalTypedActorImpl]) - nested.setVectorState("init") // set init state - val failer = TypedActor.newInstance(classOf[TypedActorFailer], classOf[TypedActorFailerImpl]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", nested, failer) - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getVectorState should equal("init") - nested.getVectorState should equal("init") - } - - it("ref should not rollback state for stateful server in case of success") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - val nested = TypedActor.newInstance(classOf[NestedTransactionalTypedActor], classOf[NestedTransactionalTypedActorImpl]) - stateful.setRefState("init") // set init state - nested.setRefState("init") // set init state - stateful.success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state", nested) - stateful.getRefState should equal("new state") - nested.getRefState should equal("new state") - } - - it("ref should rollback state for stateful server in case of failure") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - val nested = TypedActor.newInstance(classOf[NestedTransactionalTypedActor], classOf[NestedTransactionalTypedActorImpl]) - stateful.setRefState("init") // set init state - nested.setRefState("init") // set init state - val failer = TypedActor.newInstance(classOf[TypedActorFailer], classOf[TypedActorFailerImpl]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", nested, failer) - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getRefState should equal("init") - nested.getRefState should equal("init") - } - } -} diff --git a/akka-typed-actors/src/test/scala/actor/typed-actor/RestartNestedTransactionalTypedActorSpec.scala b/akka-typed-actors/src/test/scala/actor/typed-actor/RestartNestedTransactionalTypedActorSpec.scala deleted file mode 100644 index 1769a5c47b..0000000000 --- a/akka-typed-actors/src/test/scala/actor/typed-actor/RestartNestedTransactionalTypedActorSpec.scala +++ /dev/null @@ -1,118 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import org.scalatest.Spec -import org.scalatest.Assertions -import org.scalatest.matchers.ShouldMatchers -import org.scalatest.BeforeAndAfterAll -import org.scalatest.junit.JUnitRunner -import org.junit.runner.RunWith - -import se.scalablesolutions.akka.config.Config -import se.scalablesolutions.akka.config._ -import se.scalablesolutions.akka.config.TypedActorConfigurator -import se.scalablesolutions.akka.config.JavaConfig._ -import se.scalablesolutions.akka.actor._ - -@RunWith(classOf[JUnitRunner]) -class RestartNestedTransactionalTypedActorSpec extends - Spec with - ShouldMatchers with - BeforeAndAfterAll { - - private val conf = new TypedActorConfigurator - private var messageLog = "" - - override def beforeAll { - /* - Config.config - conf.configure( - new RestartStrategy(new AllForOne, 3, 5000, List(classOf[Exception]).toArray), - List( - new Component(classOf[TransactionalTypedActor], - new LifeCycle(new Permanent), - 10000), - new Component(classOf[NestedTransactionalTypedActor], - new LifeCycle(new Permanent), - 10000), - new Component(classOf[TypedActorFailer], - new LifeCycle(new Permanent), - 10000) - ).toArray).supervise - */ - } - - override def afterAll { - /* - conf.stop - ActorRegistry.shutdownAll - */ - } - - describe("Restart nested supervised transactional Typed Actor") { -/* - it("map should rollback state for stateful server in case of failure") { - val stateful = conf.getInstance(classOf[TransactionalTypedActor]) - stateful.init - stateful.setMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure", "init") // set init state - - val nested = conf.getInstance(classOf[NestedTransactionalTypedActor]) - nested.init - nested.setMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure", "init") // set init state - - val failer = conf.getInstance(classOf[TypedActorFailer]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", nested, failer) - - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure") should equal("init") - - nested.getMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure") should equal("init") - } - - it("vector should rollback state for stateful server in case of failure") { - val stateful = conf.getInstance(classOf[TransactionalTypedActor]) - stateful.init - stateful.setVectorState("init") // set init state - - val nested = conf.getInstance(classOf[NestedTransactionalTypedActor]) - nested.init - nested.setVectorState("init") // set init state - - val failer = conf.getInstance(classOf[TypedActorFailer]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", nested, failer) - - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getVectorState should equal("init") - - nested.getVectorState should equal("init") - } - - it("ref should rollback state for stateful server in case of failure") { - val stateful = conf.getInstance(classOf[TransactionalTypedActor]) - stateful.init - val nested = conf.getInstance(classOf[NestedTransactionalTypedActor]) - nested.init - stateful.setRefState("init") // set init state - - nested.setRefState("init") // set init state - - val failer = conf.getInstance(classOf[TypedActorFailer]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", nested, failer) - - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getRefState should equal("init") - - nested.getRefState should equal("init") - } - */ - } -} diff --git a/akka-typed-actors/src/test/scala/actor/typed-actor/RestartTransactionalTypedActorSpec.scala b/akka-typed-actors/src/test/scala/actor/typed-actor/RestartTransactionalTypedActorSpec.scala deleted file mode 100644 index 56b1e6ec5b..0000000000 --- a/akka-typed-actors/src/test/scala/actor/typed-actor/RestartTransactionalTypedActorSpec.scala +++ /dev/null @@ -1,92 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import org.scalatest.Spec -import org.scalatest.Assertions -import org.scalatest.matchers.ShouldMatchers -import org.scalatest.BeforeAndAfterAll -import org.scalatest.junit.JUnitRunner -import org.junit.runner.RunWith - -import se.scalablesolutions.akka.config.Config -import se.scalablesolutions.akka.config._ -import se.scalablesolutions.akka.config.TypedActorConfigurator -import se.scalablesolutions.akka.config.JavaConfig._ -import se.scalablesolutions.akka.actor._ - -@RunWith(classOf[JUnitRunner]) -class RestartTransactionalTypedActorSpec extends - Spec with - ShouldMatchers with - BeforeAndAfterAll { - - private val conf = new TypedActorConfigurator - private var messageLog = "" - - def before { - Config.config - conf.configure( - new RestartStrategy(new AllForOne, 3, 5000, List(classOf[Exception]).toArray), - List( - new Component( - classOf[TransactionalTypedActor], - new LifeCycle(new Temporary), - 10000), - new Component( - classOf[TypedActorFailer], - new LifeCycle(new Temporary), - 10000) - ).toArray).supervise - } - - def after { - conf.stop - ActorRegistry.shutdownAll - } - - describe("Restart supervised transactional Typed Actor ") { -/* - it("map should rollback state for stateful server in case of failure") { - before - val stateful = conf.getInstance(classOf[TransactionalTypedActor]) - stateful.init - stateful.setMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure", "init") - val failer = conf.getInstance(classOf[TypedActorFailer]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure") should equal("init") - after - } - - it("vector should rollback state for stateful server in case of failure") { - before - val stateful = conf.getInstance(classOf[TransactionalTypedActor]) - stateful.init - stateful.setVectorState("init") // set init state - val failer = conf.getInstance(classOf[TypedActorFailer]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getVectorState should equal("init") - after - } - - it("ref should rollback state for stateful server in case of failure") { - val stateful = conf.getInstance(classOf[TransactionalTypedActor]) - stateful.init - stateful.setRefState("init") // set init state - val failer = conf.getInstance(classOf[TypedActorFailer]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getRefState should equal("init") - } -*/ } -} diff --git a/akka-typed-actors/src/test/scala/actor/typed-actor/TransactionalTypedActorSpec.scala b/akka-typed-actors/src/test/scala/actor/typed-actor/TransactionalTypedActorSpec.scala deleted file mode 100644 index b55f52c875..0000000000 --- a/akka-typed-actors/src/test/scala/actor/typed-actor/TransactionalTypedActorSpec.scala +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import org.scalatest.Spec -import org.scalatest.Assertions -import org.scalatest.matchers.ShouldMatchers -import org.scalatest.BeforeAndAfterAll -import org.scalatest.junit.JUnitRunner -import org.junit.runner.RunWith - -import se.scalablesolutions.akka.actor._ - -@RunWith(classOf[JUnitRunner]) -class TransactionalTypedActorSpec extends - Spec with - ShouldMatchers with - BeforeAndAfterAll { - - private var messageLog = "" - - override def afterAll { -// ActorRegistry.shutdownAll - } - - describe("Declaratively supervised transactional in-memory Typed Actor ") { - it("map should not rollback state for stateful server in case of success") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - stateful.setMapState("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "init") - stateful.success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state") - stateful.getMapState("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess") should equal("new state") - } - - it("map should rollback state for stateful server in case of failure") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - stateful.setMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure", "init") - val failer = TypedActor.newInstance(classOf[TypedActorFailer], classOf[TypedActorFailerImpl]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getMapState("testShouldRollbackStateForStatefulServerInCaseOfFailure") should equal("init") - } - - it("vector should not rollback state for stateful server in case of success") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - stateful.setVectorState("init") // set init state - stateful.success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state") - stateful.getVectorState should equal("new state") - } - - it("vector should rollback state for stateful server in case of failure") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - stateful.setVectorState("init") // set init state - val failer = TypedActor.newInstance(classOf[TypedActorFailer], classOf[TypedActorFailerImpl]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getVectorState should equal("init") - } - - it("ref should not rollback state for stateful server in case of success") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - stateful.setRefState("init") // set init state - stateful.success("testShouldNotRollbackStateForStatefulServerInCaseOfSuccess", "new state") - stateful.getRefState should equal("new state") - } - - it("ref should rollback state for stateful server in case of failure") { - val stateful = TypedActor.newInstance(classOf[TransactionalTypedActor], classOf[TransactionalTypedActorImpl]) - stateful.setRefState("init") // set init state - val failer = TypedActor.newInstance(classOf[TypedActorFailer], classOf[TypedActorFailerImpl]) - try { - stateful.failure("testShouldRollbackStateForStatefulServerInCaseOfFailure", "new state", failer) - fail("should have thrown an exception") - } catch { case e => {} } - stateful.getRefState should equal("init") - } - } -} diff --git a/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala b/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala deleted file mode 100644 index adc0879c84..0000000000 --- a/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import org.scalatest.Spec -import org.scalatest.Assertions -import org.scalatest.matchers.ShouldMatchers -import org.scalatest.BeforeAndAfterAll -import org.scalatest.junit.JUnitRunner -import org.junit.runner.RunWith - -import se.scalablesolutions.akka.dispatch.DefaultCompletableFuture; - -@RunWith(classOf[JUnitRunner]) -class TypedActorContextSpec extends - Spec with - ShouldMatchers with - BeforeAndAfterAll { - - describe("TypedActorContext") { - it("context.sender should return the sender TypedActor reference") { - val pojo = TypedActor.newInstance(classOf[SimpleJavaPojo], classOf[SimpleJavaPojoImpl]) - val pojoCaller = TypedActor.newInstance(classOf[SimpleJavaPojoCaller], classOf[SimpleJavaPojoCallerImpl]) - pojoCaller.setPojo(pojo) - pojoCaller.getSenderFromSimpleJavaPojo.isInstanceOf[Option[_]] should equal (true) - pojoCaller.getSenderFromSimpleJavaPojo.asInstanceOf[Option[_]].isDefined should equal (true) - pojoCaller.getSenderFromSimpleJavaPojo.asInstanceOf[Option[_]].get should equal (pojoCaller) - } - it("context.senderFuture should return the senderFuture TypedActor reference") { - val pojo = TypedActor.newInstance(classOf[SimpleJavaPojo], classOf[SimpleJavaPojoImpl]) - val pojoCaller = TypedActor.newInstance(classOf[SimpleJavaPojoCaller], classOf[SimpleJavaPojoCallerImpl]) - pojoCaller.setPojo(pojo) - pojoCaller.getSenderFutureFromSimpleJavaPojo.getClass.getName should equal (classOf[DefaultCompletableFuture[_]].getName) - } - } -} diff --git a/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala b/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala deleted file mode 100644 index d076ec52cf..0000000000 --- a/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala +++ /dev/null @@ -1,131 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import com.google.inject.AbstractModule -import com.google.inject.Scopes - -import org.scalatest.Spec -import org.scalatest.Assertions -import org.scalatest.matchers.ShouldMatchers -import org.scalatest.BeforeAndAfterAll -import org.scalatest.junit.JUnitRunner -import org.junit.runner.RunWith - -import se.scalablesolutions.akka.config.Config -import se.scalablesolutions.akka.config.TypedActorConfigurator -import se.scalablesolutions.akka.config.JavaConfig._ -import se.scalablesolutions.akka.dispatch._ -import se.scalablesolutions.akka.dispatch.FutureTimeoutException - -@RunWith(classOf[JUnitRunner]) -class TypedActorGuiceConfiguratorSpec extends - Spec with - ShouldMatchers with - BeforeAndAfterAll { - - private val conf = new TypedActorConfigurator - private var messageLog = "" - - override def beforeAll { - Config.config - val dispatcher = Dispatchers.newExecutorBasedEventDrivenDispatcher("test") - - conf.addExternalGuiceModule(new AbstractModule { - def configure = bind(classOf[Ext]).to(classOf[ExtImpl]).in(Scopes.SINGLETON) - }).configure( - new RestartStrategy(new AllForOne, 3, 5000, List(classOf[Exception]).toArray), - List( - new Component( - classOf[Foo], - classOf[FooImpl], - new LifeCycle(new Permanent), - 1000, - dispatcher), - new Component( - classOf[Bar], - classOf[BarImpl], - new LifeCycle(new Permanent), - 1000, - dispatcher) - ).toArray).inject.supervise - - } - - override def afterAll = conf.stop - - describe("TypedActorGuiceConfigurator") { -/* - it("should inject typed actor using guice") { - messageLog = "" - val foo = conf.getInstance(classOf[Foo]) - val bar = conf.getInstance(classOf[Bar]) - bar should equal(foo.getBar) - } - - it("should inject external dependency using guice") { - messageLog = "" - val bar = conf.getInstance(classOf[Bar]) - val ext = conf.getExternalDependency(classOf[Ext]) - ext.toString should equal(bar.getExt.toString) - } - - it("should lookup non-supervised instance") { - try { - val str = conf.getInstance(classOf[String]) - fail("exception should have been thrown") - } catch { - case e: Exception => - classOf[IllegalStateException] should equal(e.getClass) - } - } - - it("should be able to invoke typed actor") { - messageLog = "" - val foo = conf.getInstance(classOf[Foo]) - messageLog += foo.foo("foo ") - foo.bar("bar ") - messageLog += "before_bar " - Thread.sleep(500) - messageLog should equal("foo return_foo before_bar ") - } - - it("should be able to invoke typed actor's invocation") { - messageLog = "" - val foo = conf.getInstance(classOf[Foo]) - val bar = conf.getInstance(classOf[Bar]) - messageLog += foo.foo("foo ") - foo.bar("bar ") - messageLog += "before_bar " - Thread.sleep(500) - messageLog should equal("foo return_foo before_bar ") - } - - it("should throw FutureTimeoutException on time-out") { - messageLog = "" - val foo = conf.getInstance(classOf[Foo]) - try { - foo.longRunning - fail("exception should have been thrown") - } catch { - case e: FutureTimeoutException => - classOf[FutureTimeoutException] should equal(e.getClass) - } - } - - it("should propagate exception") { - messageLog = "" - val foo = conf.getInstance(classOf[Foo]) - try { - foo.throwsException - fail("exception should have been thrown") - } catch { - case e: RuntimeException => - classOf[RuntimeException] should equal(e.getClass) - } - } - */ - } -} diff --git a/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala b/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala deleted file mode 100644 index 10fc40493b..0000000000 --- a/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorLifecycleSpec.scala +++ /dev/null @@ -1,169 +0,0 @@ -package se.scalablesolutions.akka.actor - -import org.junit.runner.RunWith -import org.scalatest.{BeforeAndAfterAll, Spec} -import org.scalatest.junit.JUnitRunner -import org.scalatest.matchers.ShouldMatchers - -import se.scalablesolutions.akka.actor.TypedActor._ - -import se.scalablesolutions.akka.config.{OneForOneStrategy, TypedActorConfigurator} -import se.scalablesolutions.akka.config.JavaConfig._ - -import java.util.concurrent.CountDownLatch - -/** - * @author Martin Krasser - */ -@RunWith(classOf[JUnitRunner]) -class TypedActorLifecycleSpec extends Spec with ShouldMatchers with BeforeAndAfterAll { - var conf1: TypedActorConfigurator = _ - var conf2: TypedActorConfigurator = _ - - override protected def beforeAll() = { - val strategy = new RestartStrategy(new AllForOne(), 3, 1000, Array(classOf[Exception])) - val comp3 = new Component(classOf[SamplePojo], classOf[SamplePojoImpl], new LifeCycle(new Permanent()), 1000) - val comp4 = new Component(classOf[SamplePojo], classOf[SamplePojoImpl], new LifeCycle(new Temporary()), 1000) - conf1 = new TypedActorConfigurator().configure(strategy, Array(comp3)).supervise - conf2 = new TypedActorConfigurator().configure(strategy, Array(comp4)).supervise - } - - override protected def afterAll() = { - conf1.stop - conf2.stop - } - - describe("TypedActor lifecycle management") { - it("should restart supervised, non-annotated typed actor on failure") { - SamplePojoImpl.reset - val obj = conf1.getInstance[SamplePojo](classOf[SamplePojo]) - val cdl = new CountDownLatch(2) - SamplePojoImpl.latch = cdl - assert(AspectInitRegistry.initFor(obj) ne null) - try { - obj.fail - fail("expected exception not thrown") - } catch { - case e: RuntimeException => { - cdl.await - assert(SamplePojoImpl._pre) - assert(SamplePojoImpl._post) - assert(!SamplePojoImpl._down) -// assert(AspectInitRegistry.initFor(obj) ne null) - } - } - } - - it("should shutdown supervised, non-annotated typed actor on failure") { - SamplePojoImpl.reset - val obj = conf2.getInstance[SamplePojo](classOf[SamplePojo]) - val cdl = new CountDownLatch(1) - SamplePojoImpl.latch = cdl - assert(AspectInitRegistry.initFor(obj) ne null) - try { - obj.fail - fail("expected exception not thrown") - } catch { - case e: RuntimeException => { - cdl.await - assert(!SamplePojoImpl._pre) - assert(!SamplePojoImpl._post) - assert(SamplePojoImpl._down) - // assert(AspectInitRegistry.initFor(obj) eq null) - } - } - } - - it("should shutdown non-supervised, non-initialized typed actor on TypedActor.stop") { - SamplePojoImpl.reset - val obj = TypedActor.newInstance(classOf[SamplePojo], classOf[SamplePojoImpl]) - TypedActor.stop(obj) - assert(!SamplePojoImpl._pre) - assert(!SamplePojoImpl._post) - assert(SamplePojoImpl._down) - } - - it("both preRestart and postRestart methods should be invoked when an actor is restarted") { - SamplePojoImpl.reset - val pojo = TypedActor.newInstance(classOf[SimpleJavaPojo], classOf[SimpleJavaPojoImpl]) - val supervisor = TypedActor.newInstance(classOf[SimpleJavaPojo], classOf[SimpleJavaPojoImpl]) - link(supervisor, pojo, new OneForOneStrategy(3, 2000), Array(classOf[Throwable])) - pojo.throwException - Thread.sleep(500) - SimpleJavaPojoImpl._pre should be(true) - SimpleJavaPojoImpl._post should be(true) - } - - /* - it("should shutdown non-supervised, annotated typed actor on TypedActor.stop") { - val obj = TypedActor.newInstance(classOf[SamplePojoAnnotated]) - assert(AspectInitRegistry.initFor(obj) ne null) - assert("hello akka" === obj.greet("akka")) - TypedActor.stop(obj) - assert(AspectInitRegistry.initFor(obj) eq null) - assert(!obj.pre) - assert(!obj.post) - assert(obj.down) - try { - obj.greet("akka") - fail("access to stopped typed actor") - } catch { - case e: Exception => {} - } - } - - it("should shutdown non-supervised, annotated typed actor on ActorRegistry.shutdownAll") { - val obj = TypedActor.newInstance(classOf[SamplePojoAnnotated]) - assert(AspectInitRegistry.initFor(obj) ne null) - assert("hello akka" === obj.greet("akka")) - ActorRegistry.shutdownAll - assert(AspectInitRegistry.initFor(obj) eq null) - assert(!obj.pre) - assert(!obj.post) - assert(obj.down) - try { - obj.greet("akka") - fail("access to stopped typed actor") - } catch { - case e: Exception => { } - } - } - - it("should restart supervised, annotated typed actor on failure") { - val obj = conf1.getInstance[SamplePojoAnnotated](classOf[SamplePojoAnnotated]) - val cdl = obj.newCountdownLatch(2) - assert(AspectInitRegistry.initFor(obj) ne null) - try { - obj.fail - fail("expected exception not thrown") - } catch { - case e: RuntimeException => { - cdl.await - assert(obj.pre) - assert(obj.post) - assert(!obj.down) - assert(AspectInitRegistry.initFor(obj) ne null) - } - } - } - - it("should shutdown supervised, annotated typed actor on failure") { - val obj = conf2.getInstance[SamplePojoAnnotated](classOf[SamplePojoAnnotated]) - val cdl = obj.newCountdownLatch(1) - assert(AspectInitRegistry.initFor(obj) ne null) - try { - obj.fail - fail("expected exception not thrown") - } catch { - case e: RuntimeException => { - cdl.await - assert(!obj.pre) - assert(!obj.post) - assert(obj.down) - assert(AspectInitRegistry.initFor(obj) eq null) - } - } - } - */ - } -} diff --git a/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorSpec.scala b/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorSpec.scala deleted file mode 100644 index 7de0a8f5df..0000000000 --- a/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorSpec.scala +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.actor - -import org.scalatest.Spec -import org.scalatest.Assertions -import org.scalatest.matchers.ShouldMatchers -import org.scalatest.BeforeAndAfterAll -import org.scalatest.junit.JUnitRunner -import org.junit.runner.RunWith - -import se.scalablesolutions.akka.dispatch.DefaultCompletableFuture; - -@RunWith(classOf[JUnitRunner]) -class TypedActorSpec extends - Spec with - ShouldMatchers with - BeforeAndAfterAll { - - describe("TypedActor") { - it("should resolve Future return from method defined to return a Future") { - val pojo = TypedActor.newInstance(classOf[SimpleJavaPojo], classOf[SimpleJavaPojoImpl]) - val future = pojo.square(10) - future.await - future.result.isDefined should equal (true) - future.result.get should equal (100) - } - } -} diff --git a/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorUtilFunctionsSpec.scala b/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorUtilFunctionsSpec.scala deleted file mode 100644 index 48424f3c17..0000000000 --- a/akka-typed-actors/src/test/scala/actor/typed-actor/TypedActorUtilFunctionsSpec.scala +++ /dev/null @@ -1,23 +0,0 @@ -package se.scalablesolutions.akka.actor - -import org.scalatest.Suite -import org.junit.runner.RunWith -import org.scalatest.junit.JUnitRunner -import org.scalatest.matchers.MustMatchers -import org.junit.{Before, After, Test} -import java.util.concurrent.{ CountDownLatch, TimeUnit } - -@RunWith(classOf[JUnitRunner]) -class ActorObjectUtilFunctionsSpec extends junit.framework.TestCase with Suite with MustMatchers { - import Actor._ - @Test def testSpawn = { - val latch = new CountDownLatch(1) - - spawn { - latch.countDown - } - - val done = latch.await(10,TimeUnit.SECONDS) - done must be (true) - } -} diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala index e6c243c201..59e190114f 100644 --- a/project/build/AkkaProject.scala +++ b/project/build/AkkaProject.scala @@ -216,19 +216,19 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { // Subprojects // ------------------------------------------------------------------------------------------------------------------- - lazy val akka_actors = project("akka-actors", "akka-actors", new AkkaCoreProject(_)) - lazy val akka_typed_actors = project("akka-typed-actors", "akka-typed-actors", new AkkaCoreProject(_), akka_actors) - lazy val akka_core = project("akka-core", "akka-core", new AkkaCoreProject(_), akka_typed_actors) - lazy val akka_amqp = project("akka-amqp", "akka-amqp", new AkkaAMQPProject(_), akka_core) - lazy val akka_http = project("akka-http", "akka-http", new AkkaHttpProject(_), akka_core, akka_camel) - lazy val akka_camel = project("akka-camel", "akka-camel", new AkkaCamelProject(_), akka_core) - lazy val akka_persistence = project("akka-persistence", "akka-persistence", new AkkaPersistenceParentProject(_)) - lazy val akka_spring = project("akka-spring", "akka-spring", new AkkaSpringProject(_), akka_core, akka_camel) - lazy val akka_jta = project("akka-jta", "akka-jta", new AkkaJTAProject(_), akka_core) - lazy val akka_kernel = project("akka-kernel", "akka-kernel", new AkkaKernelProject(_), - akka_core, akka_http, akka_spring, akka_camel, akka_persistence, akka_amqp) - lazy val akka_osgi = project("akka-osgi", "akka-osgi", new AkkaOSGiParentProject(_)) - lazy val akka_samples = project("akka-samples", "akka-samples", new AkkaSamplesParentProject(_)) + lazy val akka_actor = project("akka-actor", "akka-actor", new AkkaActorProject(_)) + lazy val akka_typed_actor = project("akka-typed-actor", "akka-typed-actor", new AkkaTypedActorProject(_), akka_actor) + lazy val akka_remote = project("akka-remote", "akka-remote", new AkkaRemoteProject(_), akka_typed_actor) + lazy val akka_amqp = project("akka-amqp", "akka-amqp", new AkkaAMQPProject(_), akka_remote) + lazy val akka_http = project("akka-http", "akka-http", new AkkaHttpProject(_), akka_remote, akka_camel) + lazy val akka_camel = project("akka-camel", "akka-camel", new AkkaCamelProject(_), akka_remote) + lazy val akka_persistence = project("akka-persistence", "akka-persistence", new AkkaPersistenceParentProject(_)) + lazy val akka_spring = project("akka-spring", "akka-spring", new AkkaSpringProject(_), akka_remote, akka_camel) + lazy val akka_jta = project("akka-jta", "akka-jta", new AkkaJTAProject(_), akka_remote) + lazy val akka_kernel = project("akka-kernel", "akka-kernel", new AkkaKernelProject(_), + akka_remote, akka_http, akka_spring, akka_camel, akka_persistence, akka_amqp) + lazy val akka_osgi = project("akka-osgi", "akka-osgi", new AkkaOSGiParentProject(_)) + lazy val akka_samples = project("akka-samples", "akka-samples", new AkkaSamplesParentProject(_)) // ------------------------------------------------------------------------------------------------------------------- // Miscellaneous @@ -253,7 +253,9 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { .map("lib_managed/scala_%s/compile/".format(buildScalaVersion) + _.getName) .mkString(" ") + " scala-library.jar" + - " dist/akka-core_%s-%s.jar".format(buildScalaVersion, version) + + " dist/akka-actor_%s-%s.jar".format(buildScalaVersion, version) + + " dist/akka-typed-actor_%s-%s.jar".format(buildScalaVersion, version) + + " dist/akka-remote_%s-%s.jar".format(buildScalaVersion, version) + " dist/akka-http_%s-%s.jar".format(buildScalaVersion, version) + " dist/akka-camel_%s-%s.jar".format(buildScalaVersion, version) + " dist/akka-amqp_%s-%s.jar".format(buildScalaVersion, version) + @@ -328,10 +330,10 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { } dependsOn(dist) describedAs("Run mvn install for artifacts in dist.") // ------------------------------------------------------------------------------------------------------------------- - // akka-actors subproject + // akka-actor subproject // ------------------------------------------------------------------------------------------------------------------- - class AkkaActorsProject(info: ProjectInfo) extends AkkaDefaultProject(info, distPath) { + class AkkaActorProject(info: ProjectInfo) extends AkkaDefaultProject(info, distPath) { val configgy = Dependencies.configgy val hawtdispatch = Dependencies.hawtdispatch val multiverse = Dependencies.multiverse @@ -345,7 +347,11 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { val scalatest = Dependencies.scalatest } - class AkkaTypedActorsProject(info: ProjectInfo) extends AkkaDefaultProject(info, distPath) { + // ------------------------------------------------------------------------------------------------------------------- + // akka-typed-actor subproject + // ------------------------------------------------------------------------------------------------------------------- + + class AkkaTypedActorProject(info: ProjectInfo) extends AkkaDefaultProject(info, distPath) { val aopalliance = Dependencies.aopalliance val werkz = Dependencies.werkz val werkz_core = Dependencies.werkz_core @@ -356,10 +362,10 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { } // ------------------------------------------------------------------------------------------------------------------- - // akka-core subproject + // akka-remote subproject // ------------------------------------------------------------------------------------------------------------------- - class AkkaCoreProject(info: ProjectInfo) extends AkkaDefaultProject(info, distPath) { + class AkkaRemoteProject(info: ProjectInfo) extends AkkaDefaultProject(info, distPath) { val commons_codec = Dependencies.commons_codec val commons_io = Dependencies.commons_io val dispatch_http = Dependencies.dispatch_http @@ -439,7 +445,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { class AkkaPersistenceParentProject(info: ProjectInfo) extends ParentProject(info) { lazy val akka_persistence_common = project("akka-persistence-common", "akka-persistence-common", - new AkkaPersistenceCommonProject(_), akka_core) + new AkkaPersistenceCommonProject(_), akka_remote) lazy val akka_persistence_redis = project("akka-persistence-redis", "akka-persistence-redis", new AkkaRedisProject(_), akka_persistence_common) lazy val akka_persistence_mongo = project("akka-persistence-mongo", "akka-persistence-mongo", @@ -534,7 +540,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { lazy val akka_osgi_dependencies_bundle = project("akka-osgi-dependencies-bundle", "akka-osgi-dependencies-bundle", new AkkaOSGiDependenciesBundleProject(_), akka_kernel, akka_jta) // akka_kernel does not depend on akka_jta (why?) therefore we list akka_jta here lazy val akka_osgi_assembly = project("akka-osgi-assembly", "akka-osgi-assembly", - new AkkaOSGiAssemblyProject(_), akka_osgi_dependencies_bundle, akka_core, akka_amqp, akka_http, + new AkkaOSGiAssemblyProject(_), akka_osgi_dependencies_bundle, akka_remote, akka_amqp, akka_http, akka_camel, akka_spring, akka_jta, akka_persistence.akka_persistence_common, akka_persistence.akka_persistence_redis, akka_persistence.akka_persistence_mongo, akka_persistence.akka_persistence_cassandra) @@ -695,7 +701,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { class AkkaSamplesParentProject(info: ProjectInfo) extends ParentProject(info) { lazy val akka_sample_ants = project("akka-sample-ants", "akka-sample-ants", - new AkkaSampleAntsProject(_), akka_core) + new AkkaSampleAntsProject(_), akka_remote) lazy val akka_sample_chat = project("akka-sample-chat", "akka-sample-chat", new AkkaSampleChatProject(_), akka_kernel) lazy val akka_sample_pubsub = project("akka-sample-pubsub", "akka-sample-pubsub", @@ -715,7 +721,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { lazy val akka_sample_remote = project("akka-sample-remote", "akka-sample-remote", new AkkaSampleRemoteProject(_), akka_kernel) lazy val akka_sample_osgi = project("akka-sample-osgi", "akka-sample-osgi", - new AkkaSampleOSGiProject(_), akka_core) + new AkkaSampleOSGiProject(_), akka_remote) } // -------------------------------------------------------------------------------------------------------------------