diff --git a/akka-actor/src/main/scala/actor/Actor.scala b/akka-actor/src/main/scala/akka/actor/Actor.scala similarity index 97% rename from akka-actor/src/main/scala/actor/Actor.scala rename to akka-actor/src/main/scala/akka/actor/Actor.scala index 6667f7fbc4..8a7b045475 100644 --- a/akka-actor/src/main/scala/actor/Actor.scala +++ b/akka-actor/src/main/scala/akka/actor/Actor.scala @@ -34,8 +34,16 @@ abstract class RemoteActor(address: InetSocketAddress) extends Actor { */ @serializable sealed trait LifeCycleMessage -case class HotSwap(code: Actor.Receive) extends LifeCycleMessage { - def this(behavior: Procedure[Any]) = this({ case msg => behavior.apply(msg) }: Actor.Receive) +case class HotSwap(code: ActorRef => Actor.Receive) extends LifeCycleMessage { + /** + * Java API + */ + def this(code: akka.japi.Function[ActorRef,Procedure[Any]]) = + this( (self: ActorRef) => { + val behavior = code(self) + val result: Actor.Receive = { case msg => behavior(msg) } + result + }) } case object RevertHotSwap extends LifeCycleMessage @@ -66,7 +74,7 @@ class ActorInitializationException private[akka](message: String) extends AkkaEx class ActorTimeoutException private[akka](message: String) extends AkkaException(message) /** - * This message is thrown by default when an Actors behavior doesn't match a message + * This message is thrown by default when an Actors behavior doesn't match a message */ case class UnhandledMessageException(msg: Any, ref: ActorRef) extends Exception { override def getMessage() = "Actor %s does not handle [%s]".format(ref,msg) @@ -426,7 +434,7 @@ trait Actor extends Logging { private lazy val processingBehavior: Receive = { lazy val defaultBehavior = receive val actorBehavior: Receive = { - case HotSwap(code) => become(code) + case HotSwap(code) => become(code(self)) case RevertHotSwap => unbecome case Exit(dead, reason) => self.handleTrapExit(dead, reason) case Link(child) => self.link(child) @@ -444,7 +452,7 @@ trait Actor extends Logging { private lazy val fullBehavior: Receive = { lazy val defaultBehavior = receive val actorBehavior: Receive = { - case HotSwap(code) => become(code) + case HotSwap(code) => become(code(self)) case RevertHotSwap => unbecome case Exit(dead, reason) => self.handleTrapExit(dead, reason) case Link(child) => self.link(child) diff --git a/akka-actor/src/main/scala/actor/ActorRef.scala b/akka-actor/src/main/scala/akka/actor/ActorRef.scala similarity index 98% rename from akka-actor/src/main/scala/actor/ActorRef.scala rename to akka-actor/src/main/scala/akka/actor/ActorRef.scala index adf7a1cde7..ddc26313d5 100644 --- a/akka-actor/src/main/scala/actor/ActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRef.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2010 Scalable Solutions AB */ package akka.actor @@ -139,8 +139,24 @@ trait ActorRef extends ActorRefShared with java.lang.Comparable[ActorRef] { scal def setFaultHandler(handler: FaultHandlingStrategy) def getFaultHandler(): FaultHandlingStrategy - @volatile - private[akka] var _dispatcher: MessageDispatcher = Dispatchers.defaultGlobalDispatcher + + /** + * Akka Java API + * A lifeCycle defines whether the actor will be stopped on error (Temporary) or if it can be restarted (Permanent) + *

+ * Can be one of: + * + * import static akka.config.Supervision.*; + *

+   * getContext().setLifeCycle(permanent());
+   * 
+ * Or: + *
+   * getContext().setLifeCycle(temporary());
+   * 
+ */ + def setLifeCycle(lifeCycle: LifeCycle): Unit + def getLifeCycle(): LifeCycle /** * Akka Java API @@ -597,6 +613,8 @@ class LocalActorRef private[akka] ( private var restartsWithinTimeRangeTimestamp: Long = 0L @volatile private var _mailbox: AnyRef = _ + @volatile + private[akka] var _dispatcher: MessageDispatcher = Dispatchers.defaultGlobalDispatcher protected[akka] val actorInstance = guard.withGuard { new AtomicReference[Actor](newActor) } @@ -1208,6 +1226,8 @@ private[akka] case class RemoteActorRef private[akka] ( ensureRemotingEnabled + val remoteAddress: Option[InetSocketAddress] = Some(new InetSocketAddress(hostname, port)) + id = classOrServiceName timeout = _timeout @@ -1242,8 +1262,6 @@ private[akka] case class RemoteActorRef private[akka] ( protected[akka] def registerSupervisorAsRemoteActor: Option[Uuid] = None - val remoteAddress: Option[InetSocketAddress] = Some(new InetSocketAddress(hostname, port)) - // ==== NOT SUPPORTED ==== def actorClass: Class[_ <: Actor] = unsupported def dispatcher_=(md: MessageDispatcher): Unit = unsupported @@ -1313,9 +1331,7 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => */ def id: String - def id_=(id: String): Unit - - /** + def id_=(id: String): Unit /** * User overridable callback/setting. *

* Defines the life-cycle for a supervised actor. @@ -1522,5 +1538,15 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => * Abstraction for unification of sender and senderFuture for later reply */ abstract class Channel[T] { + /** + * Sends the specified message to the channel + * Scala API + */ def !(msg: T): Unit + + /** + * Sends the specified message to the channel + * Java API + */ + def sendOneWay(msg: T): Unit = this.!(msg) } diff --git a/akka-actor/src/main/scala/actor/ActorRegistry.scala b/akka-actor/src/main/scala/akka/actor/ActorRegistry.scala similarity index 84% rename from akka-actor/src/main/scala/actor/ActorRegistry.scala rename to akka-actor/src/main/scala/akka/actor/ActorRegistry.scala index bf0a479f7f..3476304a67 100644 --- a/akka-actor/src/main/scala/actor/ActorRegistry.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRegistry.scala @@ -37,10 +37,10 @@ case class ActorUnregistered(actor: ActorRef) extends ActorRegistryEvent * @author Jonas Bonér */ object ActorRegistry extends ListenerManagement { - private val actorsByUUID = new ConcurrentHashMap[Uuid, ActorRef] - private val actorsById = new Index[String,ActorRef] - private val remoteActorSets = Map[Address, RemoteActorSet]() - private val guard = new ReadWriteGuard + private val actorsByUUID = new ConcurrentHashMap[Uuid, ActorRef] + private val actorsById = new Index[String,ActorRef] + private val remoteActorSets = Map[Address, RemoteActorSet]() + private val guard = new ReadWriteGuard /** * Returns all actors in the system. @@ -50,7 +50,7 @@ object ActorRegistry extends ListenerManagement { /** * Returns the number of actors in the system. */ - def size : Int = actorsByUUID.size + def size: Int = actorsByUUID.size /** * Invokes a function for all actors. @@ -68,8 +68,7 @@ object ActorRegistry extends ListenerManagement { val elements = actorsByUUID.elements while (elements.hasMoreElements) { val element = elements.nextElement - if(f isDefinedAt element) - return Some(f(element)) + if (f isDefinedAt element) return Some(f(element)) } None } @@ -88,9 +87,7 @@ object ActorRegistry extends ListenerManagement { val elements = actorsByUUID.elements while (elements.hasMoreElements) { val actorId = elements.nextElement - if (p(actorId)) { - all += actorId - } + if (p(actorId)) all += actorId } all.toArray } @@ -105,7 +102,7 @@ object ActorRegistry extends ListenerManagement { * Finds any actor that matches T. */ def actorFor[T <: Actor](implicit manifest: Manifest[T]): Option[ActorRef] = - find({ case a:ActorRef if manifest.erasure.isAssignableFrom(a.actor.getClass) => a }) + find({ case a: ActorRef if manifest.erasure.isAssignableFrom(a.actor.getClass) => a }) /** * Finds all actors of type or sub-type specified by the class passed in as the Class argument. @@ -132,13 +129,11 @@ object ActorRegistry extends ListenerManagement { * Invokes a function for all typed actors. */ def foreachTypedActor(f: (AnyRef) => Unit) = { - TypedActorModule.ensureTypedActorEnabled + TypedActorModule.ensureEnabled val elements = actorsByUUID.elements while (elements.hasMoreElements) { val proxy = typedActorFor(elements.nextElement) - if (proxy.isDefined) { - f(proxy.get) - } + if (proxy.isDefined) f(proxy.get) } } @@ -147,12 +142,11 @@ object ActorRegistry extends ListenerManagement { * Returns None if the function never returns Some */ def findTypedActor[T](f: PartialFunction[AnyRef,T]) : Option[T] = { - TypedActorModule.ensureTypedActorEnabled + TypedActorModule.ensureEnabled val elements = actorsByUUID.elements while (elements.hasMoreElements) { val proxy = typedActorFor(elements.nextElement) - if(proxy.isDefined && (f isDefinedAt proxy)) - return Some(f(proxy)) + if (proxy.isDefined && (f isDefinedAt proxy)) return Some(f(proxy)) } None } @@ -161,14 +155,12 @@ object ActorRegistry extends ListenerManagement { * Finds all typed actors that satisfy a predicate. */ def filterTypedActors(p: AnyRef => Boolean): Array[AnyRef] = { - TypedActorModule.ensureTypedActorEnabled + TypedActorModule.ensureEnabled val all = new ListBuffer[AnyRef] val elements = actorsByUUID.elements while (elements.hasMoreElements) { val proxy = typedActorFor(elements.nextElement) - if (proxy.isDefined && p(proxy.get)) { - all += proxy.get - } + if (proxy.isDefined && p(proxy.get)) all += proxy.get } all.toArray } @@ -177,7 +169,7 @@ object ActorRegistry extends ListenerManagement { * Finds all typed actors that are subtypes of the class passed in as the Manifest argument. */ def typedActorsFor[T <: AnyRef](implicit manifest: Manifest[T]): Array[AnyRef] = { - TypedActorModule.ensureTypedActorEnabled + TypedActorModule.ensureEnabled typedActorsFor[T](manifest.erasure.asInstanceOf[Class[T]]) } @@ -185,20 +177,20 @@ object ActorRegistry extends ListenerManagement { * Finds any typed actor that matches T. */ def typedActorFor[T <: AnyRef](implicit manifest: Manifest[T]): Option[AnyRef] = { - TypedActorModule.ensureTypedActorEnabled - def predicate(proxy: AnyRef) : Boolean = { + TypedActorModule.ensureEnabled + def predicate(proxy: AnyRef): Boolean = { val actorRef = TypedActorModule.typedActorObjectInstance.get.actorFor(proxy) actorRef.isDefined && manifest.erasure.isAssignableFrom(actorRef.get.actor.getClass) } - findTypedActor({ case a:AnyRef if predicate(a) => a }) + findTypedActor({ case a: Some[AnyRef] if predicate(a.get) => a }) } /** * Finds all typed actors of type or sub-type specified by the class passed in as the Class argument. */ def typedActorsFor[T <: AnyRef](clazz: Class[T]): Array[AnyRef] = { - TypedActorModule.ensureTypedActorEnabled - def predicate(proxy: AnyRef) : Boolean = { + TypedActorModule.ensureEnabled + def predicate(proxy: AnyRef): Boolean = { val actorRef = TypedActorModule.typedActorObjectInstance.get.actorFor(proxy) actorRef.isDefined && clazz.isAssignableFrom(actorRef.get.actor.getClass) } @@ -209,7 +201,7 @@ object ActorRegistry extends ListenerManagement { * Finds all typed actors that have a specific id. */ def typedActorsFor(id: String): Array[AnyRef] = { - TypedActorModule.ensureTypedActorEnabled + TypedActorModule.ensureEnabled val actorRefs = actorsById values id actorRefs.flatMap(typedActorFor(_)) } @@ -218,12 +210,10 @@ object ActorRegistry extends ListenerManagement { * Finds the typed actor that has a specific UUID. */ def typedActorFor(uuid: Uuid): Option[AnyRef] = { - TypedActorModule.ensureTypedActorEnabled + TypedActorModule.ensureEnabled val actorRef = actorsByUUID get uuid - if (actorRef eq null) - None - else - typedActorFor(actorRef) + if (actorRef eq null) None + else typedActorFor(actorRef) } /** @@ -265,20 +255,15 @@ object ActorRegistry extends ListenerManagement { */ def shutdownAll() { log.info("Shutting down all actors in the system...") - if (TypedActorModule.isTypedActorEnabled) { + if (TypedActorModule.isEnabled) { val elements = actorsByUUID.elements while (elements.hasMoreElements) { val actorRef = elements.nextElement val proxy = typedActorFor(actorRef) - if (proxy.isDefined) { - TypedActorModule.typedActorObjectInstance.get.stop(proxy.get) - } else { - actorRef.stop - } + if (proxy.isDefined) TypedActorModule.typedActorObjectInstance.get.stop(proxy.get) + else actorRef.stop } - } else { - foreach(_.stop) - } + } else foreach(_.stop) actorsByUUID.clear actorsById.clear log.info("All actors have been shut down and unregistered from ActorRegistry") @@ -301,14 +286,18 @@ object ActorRegistry extends ListenerManagement { private[akka] def actors(address: Address) = actorsFor(address).actors private[akka] def actorsByUuid(address: Address) = actorsFor(address).actorsByUuid + private[akka] def actorsFactories(address: Address) = actorsFor(address).actorsFactories private[akka] def typedActors(address: Address) = actorsFor(address).typedActors private[akka] def typedActorsByUuid(address: Address) = actorsFor(address).typedActorsByUuid + private[akka] def typedActorsFactories(address: Address) = actorsFor(address).typedActorsFactories private[akka] class RemoteActorSet { private[ActorRegistry] val actors = new ConcurrentHashMap[String, ActorRef] private[ActorRegistry] val actorsByUuid = new ConcurrentHashMap[String, ActorRef] + private[ActorRegistry] val actorsFactories = new ConcurrentHashMap[String, () => ActorRef] private[ActorRegistry] val typedActors = new ConcurrentHashMap[String, AnyRef] private[ActorRegistry] val typedActorsByUuid = new ConcurrentHashMap[String, AnyRef] + private[ActorRegistry] val typedActorsFactories = new ConcurrentHashMap[String, () => AnyRef] } } @@ -337,16 +326,13 @@ class Index[K <: AnyRef,V <: AnyRef : Manifest] { if (set ne null) { set.synchronized { - if (set.isEmpty) { - retry = true //IF the set is empty then it has been removed, so signal retry - } + if (set.isEmpty) retry = true //IF the set is empty then it has been removed, so signal retry else { //Else add the value to the set and signal that retry is not needed added = set add v retry = false } } - } - else { + } else { val newSet = new ConcurrentSkipListSet[V] newSet add v @@ -354,24 +340,20 @@ class Index[K <: AnyRef,V <: AnyRef : Manifest] { val oldSet = container.putIfAbsent(k,newSet) if (oldSet ne null) { oldSet.synchronized { - if (oldSet.isEmpty) { - retry = true //IF the set is empty then it has been removed, so signal retry - } + if (oldSet.isEmpty) retry = true //IF the set is empty then it has been removed, so signal retry else { //Else try to add the value to the set and signal that retry is not needed added = oldSet add v retry = false } } - } else { - added = true - } + } else added = true } - if (retry) spinPut(k,v) + if (retry) spinPut(k, v) else added } - spinPut(key,value) + spinPut(key, value) } /** @@ -390,10 +372,8 @@ class Index[K <: AnyRef,V <: AnyRef : Manifest] { def findValue(key: K)(f: (V) => Boolean): Option[V] = { import scala.collection.JavaConversions._ val set = container get key - if (set ne null) - set.iterator.find(f) - else - None + if (set ne null) set.iterator.find(f) + else None } /** @@ -420,8 +400,7 @@ class Index[K <: AnyRef,V <: AnyRef : Manifest] { container.remove(key,emptySet) //We try to remove the key if it's mapped to an empty set true //Remove succeeded - } - else false //Remove failed + } else false //Remove failed } } else false //Remove failed } @@ -434,5 +413,5 @@ class Index[K <: AnyRef,V <: AnyRef : Manifest] { /** * Removes all keys and all values */ - def clear = foreach { case (k,v) => remove(k,v) } + def clear = foreach { case (k, v) => remove(k, v) } } diff --git a/akka-actor/src/main/scala/actor/BootableActorLoaderService.scala b/akka-actor/src/main/scala/akka/actor/BootableActorLoaderService.scala similarity index 100% rename from akka-actor/src/main/scala/actor/BootableActorLoaderService.scala rename to akka-actor/src/main/scala/akka/actor/BootableActorLoaderService.scala diff --git a/akka-actor/src/main/scala/actor/FSM.scala b/akka-actor/src/main/scala/akka/actor/FSM.scala similarity index 100% rename from akka-actor/src/main/scala/actor/FSM.scala rename to akka-actor/src/main/scala/akka/actor/FSM.scala diff --git a/akka-actor/src/main/scala/actor/Implicits.scala b/akka-actor/src/main/scala/akka/actor/Implicits.scala similarity index 100% rename from akka-actor/src/main/scala/actor/Implicits.scala rename to akka-actor/src/main/scala/akka/actor/Implicits.scala diff --git a/akka-actor/src/main/scala/actor/Scheduler.scala b/akka-actor/src/main/scala/akka/actor/Scheduler.scala similarity index 100% rename from akka-actor/src/main/scala/actor/Scheduler.scala rename to akka-actor/src/main/scala/akka/actor/Scheduler.scala diff --git a/akka-actor/src/main/scala/actor/Supervisor.scala b/akka-actor/src/main/scala/akka/actor/Supervisor.scala similarity index 100% rename from akka-actor/src/main/scala/actor/Supervisor.scala rename to akka-actor/src/main/scala/akka/actor/Supervisor.scala diff --git a/akka-actor/src/main/scala/actor/UntypedActor.scala b/akka-actor/src/main/scala/akka/actor/UntypedActor.scala similarity index 98% rename from akka-actor/src/main/scala/actor/UntypedActor.scala rename to akka-actor/src/main/scala/akka/actor/UntypedActor.scala index cce41a92a7..9eec8cbb5d 100644 --- a/akka-actor/src/main/scala/actor/UntypedActor.scala +++ b/akka-actor/src/main/scala/akka/actor/UntypedActor.scala @@ -6,7 +6,7 @@ package akka.actor import akka.dispatch._ import akka.config.Supervision._ -import akka.japi.Procedure +import akka.japi.{Creator, Procedure} import java.net.InetSocketAddress @@ -90,9 +90,7 @@ abstract class UntypedActor extends Actor { * * @author Jonas Bonér */ -trait UntypedActorFactory { - def create: UntypedActor -} +trait UntypedActorFactory extends Creator[Actor] /** * Extend this abstract class to create a remote UntypedActor. diff --git a/akka-actor/src/main/scala/config/Config.scala b/akka-actor/src/main/scala/akka/config/Config.scala similarity index 100% rename from akka-actor/src/main/scala/config/Config.scala rename to akka-actor/src/main/scala/akka/config/Config.scala diff --git a/akka-actor/src/main/scala/config/Configuration.scala b/akka-actor/src/main/scala/akka/config/Configuration.scala similarity index 100% rename from akka-actor/src/main/scala/config/Configuration.scala rename to akka-actor/src/main/scala/akka/config/Configuration.scala diff --git a/akka-actor/src/main/scala/config/Configurator.scala b/akka-actor/src/main/scala/akka/config/Configurator.scala similarity index 100% rename from akka-actor/src/main/scala/config/Configurator.scala rename to akka-actor/src/main/scala/akka/config/Configurator.scala diff --git a/akka-actor/src/main/scala/config/SupervisionConfig.scala b/akka-actor/src/main/scala/akka/config/SupervisionConfig.scala similarity index 100% rename from akka-actor/src/main/scala/config/SupervisionConfig.scala rename to akka-actor/src/main/scala/akka/config/SupervisionConfig.scala diff --git a/akka-actor/src/main/scala/dataflow/DataFlowVariable.scala b/akka-actor/src/main/scala/akka/dataflow/DataFlowVariable.scala similarity index 100% rename from akka-actor/src/main/scala/dataflow/DataFlowVariable.scala rename to akka-actor/src/main/scala/akka/dataflow/DataFlowVariable.scala diff --git a/akka-actor/src/main/scala/dispatch/Dispatchers.scala b/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala similarity index 100% rename from akka-actor/src/main/scala/dispatch/Dispatchers.scala rename to akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala diff --git a/akka-actor/src/main/scala/dispatch/ExecutorBasedEventDrivenDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala similarity index 93% rename from akka-actor/src/main/scala/dispatch/ExecutorBasedEventDrivenDispatcher.scala rename to akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala index 83ff50427a..ee5dd890b8 100644 --- a/akka-actor/src/main/scala/dispatch/ExecutorBasedEventDrivenDispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala @@ -5,7 +5,7 @@ package akka.dispatch import akka.actor.{ActorRef, IllegalActorStateException} -import akka.util.ReflectiveAccess.EnterpriseModule +import akka.util.ReflectiveAccess.AkkaCloudModule import java.util.Queue import akka.util.Switch @@ -123,10 +123,10 @@ class ExecutorBasedEventDrivenDispatcher( */ def createDurableMailbox(actorRef: ActorRef, mailboxType: DurableMailboxType): AnyRef = mailboxType match { // FIXME make generic (work for TypedActor as well) - case FileBasedDurableMailbox(serializer) => EnterpriseModule.createFileBasedMailbox(actorRef).asInstanceOf[MessageQueue] - case ZooKeeperBasedDurableMailbox(serializer) => EnterpriseModule.createZooKeeperBasedMailbox(actorRef).asInstanceOf[MessageQueue] - case BeanstalkBasedDurableMailbox(serializer) => EnterpriseModule.createBeanstalkBasedMailbox(actorRef).asInstanceOf[MessageQueue] - case RedisBasedDurableMailbox(serializer) => EnterpriseModule.createRedisBasedMailbox(actorRef).asInstanceOf[MessageQueue] + case FileBasedDurableMailbox(serializer) => AkkaCloudModule.createFileBasedMailbox(actorRef).asInstanceOf[MessageQueue] + case ZooKeeperBasedDurableMailbox(serializer) => AkkaCloudModule.createZooKeeperBasedMailbox(actorRef).asInstanceOf[MessageQueue] + case BeanstalkBasedDurableMailbox(serializer) => AkkaCloudModule.createBeanstalkBasedMailbox(actorRef).asInstanceOf[MessageQueue] + case RedisBasedDurableMailbox(serializer) => AkkaCloudModule.createRedisBasedMailbox(actorRef).asInstanceOf[MessageQueue] case AMQPBasedDurableMailbox(serializer) => throw new UnsupportedOperationException("AMQPBasedDurableMailbox is not yet supported") case JMSBasedDurableMailbox(serializer) => throw new UnsupportedOperationException("JMSBasedDurableMailbox is not yet supported") } diff --git a/akka-actor/src/main/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala similarity index 100% rename from akka-actor/src/main/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala rename to akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala diff --git a/akka-actor/src/main/scala/dispatch/Future.scala b/akka-actor/src/main/scala/akka/dispatch/Future.scala similarity index 100% rename from akka-actor/src/main/scala/dispatch/Future.scala rename to akka-actor/src/main/scala/akka/dispatch/Future.scala diff --git a/akka-actor/src/main/scala/dispatch/HawtDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/HawtDispatcher.scala similarity index 100% rename from akka-actor/src/main/scala/dispatch/HawtDispatcher.scala rename to akka-actor/src/main/scala/akka/dispatch/HawtDispatcher.scala diff --git a/akka-actor/src/main/scala/dispatch/MailboxHandling.scala b/akka-actor/src/main/scala/akka/dispatch/MailboxHandling.scala similarity index 83% rename from akka-actor/src/main/scala/dispatch/MailboxHandling.scala rename to akka-actor/src/main/scala/akka/dispatch/MailboxHandling.scala index ff71b607ce..7e81d4a598 100644 --- a/akka-actor/src/main/scala/dispatch/MailboxHandling.scala +++ b/akka-actor/src/main/scala/akka/dispatch/MailboxHandling.scala @@ -5,7 +5,7 @@ package akka.dispatch import akka.actor.{Actor, ActorType, ActorRef, ActorInitializationException} -import akka.util.ReflectiveAccess.EnterpriseModule +import akka.util.ReflectiveAccess.AkkaCloudModule import akka.AkkaException import java.util.{Queue, List} @@ -42,15 +42,15 @@ case class BoundedMailbox( if (pushTimeOut eq null) throw new IllegalArgumentException("The push time-out for BoundedMailbox can not be null") } -abstract class DurableMailboxType(val serializer: EnterpriseModule.Serializer) extends MailboxType { +abstract class DurableMailboxType(val serializer: AkkaCloudModule.Serializer) extends MailboxType { if (serializer eq null) throw new IllegalArgumentException("The serializer for DurableMailboxType can not be null") } -case class FileBasedDurableMailbox(ser: EnterpriseModule.Serializer) extends DurableMailboxType(ser) -case class RedisBasedDurableMailbox(ser: EnterpriseModule.Serializer) extends DurableMailboxType(ser) -case class BeanstalkBasedDurableMailbox(ser: EnterpriseModule.Serializer) extends DurableMailboxType(ser) -case class ZooKeeperBasedDurableMailbox(ser: EnterpriseModule.Serializer) extends DurableMailboxType(ser) -case class AMQPBasedDurableMailbox(ser: EnterpriseModule.Serializer) extends DurableMailboxType(ser) -case class JMSBasedDurableMailbox(ser: EnterpriseModule.Serializer) extends DurableMailboxType(ser) +case class FileBasedDurableMailbox(ser: AkkaCloudModule.Serializer) extends DurableMailboxType(ser) +case class RedisBasedDurableMailbox(ser: AkkaCloudModule.Serializer) extends DurableMailboxType(ser) +case class BeanstalkBasedDurableMailbox(ser: AkkaCloudModule.Serializer) extends DurableMailboxType(ser) +case class ZooKeeperBasedDurableMailbox(ser: AkkaCloudModule.Serializer) extends DurableMailboxType(ser) +case class AMQPBasedDurableMailbox(ser: AkkaCloudModule.Serializer) extends DurableMailboxType(ser) +case class JMSBasedDurableMailbox(ser: AkkaCloudModule.Serializer) extends DurableMailboxType(ser) class DefaultUnboundedMessageQueue(blockDequeue: Boolean) extends LinkedBlockingQueue[MessageInvocation] with MessageQueue { diff --git a/akka-actor/src/main/scala/dispatch/MessageHandling.scala b/akka-actor/src/main/scala/akka/dispatch/MessageHandling.scala similarity index 100% rename from akka-actor/src/main/scala/dispatch/MessageHandling.scala rename to akka-actor/src/main/scala/akka/dispatch/MessageHandling.scala diff --git a/akka-actor/src/main/scala/dispatch/ThreadBasedDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/ThreadBasedDispatcher.scala similarity index 100% rename from akka-actor/src/main/scala/dispatch/ThreadBasedDispatcher.scala rename to akka-actor/src/main/scala/akka/dispatch/ThreadBasedDispatcher.scala diff --git a/akka-actor/src/main/scala/dispatch/ThreadPoolBuilder.scala b/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala similarity index 100% rename from akka-actor/src/main/scala/dispatch/ThreadPoolBuilder.scala rename to akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala diff --git a/akka-actor/src/main/scala/japi/JavaAPI.scala b/akka-actor/src/main/scala/akka/japi/JavaAPI.scala similarity index 93% rename from akka-actor/src/main/scala/japi/JavaAPI.scala rename to akka-actor/src/main/scala/akka/japi/JavaAPI.scala index f3dd89d91b..88732a4efc 100644 --- a/akka-actor/src/main/scala/japi/JavaAPI.scala +++ b/akka-actor/src/main/scala/akka/japi/JavaAPI.scala @@ -20,6 +20,14 @@ trait SideEffect { def apply: Unit } +/** + + * A constructor/factory, takes no parameters but creates a new value of type T every call + + */ +trait Creator[T] { + def create: T +} + + /** * This class represents optional values. Instances of Option * are either instances of case class Some or it is case diff --git a/akka-actor/src/main/scala/routing/Iterators.scala b/akka-actor/src/main/scala/akka/routing/Iterators.scala similarity index 100% rename from akka-actor/src/main/scala/routing/Iterators.scala rename to akka-actor/src/main/scala/akka/routing/Iterators.scala diff --git a/akka-actor/src/main/scala/routing/Listeners.scala b/akka-actor/src/main/scala/akka/routing/Listeners.scala similarity index 100% rename from akka-actor/src/main/scala/routing/Listeners.scala rename to akka-actor/src/main/scala/akka/routing/Listeners.scala diff --git a/akka-actor/src/main/scala/routing/Routers.scala b/akka-actor/src/main/scala/akka/routing/Routers.scala similarity index 100% rename from akka-actor/src/main/scala/routing/Routers.scala rename to akka-actor/src/main/scala/akka/routing/Routers.scala diff --git a/akka-actor/src/main/scala/routing/Routing.scala b/akka-actor/src/main/scala/akka/routing/Routing.scala similarity index 100% rename from akka-actor/src/main/scala/routing/Routing.scala rename to akka-actor/src/main/scala/akka/routing/Routing.scala diff --git a/akka-actor/src/main/scala/util/Address.scala b/akka-actor/src/main/scala/akka/util/Address.scala similarity index 100% rename from akka-actor/src/main/scala/util/Address.scala rename to akka-actor/src/main/scala/akka/util/Address.scala diff --git a/akka-actor/src/main/scala/util/AkkaException.scala b/akka-actor/src/main/scala/akka/util/AkkaException.scala similarity index 100% rename from akka-actor/src/main/scala/util/AkkaException.scala rename to akka-actor/src/main/scala/akka/util/AkkaException.scala diff --git a/akka-actor/src/main/scala/util/Bootable.scala b/akka-actor/src/main/scala/akka/util/Bootable.scala similarity index 100% rename from akka-actor/src/main/scala/util/Bootable.scala rename to akka-actor/src/main/scala/akka/util/Bootable.scala diff --git a/akka-actor/src/main/scala/util/Crypt.scala b/akka-actor/src/main/scala/akka/util/Crypt.scala similarity index 100% rename from akka-actor/src/main/scala/util/Crypt.scala rename to akka-actor/src/main/scala/akka/util/Crypt.scala diff --git a/akka-actor/src/main/scala/util/Duration.scala b/akka-actor/src/main/scala/akka/util/Duration.scala similarity index 100% rename from akka-actor/src/main/scala/util/Duration.scala rename to akka-actor/src/main/scala/akka/util/Duration.scala diff --git a/akka-actor/src/main/scala/util/HashCode.scala b/akka-actor/src/main/scala/akka/util/HashCode.scala similarity index 100% rename from akka-actor/src/main/scala/util/HashCode.scala rename to akka-actor/src/main/scala/akka/util/HashCode.scala diff --git a/akka-actor/src/main/scala/util/Helpers.scala b/akka-actor/src/main/scala/akka/util/Helpers.scala similarity index 100% rename from akka-actor/src/main/scala/util/Helpers.scala rename to akka-actor/src/main/scala/akka/util/Helpers.scala diff --git a/akka-actor/src/main/scala/util/ListenerManagement.scala b/akka-actor/src/main/scala/akka/util/ListenerManagement.scala similarity index 100% rename from akka-actor/src/main/scala/util/ListenerManagement.scala rename to akka-actor/src/main/scala/akka/util/ListenerManagement.scala diff --git a/akka-actor/src/main/scala/util/LockUtil.scala b/akka-actor/src/main/scala/akka/util/LockUtil.scala similarity index 100% rename from akka-actor/src/main/scala/util/LockUtil.scala rename to akka-actor/src/main/scala/akka/util/LockUtil.scala diff --git a/akka-actor/src/main/scala/util/Logging.scala b/akka-actor/src/main/scala/akka/util/Logging.scala similarity index 100% rename from akka-actor/src/main/scala/util/Logging.scala rename to akka-actor/src/main/scala/akka/util/Logging.scala diff --git a/akka-actor/src/main/scala/util/ReflectiveAccess.scala b/akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala similarity index 84% rename from akka-actor/src/main/scala/util/ReflectiveAccess.scala rename to akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala index 7a72bd28ae..71e5c71b7e 100644 --- a/akka-actor/src/main/scala/util/ReflectiveAccess.scala +++ b/akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala @@ -20,13 +20,13 @@ object ReflectiveAccess extends Logging { val loader = getClass.getClassLoader - lazy val isRemotingEnabled = RemoteClientModule.isRemotingEnabled - lazy val isTypedActorEnabled = TypedActorModule.isTypedActorEnabled - lazy val isEnterpriseEnabled = EnterpriseModule.isEnterpriseEnabled + lazy val isRemotingEnabled = RemoteClientModule.isEnabled + lazy val isTypedActorEnabled = TypedActorModule.isEnabled + lazy val isAkkaCloudEnabled = AkkaCloudModule.isEnabled - def ensureRemotingEnabled = RemoteClientModule.ensureRemotingEnabled - def ensureTypedActorEnabled = TypedActorModule.ensureTypedActorEnabled - def ensureEnterpriseEnabled = EnterpriseModule.ensureEnterpriseEnabled + def ensureRemotingEnabled = RemoteClientModule.ensureEnabled + def ensureTypedActorEnabled = TypedActorModule.ensureEnabled + def ensureAkkaCloudEnabled = AkkaCloudModule.ensureEnabled /** * Reflective access to the RemoteClient module. @@ -56,32 +56,32 @@ object ReflectiveAccess extends Logging { def clientFor(hostname: String, port: Int, loader: Option[ClassLoader]): RemoteClient } - lazy val isRemotingEnabled = remoteClientObjectInstance.isDefined + lazy val isEnabled = remoteClientObjectInstance.isDefined - def ensureRemotingEnabled = if (!isRemotingEnabled) throw new ModuleNotAvailableException( + def ensureEnabled = if (!isEnabled) throw new ModuleNotAvailableException( "Can't load the remoting module, make sure that akka-remote.jar is on the classpath") val remoteClientObjectInstance: Option[RemoteClientObject] = getObjectFor("akka.remote.RemoteClient$") def register(address: InetSocketAddress, uuid: Uuid) = { - ensureRemotingEnabled + ensureEnabled remoteClientObjectInstance.get.register(address.getHostName, address.getPort, uuid) } def unregister(address: InetSocketAddress, uuid: Uuid) = { - ensureRemotingEnabled + ensureEnabled remoteClientObjectInstance.get.unregister(address.getHostName, address.getPort, uuid) } def registerSupervisorForActor(remoteAddress: InetSocketAddress, actorRef: ActorRef) = { - ensureRemotingEnabled + ensureEnabled val remoteClient = remoteClientObjectInstance.get.clientFor(remoteAddress) remoteClient.registerSupervisorForActor(actorRef) } def clientFor(hostname: String, port: Int, loader: Option[ClassLoader]): RemoteClient = { - ensureRemotingEnabled + ensureEnabled remoteClientObjectInstance.get.clientFor(hostname, port, loader) } @@ -95,7 +95,7 @@ object ReflectiveAccess extends Logging { actorRef: ActorRef, typedActorInfo: Option[Tuple2[String, String]], actorType: ActorType): Option[CompletableFuture[T]] = { - ensureRemotingEnabled + ensureEnabled clientFor(remoteAddress.getHostName, remoteAddress.getPort, None).send[T]( message, senderOption, senderFuture, remoteAddress, timeout, isOneWay, actorRef, typedActorInfo, actorType) } @@ -126,17 +126,17 @@ object ReflectiveAccess extends Logging { getObjectFor("akka.remote.RemoteNode$") def registerActor(address: InetSocketAddress, actorRef: ActorRef) = { - ensureRemotingEnabled + RemoteClientModule.ensureEnabled remoteServerObjectInstance.get.registerActor(address, actorRef) } def registerTypedActor(address: InetSocketAddress, implementationClassName: String, proxy: AnyRef) = { - ensureRemotingEnabled + RemoteClientModule.ensureEnabled remoteServerObjectInstance.get.registerTypedActor(address, implementationClassName, proxy) } def unregister(actorRef: ActorRef) = { - ensureRemotingEnabled + RemoteClientModule.ensureEnabled remoteNodeObjectInstance.get.unregister(actorRef) } } @@ -156,16 +156,16 @@ object ReflectiveAccess extends Logging { def stop(anyRef: AnyRef) : Unit } - lazy val isTypedActorEnabled = typedActorObjectInstance.isDefined + lazy val isEnabled = typedActorObjectInstance.isDefined - def ensureTypedActorEnabled = if (!isTypedActorEnabled) throw new ModuleNotAvailableException( + def ensureEnabled = 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] = getObjectFor("akka.actor.TypedActor$") def resolveFutureIfMessageIsJoinPoint(message: Any, future: Future[_]): Boolean = { - ensureTypedActorEnabled + ensureEnabled if (typedActorObjectInstance.get.isJoinPointAndOneWay(message)) { future.asInstanceOf[CompletableFuture[Option[_]]].completeWithResult(None) } @@ -173,7 +173,7 @@ object ReflectiveAccess extends Logging { } } - object EnterpriseModule { + object AkkaCloudModule { type Mailbox = { def enqueue(message: MessageInvocation) @@ -185,27 +185,27 @@ object ReflectiveAccess extends Logging { def fromBinary(bytes: Array[Byte], clazz: Option[Class[_]]): AnyRef } - lazy val isEnterpriseEnabled = clusterObjectInstance.isDefined + lazy val isEnabled = clusterObjectInstance.isDefined val clusterObjectInstance: Option[AnyRef] = - getObjectFor("akka.cluster.Cluster$") + getObjectFor("akka.cloud.cluster.Cluster$") val serializerClass: Option[Class[_]] = getClassFor("akka.serialization.Serializer") - def ensureEnterpriseEnabled = if (!isEnterpriseEnabled) throw new ModuleNotAvailableException( - "Feature is only available in Akka Enterprise edition") + def ensureEnabled = if (!isEnabled) throw new ModuleNotAvailableException( + "Feature is only available in Akka Cloud") - def createFileBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.actor.mailbox.FileBasedMailbox", actorRef) + def createFileBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.cloud.cluster.FileBasedMailbox", actorRef) - def createZooKeeperBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.actor.mailbox.ZooKeeperBasedMailbox", actorRef) + def createZooKeeperBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.cloud.cluster.ZooKeeperBasedMailbox", actorRef) - def createBeanstalkBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.actor.mailbox.BeanstalkBasedMailbox", actorRef) + def createBeanstalkBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.cloud.cluster.BeanstalkBasedMailbox", actorRef) - def createRedisBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.actor.mailbox.RedisBasedMailbox", actorRef) + def createRedisBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.cloud.cluster.RedisBasedMailbox", actorRef) private def createMailbox(mailboxClassname: String, actorRef: ActorRef): Mailbox = { - ensureEnterpriseEnabled + ensureEnabled createInstance( mailboxClassname, Array(classOf[ActorRef]), diff --git a/akka-actor/src/test/scala/Messages.scala b/akka-actor/src/test/scala/akka/Messages.scala similarity index 100% rename from akka-actor/src/test/scala/Messages.scala rename to akka-actor/src/test/scala/akka/Messages.scala diff --git a/akka-actor/src/test/scala/actor/actor/ActorFireForgetRequestReplySpec.scala b/akka-actor/src/test/scala/akka/actor/actor/ActorFireForgetRequestReplySpec.scala similarity index 100% rename from akka-actor/src/test/scala/actor/actor/ActorFireForgetRequestReplySpec.scala rename to akka-actor/src/test/scala/akka/actor/actor/ActorFireForgetRequestReplySpec.scala diff --git a/akka-actor/src/test/scala/actor/actor/ActorRefSpec.scala b/akka-actor/src/test/scala/akka/actor/actor/ActorRefSpec.scala similarity index 100% rename from akka-actor/src/test/scala/actor/actor/ActorRefSpec.scala rename to akka-actor/src/test/scala/akka/actor/actor/ActorRefSpec.scala diff --git a/akka-actor/src/test/scala/actor/actor/Bench.scala b/akka-actor/src/test/scala/akka/actor/actor/Bench.scala similarity index 100% rename from akka-actor/src/test/scala/actor/actor/Bench.scala rename to akka-actor/src/test/scala/akka/actor/actor/Bench.scala diff --git a/akka-actor/src/test/scala/actor/actor/FSMActorSpec.scala b/akka-actor/src/test/scala/akka/actor/actor/FSMActorSpec.scala similarity index 100% rename from akka-actor/src/test/scala/actor/actor/FSMActorSpec.scala rename to akka-actor/src/test/scala/akka/actor/actor/FSMActorSpec.scala diff --git a/akka-actor/src/test/scala/actor/actor/ForwardActorSpec.scala b/akka-actor/src/test/scala/akka/actor/actor/ForwardActorSpec.scala similarity index 100% rename from akka-actor/src/test/scala/actor/actor/ForwardActorSpec.scala rename to akka-actor/src/test/scala/akka/actor/actor/ForwardActorSpec.scala diff --git a/akka-actor/src/test/scala/actor/actor/HotSwapSpec.scala b/akka-actor/src/test/scala/akka/actor/actor/HotSwapSpec.scala similarity index 97% rename from akka-actor/src/test/scala/actor/actor/HotSwapSpec.scala rename to akka-actor/src/test/scala/akka/actor/actor/HotSwapSpec.scala index 5fc9e119a0..011141c746 100644 --- a/akka-actor/src/test/scala/actor/actor/HotSwapSpec.scala +++ b/akka-actor/src/test/scala/akka/actor/actor/HotSwapSpec.scala @@ -16,11 +16,11 @@ class HotSwapSpec extends WordSpec with MustMatchers { val a = actorOf( new Actor { def receive = { case _ => _log += "default" } }).start - a ! HotSwap { + a ! HotSwap( self => { case _ => _log += "swapped" barrier.await - } + }) a ! "swapped" barrier.await _log must be ("swapped") @@ -71,11 +71,11 @@ class HotSwapSpec extends WordSpec with MustMatchers { barrier.reset _log = "" - a ! HotSwap { + a ! HotSwap(self => { case "swapped" => _log += "swapped" barrier.await - } + }) a ! "swapped" barrier.await diff --git a/akka-actor/src/test/scala/actor/actor/ReceiveTimeoutSpec.scala b/akka-actor/src/test/scala/akka/actor/actor/ReceiveTimeoutSpec.scala similarity index 98% rename from akka-actor/src/test/scala/actor/actor/ReceiveTimeoutSpec.scala rename to akka-actor/src/test/scala/akka/actor/actor/ReceiveTimeoutSpec.scala index b47b6830b4..e469ab43d1 100644 --- a/akka-actor/src/test/scala/actor/actor/ReceiveTimeoutSpec.scala +++ b/akka-actor/src/test/scala/akka/actor/actor/ReceiveTimeoutSpec.scala @@ -41,7 +41,7 @@ class ReceiveTimeoutSpec extends JUnitSuite { assert(timeoutLatch.tryAwait(3, TimeUnit.SECONDS)) val swappedLatch = new StandardLatch - timeoutActor ! HotSwap({ + timeoutActor ! HotSwap(self => { case ReceiveTimeout => swappedLatch.open }) diff --git a/akka-actor/src/test/scala/actor/supervisor/RestartStrategySpec.scala b/akka-actor/src/test/scala/akka/actor/supervisor/RestartStrategySpec.scala similarity index 100% rename from akka-actor/src/test/scala/actor/supervisor/RestartStrategySpec.scala rename to akka-actor/src/test/scala/akka/actor/supervisor/RestartStrategySpec.scala diff --git a/akka-actor/src/test/scala/actor/supervisor/SupervisorHierarchySpec.scala b/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorHierarchySpec.scala similarity index 100% rename from akka-actor/src/test/scala/actor/supervisor/SupervisorHierarchySpec.scala rename to akka-actor/src/test/scala/akka/actor/supervisor/SupervisorHierarchySpec.scala diff --git a/akka-actor/src/test/scala/actor/supervisor/SupervisorMiscSpec.scala b/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorMiscSpec.scala similarity index 100% rename from akka-actor/src/test/scala/actor/supervisor/SupervisorMiscSpec.scala rename to akka-actor/src/test/scala/akka/actor/supervisor/SupervisorMiscSpec.scala diff --git a/akka-actor/src/test/scala/actor/supervisor/SupervisorSpec.scala b/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorSpec.scala similarity index 100% rename from akka-actor/src/test/scala/actor/supervisor/SupervisorSpec.scala rename to akka-actor/src/test/scala/akka/actor/supervisor/SupervisorSpec.scala diff --git a/akka-actor/src/test/scala/dataflow/DataFlowSpec.scala b/akka-actor/src/test/scala/akka/dataflow/DataFlowSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dataflow/DataFlowSpec.scala rename to akka-actor/src/test/scala/akka/dataflow/DataFlowSpec.scala diff --git a/akka-actor/src/test/scala/dispatch/ActorModelSpec.scala b/akka-actor/src/test/scala/akka/dispatch/ActorModelSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/ActorModelSpec.scala rename to akka-actor/src/test/scala/akka/dispatch/ActorModelSpec.scala diff --git a/akka-actor/src/test/scala/dispatch/DispatchersSpec.scala b/akka-actor/src/test/scala/akka/dispatch/DispatchersSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/DispatchersSpec.scala rename to akka-actor/src/test/scala/akka/dispatch/DispatchersSpec.scala diff --git a/akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala b/akka-actor/src/test/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala rename to akka-actor/src/test/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcherActorSpec.scala diff --git a/akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala b/akka-actor/src/test/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala rename to akka-actor/src/test/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcherActorsSpec.scala diff --git a/akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala b/akka-actor/src/test/scala/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala rename to akka-actor/src/test/scala/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcherSpec.scala diff --git a/akka-actor/src/test/scala/dispatch/FutureSpec.scala b/akka-actor/src/test/scala/akka/dispatch/FutureSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/FutureSpec.scala rename to akka-actor/src/test/scala/akka/dispatch/FutureSpec.scala diff --git a/akka-actor/src/test/scala/dispatch/HawtDispatcherActorSpec.scala b/akka-actor/src/test/scala/akka/dispatch/HawtDispatcherActorSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/HawtDispatcherActorSpec.scala rename to akka-actor/src/test/scala/akka/dispatch/HawtDispatcherActorSpec.scala diff --git a/akka-actor/src/test/scala/dispatch/HawtDispatcherEchoServer.scala b/akka-actor/src/test/scala/akka/dispatch/HawtDispatcherEchoServer.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/HawtDispatcherEchoServer.scala rename to akka-actor/src/test/scala/akka/dispatch/HawtDispatcherEchoServer.scala diff --git a/akka-actor/src/test/scala/dispatch/MailboxConfigSpec.scala b/akka-actor/src/test/scala/akka/dispatch/MailboxConfigSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/MailboxConfigSpec.scala rename to akka-actor/src/test/scala/akka/dispatch/MailboxConfigSpec.scala diff --git a/akka-actor/src/test/scala/dispatch/ThreadBasedActorSpec.scala b/akka-actor/src/test/scala/akka/dispatch/ThreadBasedActorSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/ThreadBasedActorSpec.scala rename to akka-actor/src/test/scala/akka/dispatch/ThreadBasedActorSpec.scala diff --git a/akka-actor/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala b/akka-actor/src/test/scala/akka/dispatch/ThreadBasedDispatcherSpec.scala similarity index 100% rename from akka-actor/src/test/scala/dispatch/ThreadBasedDispatcherSpec.scala rename to akka-actor/src/test/scala/akka/dispatch/ThreadBasedDispatcherSpec.scala diff --git a/akka-actor/src/test/scala/japi/JavaAPITest.scala b/akka-actor/src/test/scala/akka/japi/JavaAPITest.scala similarity index 100% rename from akka-actor/src/test/scala/japi/JavaAPITest.scala rename to akka-actor/src/test/scala/akka/japi/JavaAPITest.scala diff --git a/akka-actor/src/test/scala/misc/ActorRegistrySpec.scala b/akka-actor/src/test/scala/akka/misc/ActorRegistrySpec.scala similarity index 99% rename from akka-actor/src/test/scala/misc/ActorRegistrySpec.scala rename to akka-actor/src/test/scala/akka/misc/ActorRegistrySpec.scala index 6148b04f53..f951281f2e 100644 --- a/akka-actor/src/test/scala/misc/ActorRegistrySpec.scala +++ b/akka-actor/src/test/scala/akka/misc/ActorRegistrySpec.scala @@ -27,7 +27,6 @@ object ActorRegistrySpec { self.reply("got ping") } } - } class ActorRegistrySpec extends JUnitSuite { diff --git a/akka-actor/src/test/scala/misc/SchedulerSpec.scala b/akka-actor/src/test/scala/akka/misc/SchedulerSpec.scala similarity index 100% rename from akka-actor/src/test/scala/misc/SchedulerSpec.scala rename to akka-actor/src/test/scala/akka/misc/SchedulerSpec.scala diff --git a/akka-actor/src/test/scala/routing/RoutingSpec.scala b/akka-actor/src/test/scala/akka/routing/RoutingSpec.scala similarity index 100% rename from akka-actor/src/test/scala/routing/RoutingSpec.scala rename to akka-actor/src/test/scala/akka/routing/RoutingSpec.scala diff --git a/akka-actor/src/test/scala/ticket/Ticket001Spec.scala b/akka-actor/src/test/scala/akka/ticket/Ticket001Spec.scala similarity index 100% rename from akka-actor/src/test/scala/ticket/Ticket001Spec.scala rename to akka-actor/src/test/scala/akka/ticket/Ticket001Spec.scala diff --git a/akka-camel/src/main/scala/CamelContextLifecycle.scala b/akka-camel/src/main/scala/akka/CamelContextLifecycle.scala similarity index 100% rename from akka-camel/src/main/scala/CamelContextLifecycle.scala rename to akka-camel/src/main/scala/akka/CamelContextLifecycle.scala diff --git a/akka-camel/src/main/scala/CamelService.scala b/akka-camel/src/main/scala/akka/CamelService.scala similarity index 100% rename from akka-camel/src/main/scala/CamelService.scala rename to akka-camel/src/main/scala/akka/CamelService.scala diff --git a/akka-camel/src/main/scala/Consumer.scala b/akka-camel/src/main/scala/akka/Consumer.scala similarity index 100% rename from akka-camel/src/main/scala/Consumer.scala rename to akka-camel/src/main/scala/akka/Consumer.scala diff --git a/akka-camel/src/main/scala/ConsumerPublisher.scala b/akka-camel/src/main/scala/akka/ConsumerPublisher.scala similarity index 100% rename from akka-camel/src/main/scala/ConsumerPublisher.scala rename to akka-camel/src/main/scala/akka/ConsumerPublisher.scala diff --git a/akka-camel/src/main/scala/Message.scala b/akka-camel/src/main/scala/akka/Message.scala similarity index 100% rename from akka-camel/src/main/scala/Message.scala rename to akka-camel/src/main/scala/akka/Message.scala diff --git a/akka-camel/src/main/scala/Producer.scala b/akka-camel/src/main/scala/akka/Producer.scala similarity index 100% rename from akka-camel/src/main/scala/Producer.scala rename to akka-camel/src/main/scala/akka/Producer.scala diff --git a/akka-camel/src/main/scala/component/ActorComponent.scala b/akka-camel/src/main/scala/akka/component/ActorComponent.scala similarity index 100% rename from akka-camel/src/main/scala/component/ActorComponent.scala rename to akka-camel/src/main/scala/akka/component/ActorComponent.scala diff --git a/akka-camel/src/main/scala/component/TypedActorComponent.scala b/akka-camel/src/main/scala/akka/component/TypedActorComponent.scala similarity index 100% rename from akka-camel/src/main/scala/component/TypedActorComponent.scala rename to akka-camel/src/main/scala/akka/component/TypedActorComponent.scala diff --git a/akka-camel/src/test/scala/CamelContextLifecycleTest.scala b/akka-camel/src/test/scala/akka/CamelContextLifecycleTest.scala similarity index 100% rename from akka-camel/src/test/scala/CamelContextLifecycleTest.scala rename to akka-camel/src/test/scala/akka/CamelContextLifecycleTest.scala diff --git a/akka-camel/src/test/scala/CamelExchangeAdapterTest.scala b/akka-camel/src/test/scala/akka/CamelExchangeAdapterTest.scala similarity index 100% rename from akka-camel/src/test/scala/CamelExchangeAdapterTest.scala rename to akka-camel/src/test/scala/akka/CamelExchangeAdapterTest.scala diff --git a/akka-camel/src/test/scala/CamelMessageAdapterTest.scala b/akka-camel/src/test/scala/akka/CamelMessageAdapterTest.scala similarity index 100% rename from akka-camel/src/test/scala/CamelMessageAdapterTest.scala rename to akka-camel/src/test/scala/akka/CamelMessageAdapterTest.scala diff --git a/akka-camel/src/test/scala/CamelServiceManagerTest.scala b/akka-camel/src/test/scala/akka/CamelServiceManagerTest.scala similarity index 100% rename from akka-camel/src/test/scala/CamelServiceManagerTest.scala rename to akka-camel/src/test/scala/akka/CamelServiceManagerTest.scala diff --git a/akka-camel/src/test/scala/ConsumerJavaTest.scala b/akka-camel/src/test/scala/akka/ConsumerJavaTest.scala similarity index 100% rename from akka-camel/src/test/scala/ConsumerJavaTest.scala rename to akka-camel/src/test/scala/akka/ConsumerJavaTest.scala diff --git a/akka-camel/src/test/scala/ConsumerRegisteredTest.scala b/akka-camel/src/test/scala/akka/ConsumerRegisteredTest.scala similarity index 100% rename from akka-camel/src/test/scala/ConsumerRegisteredTest.scala rename to akka-camel/src/test/scala/akka/ConsumerRegisteredTest.scala diff --git a/akka-camel/src/test/scala/ConsumerScalaTest.scala b/akka-camel/src/test/scala/akka/ConsumerScalaTest.scala similarity index 100% rename from akka-camel/src/test/scala/ConsumerScalaTest.scala rename to akka-camel/src/test/scala/akka/ConsumerScalaTest.scala diff --git a/akka-camel/src/test/scala/MessageJavaTest.scala b/akka-camel/src/test/scala/akka/MessageJavaTest.scala similarity index 100% rename from akka-camel/src/test/scala/MessageJavaTest.scala rename to akka-camel/src/test/scala/akka/MessageJavaTest.scala diff --git a/akka-camel/src/test/scala/MessageScalaTest.scala b/akka-camel/src/test/scala/akka/MessageScalaTest.scala similarity index 100% rename from akka-camel/src/test/scala/MessageScalaTest.scala rename to akka-camel/src/test/scala/akka/MessageScalaTest.scala diff --git a/akka-camel/src/test/scala/ProducerFeatureTest.scala b/akka-camel/src/test/scala/akka/ProducerFeatureTest.scala similarity index 100% rename from akka-camel/src/test/scala/ProducerFeatureTest.scala rename to akka-camel/src/test/scala/akka/ProducerFeatureTest.scala diff --git a/akka-camel/src/test/scala/PublishRequestorTest.scala b/akka-camel/src/test/scala/akka/PublishRequestorTest.scala similarity index 100% rename from akka-camel/src/test/scala/PublishRequestorTest.scala rename to akka-camel/src/test/scala/akka/PublishRequestorTest.scala diff --git a/akka-camel/src/test/scala/RemoteConsumerTest.scala b/akka-camel/src/test/scala/akka/RemoteConsumerTest.scala similarity index 100% rename from akka-camel/src/test/scala/RemoteConsumerTest.scala rename to akka-camel/src/test/scala/akka/RemoteConsumerTest.scala diff --git a/akka-camel/src/test/scala/UntypedProducerFeatureTest.scala b/akka-camel/src/test/scala/akka/UntypedProducerFeatureTest.scala similarity index 100% rename from akka-camel/src/test/scala/UntypedProducerFeatureTest.scala rename to akka-camel/src/test/scala/akka/UntypedProducerFeatureTest.scala diff --git a/akka-camel/src/test/scala/component/ActorComponentFeatureTest.scala b/akka-camel/src/test/scala/akka/component/ActorComponentFeatureTest.scala similarity index 100% rename from akka-camel/src/test/scala/component/ActorComponentFeatureTest.scala rename to akka-camel/src/test/scala/akka/component/ActorComponentFeatureTest.scala diff --git a/akka-camel/src/test/scala/component/ActorComponentTest.scala b/akka-camel/src/test/scala/akka/component/ActorComponentTest.scala similarity index 100% rename from akka-camel/src/test/scala/component/ActorComponentTest.scala rename to akka-camel/src/test/scala/akka/component/ActorComponentTest.scala diff --git a/akka-camel/src/test/scala/component/ActorProducerTest.scala b/akka-camel/src/test/scala/akka/component/ActorProducerTest.scala similarity index 100% rename from akka-camel/src/test/scala/component/ActorProducerTest.scala rename to akka-camel/src/test/scala/akka/component/ActorProducerTest.scala diff --git a/akka-camel/src/test/scala/component/TypedActorComponentFeatureTest.scala b/akka-camel/src/test/scala/akka/component/TypedActorComponentFeatureTest.scala similarity index 100% rename from akka-camel/src/test/scala/component/TypedActorComponentFeatureTest.scala rename to akka-camel/src/test/scala/akka/component/TypedActorComponentFeatureTest.scala diff --git a/akka-camel/src/test/scala/support/TestSupport.scala b/akka-camel/src/test/scala/akka/support/TestSupport.scala similarity index 100% rename from akka-camel/src/test/scala/support/TestSupport.scala rename to akka-camel/src/test/scala/akka/support/TestSupport.scala diff --git a/akka-http/src/main/scala/AkkaBroadcaster.scala b/akka-http/src/main/scala/akka/AkkaBroadcaster.scala similarity index 100% rename from akka-http/src/main/scala/AkkaBroadcaster.scala rename to akka-http/src/main/scala/akka/AkkaBroadcaster.scala diff --git a/akka-http/src/main/scala/AkkaCometServlet.scala b/akka-http/src/main/scala/akka/AkkaCometServlet.scala similarity index 100% rename from akka-http/src/main/scala/AkkaCometServlet.scala rename to akka-http/src/main/scala/akka/AkkaCometServlet.scala diff --git a/akka-http/src/main/scala/AkkaLoader.scala b/akka-http/src/main/scala/akka/AkkaLoader.scala similarity index 100% rename from akka-http/src/main/scala/AkkaLoader.scala rename to akka-http/src/main/scala/akka/AkkaLoader.scala diff --git a/akka-http/src/main/scala/DefaultAkkaLoader.scala b/akka-http/src/main/scala/akka/DefaultAkkaLoader.scala similarity index 100% rename from akka-http/src/main/scala/DefaultAkkaLoader.scala rename to akka-http/src/main/scala/akka/DefaultAkkaLoader.scala diff --git a/akka-http/src/main/scala/EmbeddedAppServer.scala b/akka-http/src/main/scala/akka/EmbeddedAppServer.scala similarity index 100% rename from akka-http/src/main/scala/EmbeddedAppServer.scala rename to akka-http/src/main/scala/akka/EmbeddedAppServer.scala diff --git a/akka-http/src/main/scala/Initializer.scala b/akka-http/src/main/scala/akka/Initializer.scala similarity index 100% rename from akka-http/src/main/scala/Initializer.scala rename to akka-http/src/main/scala/akka/Initializer.scala diff --git a/akka-http/src/main/scala/ListWriter.scala b/akka-http/src/main/scala/akka/ListWriter.scala similarity index 100% rename from akka-http/src/main/scala/ListWriter.scala rename to akka-http/src/main/scala/akka/ListWriter.scala diff --git a/akka-http/src/main/scala/Security.scala b/akka-http/src/main/scala/akka/Security.scala similarity index 100% rename from akka-http/src/main/scala/Security.scala rename to akka-http/src/main/scala/akka/Security.scala diff --git a/akka-jta/src/main/scala/AtomikosTransactionService.scala b/akka-jta/src/main/scala/akka/AtomikosTransactionService.scala similarity index 100% rename from akka-jta/src/main/scala/AtomikosTransactionService.scala rename to akka-jta/src/main/scala/akka/AtomikosTransactionService.scala diff --git a/akka-jta/src/main/scala/JTA.scala b/akka-jta/src/main/scala/akka/JTA.scala similarity index 100% rename from akka-jta/src/main/scala/JTA.scala rename to akka-jta/src/main/scala/akka/JTA.scala diff --git a/akka-jta/src/main/scala/TransactionContext.scala b/akka-jta/src/main/scala/akka/TransactionContext.scala similarity index 100% rename from akka-jta/src/main/scala/TransactionContext.scala rename to akka-jta/src/main/scala/akka/TransactionContext.scala diff --git a/akka-jta/src/main/scala/TransactionProtocol.scala b/akka-jta/src/main/scala/akka/TransactionProtocol.scala similarity index 100% rename from akka-jta/src/main/scala/TransactionProtocol.scala rename to akka-jta/src/main/scala/akka/TransactionProtocol.scala diff --git a/akka-kernel/src/main/scala/Kernel.scala b/akka-kernel/src/main/scala/akka/Kernel.scala similarity index 100% rename from akka-kernel/src/main/scala/Kernel.scala rename to akka-kernel/src/main/scala/akka/Kernel.scala diff --git a/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraSession.scala b/akka-persistence/akka-persistence-cassandra/src/main/scala/akka/CassandraSession.scala similarity index 100% rename from akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraSession.scala rename to akka-persistence/akka-persistence-cassandra/src/main/scala/akka/CassandraSession.scala diff --git a/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraStorage.scala b/akka-persistence/akka-persistence-cassandra/src/main/scala/akka/CassandraStorage.scala similarity index 100% rename from akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraStorage.scala rename to akka-persistence/akka-persistence-cassandra/src/main/scala/akka/CassandraStorage.scala diff --git a/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraStorageBackend.scala b/akka-persistence/akka-persistence-cassandra/src/main/scala/akka/CassandraStorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraStorageBackend.scala rename to akka-persistence/akka-persistence-cassandra/src/main/scala/akka/CassandraStorageBackend.scala diff --git a/akka-persistence/akka-persistence-common/src/main/scala/CommonStorageBackend.scala b/akka-persistence/akka-persistence-common/src/main/scala/akka/CommonStorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-common/src/main/scala/CommonStorageBackend.scala rename to akka-persistence/akka-persistence-common/src/main/scala/akka/CommonStorageBackend.scala diff --git a/akka-persistence/akka-persistence-common/src/main/scala/Pool.scala b/akka-persistence/akka-persistence-common/src/main/scala/akka/Pool.scala similarity index 100% rename from akka-persistence/akka-persistence-common/src/main/scala/Pool.scala rename to akka-persistence/akka-persistence-common/src/main/scala/akka/Pool.scala diff --git a/akka-persistence/akka-persistence-common/src/main/scala/Storage.scala b/akka-persistence/akka-persistence-common/src/main/scala/akka/Storage.scala similarity index 100% rename from akka-persistence/akka-persistence-common/src/main/scala/Storage.scala rename to akka-persistence/akka-persistence-common/src/main/scala/akka/Storage.scala diff --git a/akka-persistence/akka-persistence-common/src/main/scala/StorageBackend.scala b/akka-persistence/akka-persistence-common/src/main/scala/akka/StorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-common/src/main/scala/StorageBackend.scala rename to akka-persistence/akka-persistence-common/src/main/scala/akka/StorageBackend.scala diff --git a/akka-persistence/akka-persistence-couchdb/src/main/scala/CouchDBStorage.scala b/akka-persistence/akka-persistence-couchdb/src/main/scala/akka/CouchDBStorage.scala similarity index 100% rename from akka-persistence/akka-persistence-couchdb/src/main/scala/CouchDBStorage.scala rename to akka-persistence/akka-persistence-couchdb/src/main/scala/akka/CouchDBStorage.scala diff --git a/akka-persistence/akka-persistence-couchdb/src/main/scala/CouchDBStorageBackend.scala b/akka-persistence/akka-persistence-couchdb/src/main/scala/akka/CouchDBStorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-couchdb/src/main/scala/CouchDBStorageBackend.scala rename to akka-persistence/akka-persistence-couchdb/src/main/scala/akka/CouchDBStorageBackend.scala diff --git a/akka-persistence/akka-persistence-hbase/src/main/scala/HbaseStorage.scala b/akka-persistence/akka-persistence-hbase/src/main/scala/akka/HbaseStorage.scala similarity index 100% rename from akka-persistence/akka-persistence-hbase/src/main/scala/HbaseStorage.scala rename to akka-persistence/akka-persistence-hbase/src/main/scala/akka/HbaseStorage.scala diff --git a/akka-persistence/akka-persistence-hbase/src/main/scala/HbaseStorageBackend.scala b/akka-persistence/akka-persistence-hbase/src/main/scala/akka/HbaseStorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-hbase/src/main/scala/HbaseStorageBackend.scala rename to akka-persistence/akka-persistence-hbase/src/main/scala/akka/HbaseStorageBackend.scala diff --git a/akka-persistence/akka-persistence-memcached/src/main/scala/MemcachedStorage.scala b/akka-persistence/akka-persistence-memcached/src/main/scala/akka/MemcachedStorage.scala similarity index 100% rename from akka-persistence/akka-persistence-memcached/src/main/scala/MemcachedStorage.scala rename to akka-persistence/akka-persistence-memcached/src/main/scala/akka/MemcachedStorage.scala diff --git a/akka-persistence/akka-persistence-memcached/src/main/scala/MemcachedStorageBackend.scala b/akka-persistence/akka-persistence-memcached/src/main/scala/akka/MemcachedStorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-memcached/src/main/scala/MemcachedStorageBackend.scala rename to akka-persistence/akka-persistence-memcached/src/main/scala/akka/MemcachedStorageBackend.scala diff --git a/akka-persistence/akka-persistence-mongo/src/main/scala/MongoStorage.scala b/akka-persistence/akka-persistence-mongo/src/main/scala/akka/MongoStorage.scala similarity index 100% rename from akka-persistence/akka-persistence-mongo/src/main/scala/MongoStorage.scala rename to akka-persistence/akka-persistence-mongo/src/main/scala/akka/MongoStorage.scala diff --git a/akka-persistence/akka-persistence-mongo/src/main/scala/MongoStorageBackend.scala b/akka-persistence/akka-persistence-mongo/src/main/scala/akka/MongoStorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-mongo/src/main/scala/MongoStorageBackend.scala rename to akka-persistence/akka-persistence-mongo/src/main/scala/akka/MongoStorageBackend.scala diff --git a/akka-persistence/akka-persistence-redis/src/main/scala/RedisPubSubServer.scala b/akka-persistence/akka-persistence-redis/src/main/scala/akka/RedisPubSubServer.scala similarity index 100% rename from akka-persistence/akka-persistence-redis/src/main/scala/RedisPubSubServer.scala rename to akka-persistence/akka-persistence-redis/src/main/scala/akka/RedisPubSubServer.scala diff --git a/akka-persistence/akka-persistence-redis/src/main/scala/RedisStorage.scala b/akka-persistence/akka-persistence-redis/src/main/scala/akka/RedisStorage.scala similarity index 100% rename from akka-persistence/akka-persistence-redis/src/main/scala/RedisStorage.scala rename to akka-persistence/akka-persistence-redis/src/main/scala/akka/RedisStorage.scala diff --git a/akka-persistence/akka-persistence-redis/src/main/scala/RedisStorageBackend.scala b/akka-persistence/akka-persistence-redis/src/main/scala/akka/RedisStorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-redis/src/main/scala/RedisStorageBackend.scala rename to akka-persistence/akka-persistence-redis/src/main/scala/akka/RedisStorageBackend.scala diff --git a/akka-persistence/akka-persistence-riak/src/main/scala/RiakStorage.scala b/akka-persistence/akka-persistence-riak/src/main/scala/akka/RiakStorage.scala similarity index 100% rename from akka-persistence/akka-persistence-riak/src/main/scala/RiakStorage.scala rename to akka-persistence/akka-persistence-riak/src/main/scala/akka/RiakStorage.scala diff --git a/akka-persistence/akka-persistence-riak/src/main/scala/RiakStorageBackend.scala b/akka-persistence/akka-persistence-riak/src/main/scala/akka/RiakStorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-riak/src/main/scala/RiakStorageBackend.scala rename to akka-persistence/akka-persistence-riak/src/main/scala/akka/RiakStorageBackend.scala diff --git a/akka-persistence/akka-persistence-simpledb/src/main/scala/SimpledbStorage.scala b/akka-persistence/akka-persistence-simpledb/src/main/scala/akka/SimpledbStorage.scala similarity index 100% rename from akka-persistence/akka-persistence-simpledb/src/main/scala/SimpledbStorage.scala rename to akka-persistence/akka-persistence-simpledb/src/main/scala/akka/SimpledbStorage.scala diff --git a/akka-persistence/akka-persistence-simpledb/src/main/scala/SimpledbStorageBackend.scala b/akka-persistence/akka-persistence-simpledb/src/main/scala/akka/SimpledbStorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-simpledb/src/main/scala/SimpledbStorageBackend.scala rename to akka-persistence/akka-persistence-simpledb/src/main/scala/akka/SimpledbStorageBackend.scala diff --git a/akka-persistence/akka-persistence-voldemort/src/main/scala/VoldemortStorage.scala b/akka-persistence/akka-persistence-voldemort/src/main/scala/akka/VoldemortStorage.scala similarity index 100% rename from akka-persistence/akka-persistence-voldemort/src/main/scala/VoldemortStorage.scala rename to akka-persistence/akka-persistence-voldemort/src/main/scala/akka/VoldemortStorage.scala diff --git a/akka-persistence/akka-persistence-voldemort/src/main/scala/VoldemortStorageBackend.scala b/akka-persistence/akka-persistence-voldemort/src/main/scala/akka/VoldemortStorageBackend.scala similarity index 100% rename from akka-persistence/akka-persistence-voldemort/src/main/scala/VoldemortStorageBackend.scala rename to akka-persistence/akka-persistence-voldemort/src/main/scala/akka/VoldemortStorageBackend.scala diff --git a/akka-persistence/akka-persistence-voldemort/src/test/scala/EmbeddedVoldemort.scala b/akka-persistence/akka-persistence-voldemort/src/test/scala/EmbeddedVoldemort.scala index bd10420a5b..23940fbadf 100644 --- a/akka-persistence/akka-persistence-voldemort/src/test/scala/EmbeddedVoldemort.scala +++ b/akka-persistence/akka-persistence-voldemort/src/test/scala/EmbeddedVoldemort.scala @@ -18,7 +18,7 @@ trait EmbeddedVoldemort extends BeforeAndAfterAll with Logging { override protected def beforeAll(): Unit = { try { - val dir = "./akka-persistence/akka-persistence-voldemort/target/scala_2.8.0/test-resources" + val dir = "./akka-persistence/akka-persistence-voldemort/target/test-resources" val home = new File(dir) log.info("Creating Voldemort Config") val config = VoldemortConfig.loadFromVoldemortHome(home.getCanonicalPath) diff --git a/akka-remote/src/main/scala/remote/BootableRemoteActorService.scala b/akka-remote/src/main/scala/akka/remote/BootableRemoteActorService.scala similarity index 100% rename from akka-remote/src/main/scala/remote/BootableRemoteActorService.scala rename to akka-remote/src/main/scala/akka/remote/BootableRemoteActorService.scala diff --git a/akka-remote/src/main/scala/remote/MessageSerializer.scala b/akka-remote/src/main/scala/akka/remote/MessageSerializer.scala similarity index 100% rename from akka-remote/src/main/scala/remote/MessageSerializer.scala rename to akka-remote/src/main/scala/akka/remote/MessageSerializer.scala diff --git a/akka-remote/src/main/scala/remote/RemoteClient.scala b/akka-remote/src/main/scala/akka/remote/RemoteClient.scala similarity index 100% rename from akka-remote/src/main/scala/remote/RemoteClient.scala rename to akka-remote/src/main/scala/akka/remote/RemoteClient.scala diff --git a/akka-remote/src/main/scala/remote/RemoteServer.scala b/akka-remote/src/main/scala/akka/remote/RemoteServer.scala similarity index 73% rename from akka-remote/src/main/scala/remote/RemoteServer.scala rename to akka-remote/src/main/scala/akka/remote/RemoteServer.scala index 3d4e81e336..1d79978559 100644 --- a/akka-remote/src/main/scala/remote/RemoteServer.scala +++ b/akka-remote/src/main/scala/akka/remote/RemoteServer.scala @@ -284,6 +284,21 @@ class RemoteServer extends Logging with ListenerManagement { else registerTypedActor(id, typedActor, typedActors) } + /** + * Register typed actor by interface name. + */ + def registerTypedPerSessionActor(intfClass: Class[_], factory: => AnyRef) : Unit = registerTypedActor(intfClass.getName, factory) + + /** + * Register remote typed actor by a specific id. + * @param id custom actor id + * @param typedActor typed actor to register + */ + def registerTypedPerSessionActor(id: String, factory: => AnyRef): Unit = synchronized { + log.debug("Registering server side typed remote session actor with id [%s]", id) + registerTypedPerSessionActor(id, () => factory, typedActorsFactories) + } + /** * Register Remote Actor by the Actor's 'id' field. It starts the Actor if it is not started already. */ @@ -300,15 +315,36 @@ class RemoteServer extends Logging with ListenerManagement { else register(id, actorRef, actors) } + /** + * Register Remote Session Actor by a specific 'id' passed as argument. + *

+ * NOTE: If you use this method to register your remote actor then you must unregister the actor by this ID yourself. + */ + def registerPerSession(id: String, factory: => ActorRef): Unit = synchronized { + log.debug("Registering server side remote session actor with id [%s]", id) + registerPerSession(id, () => factory, actorsFactories) + } + private def register[Key](id: Key, actorRef: ActorRef, registry: ConcurrentHashMap[Key, ActorRef]) { - if (_isRunning && !registry.contains(id)) { + if (_isRunning) { + registry.put(id, actorRef) //TODO change to putIfAbsent if (!actorRef.isRunning) actorRef.start - registry.put(id, actorRef) } } + private def registerPerSession[Key](id: Key, factory: () => ActorRef, registry: ConcurrentHashMap[Key,() => ActorRef]) { + if (_isRunning) + registry.put(id, factory) //TODO change to putIfAbsent + } + private def registerTypedActor[Key](id: Key, typedActor: AnyRef, registry: ConcurrentHashMap[Key, AnyRef]) { - if (_isRunning && !registry.contains(id)) registry.put(id, typedActor) + if (_isRunning) + registry.put(id, typedActor) //TODO change to putIfAbsent + } + + private def registerTypedPerSessionActor[Key](id: Key, factory: () => AnyRef, registry: ConcurrentHashMap[Key,() => AnyRef]) { + if (_isRunning) + registry.put(id, factory) //TODO change to putIfAbsent } /** @@ -339,6 +375,18 @@ class RemoteServer extends Logging with ListenerManagement { } } + /** + * Unregister Remote Actor by specific 'id'. + *

+ * NOTE: You need to call this method if you have registered an actor by a custom ID. + */ + def unregisterPerSession(id: String):Unit = { + if (_isRunning) { + log.info("Unregistering server side remote session actor with id [%s]", id) + actorsFactories.remove(id) + } + } + /** * Unregister Remote Typed Actor by specific 'id'. *

@@ -352,14 +400,28 @@ class RemoteServer extends Logging with ListenerManagement { } } + /** + * Unregister Remote Typed Actor by specific 'id'. + *

+ * NOTE: You need to call this method if you have registered an actor by a custom ID. + */ + def unregisterTypedPerSessionActor(id: String):Unit = { + if (_isRunning) { + typedActorsFactories.remove(id) + } + } + protected override def manageLifeCycleOfListeners = false protected[akka] override def notifyListeners(message: => Any): Unit = super.notifyListeners(message) + private[akka] def actors = ActorRegistry.actors(address) private[akka] def actorsByUuid = ActorRegistry.actorsByUuid(address) + private[akka] def actorsFactories = ActorRegistry.actorsFactories(address) private[akka] def typedActors = ActorRegistry.typedActors(address) private[akka] def typedActorsByUuid = ActorRegistry.typedActorsByUuid(address) + private[akka] def typedActorsFactories = ActorRegistry.typedActorsFactories(address) } object RemoteServerSslContext { @@ -427,6 +489,9 @@ class RemoteServerHandler( val AW_PROXY_PREFIX = "$$ProxiedByAW".intern val CHANNEL_INIT = "channel-init".intern + val sessionActors = new ChannelLocal[ConcurrentHashMap[String, ActorRef]]() + val typedSessionActors = new ChannelLocal[ConcurrentHashMap[String, AnyRef]]() + applicationLoader.foreach(MessageSerializer.setClassLoader(_)) /** @@ -437,6 +502,8 @@ class RemoteServerHandler( override def channelConnected(ctx: ChannelHandlerContext, event: ChannelStateEvent) = { val clientAddress = getClientAddress(ctx) + sessionActors.set(event.getChannel(), new ConcurrentHashMap[String, ActorRef]()) + typedSessionActors.set(event.getChannel(), new ConcurrentHashMap[String, AnyRef]()) log.debug("Remote client [%s] connected to [%s]", clientAddress, server.name) if (RemoteServer.SECURE) { val sslHandler: SslHandler = ctx.getPipeline.get(classOf[SslHandler]) @@ -456,6 +523,22 @@ class RemoteServerHandler( override def channelDisconnected(ctx: ChannelHandlerContext, event: ChannelStateEvent) = { val clientAddress = getClientAddress(ctx) log.debug("Remote client [%s] disconnected from [%s]", clientAddress, server.name) + // stop all session actors + val channelActors = sessionActors.remove(event.getChannel) + if (channelActors ne null) { + val channelActorsIterator = channelActors.elements + while (channelActorsIterator.hasMoreElements) { + channelActorsIterator.nextElement.stop + } + } + + val channelTypedActors = typedSessionActors.remove(event.getChannel) + if (channelTypedActors ne null) { + val channelTypedActorsIterator = channelTypedActors.elements + while (channelTypedActorsIterator.hasMoreElements) { + TypedActor.stop(channelTypedActorsIterator.nextElement) + } + } server.notifyListeners(RemoteServerClientDisconnected(server, clientAddress)) } @@ -510,7 +593,7 @@ class RemoteServerHandler( val actorRef = try { - createActor(actorInfo).start + createActor(actorInfo, channel).start } catch { case e: SecurityException => channel.write(createErrorReplyMessage(e, request, AkkaActorType.ScalaActor)) @@ -542,7 +625,7 @@ class RemoteServerHandler( val exception = f.exception if (exception.isDefined) { - log.debug("Returning exception from actor invocation [%s]".format(exception.get)) + log.debug("Returning exception from actor invocation [%s]",exception.get) try { channel.write(createErrorReplyMessage(exception.get, request, AkkaActorType.ScalaActor)) } catch { @@ -584,7 +667,7 @@ class RemoteServerHandler( val typedActorInfo = actorInfo.getTypedActorInfo log.debug("Dispatching to remote typed actor [%s :: %s]", typedActorInfo.getMethod, typedActorInfo.getInterface) - val typedActor = createTypedActor(actorInfo) + val typedActor = createTypedActor(actorInfo, channel) val args = MessageSerializer.deserialize(request.getMessage).asInstanceOf[Array[AnyRef]].toList val argClasses = args.map(_.getClass) @@ -592,26 +675,35 @@ class RemoteServerHandler( val messageReceiver = typedActor.getClass.getDeclaredMethod(typedActorInfo.getMethod, argClasses: _*) if (request.getOneWay) messageReceiver.invoke(typedActor, args: _*) else { - val result = messageReceiver.invoke(typedActor, args: _*) match { - case f: Future[_] => f.await.result.get //TODO replace this with a Listener on the Future to avoid blocking - case other => other + //Sends the response + def sendResponse(result: Either[Any,Throwable]): Unit = try { + val messageBuilder = RemoteActorSerialization.createRemoteMessageProtocolBuilder( + None, + Right(request.getUuid), + actorInfo.getId, + actorInfo.getTarget, + actorInfo.getTimeout, + result, + true, + None, + None, + AkkaActorType.TypedActor, + None) + if (request.hasSupervisorUuid) messageBuilder.setSupervisorUuid(request.getSupervisorUuid) + channel.write(messageBuilder.build) + log.debug("Returning result from remote typed actor invocation [%s]", result) + } catch { + case e: Throwable => server.notifyListeners(RemoteServerError(e, server)) } - log.debug("Returning result from remote typed actor invocation [%s]", result) - val messageBuilder = RemoteActorSerialization.createRemoteMessageProtocolBuilder( - None, - Right(request.getUuid), - actorInfo.getId, - actorInfo.getTarget, - actorInfo.getTimeout, - Left(result), - true, - None, - None, - AkkaActorType.TypedActor, - None) - if (request.hasSupervisorUuid) messageBuilder.setSupervisorUuid(request.getSupervisorUuid) - channel.write(messageBuilder.build) + messageReceiver.invoke(typedActor, args: _*) match { + case f: Future[_] => //If it's a future, we can lift on that to defer the send to when the future is completed + f.onComplete( future => { + val result: Either[Any,Throwable] = if (future.exception.isDefined) Right(future.exception.get) else Left(future.result.get) + sendResponse(result) + }) + case other => sendResponse(Left(other)) + } } } catch { case e: InvocationTargetException => @@ -631,10 +723,26 @@ class RemoteServerHandler( server.actorsByUuid.get(uuid) } + private def findActorFactory(id: String) : () => ActorRef = { + server.actorsFactories.get(id) + } + + private def findSessionActor(id: String, channel: Channel) : ActorRef = { + sessionActors.get(channel).get(id) + } + private def findTypedActorById(id: String) : AnyRef = { server.typedActors.get(id) } + private def findTypedActorFactory(id: String) : () => AnyRef = { + server.typedActorsFactories.get(id) + } + + private def findTypedSessionActor(id: String, channel: Channel) : AnyRef = { + typedSessionActors.get(channel).get(id) + } + private def findTypedActorByUuid(uuid: String) : AnyRef = { server.typedActorsByUuid.get(uuid) } @@ -653,6 +761,60 @@ class RemoteServerHandler( actorRefOrNull } + /** + * gets the actor from the session, or creates one if there is a factory for it + */ + private def createSessionActor(actorInfo: ActorInfoProtocol, channel: Channel): ActorRef = { + val uuid = actorInfo.getUuid + val id = actorInfo.getId + val sessionActorRefOrNull = findSessionActor(id, channel) + if (sessionActorRefOrNull ne null) + sessionActorRefOrNull + else + { + // we dont have it in the session either, see if we have a factory for it + val actorFactoryOrNull = findActorFactory(id) + if (actorFactoryOrNull ne null) { + val actorRef = actorFactoryOrNull() + actorRef.uuid = uuidFrom(uuid.getHigh,uuid.getLow) + sessionActors.get(channel).put(id, actorRef) + actorRef + } + else + null + } + } + + + private def createClientManagedActor(actorInfo: ActorInfoProtocol): ActorRef = { + val uuid = actorInfo.getUuid + val id = actorInfo.getId + val timeout = actorInfo.getTimeout + val name = actorInfo.getTarget + + try { + if (RemoteServer.UNTRUSTED_MODE) throw new SecurityException( + "Remote server is operating is untrusted mode, can not create remote actors on behalf of the remote client") + + log.info("Creating a new remote actor [%s:%s]", name, uuid) + val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name) + else Class.forName(name) + val actorRef = Actor.actorOf(clazz.asInstanceOf[Class[_ <: Actor]]) + actorRef.uuid = uuidFrom(uuid.getHigh,uuid.getLow) + actorRef.id = id + actorRef.timeout = timeout + actorRef.remoteAddress = None + server.actorsByUuid.put(actorRef.uuid.toString, actorRef) // register by uuid + actorRef + } catch { + case e => + log.error(e, "Could not create remote actor instance") + server.notifyListeners(RemoteServerError(e, server)) + throw e + } + + } + /** * Creates a new instance of the actor with name, uuid and timeout specified as arguments. * @@ -660,72 +822,91 @@ class RemoteServerHandler( * * Does not start the actor. */ - private def createActor(actorInfo: ActorInfoProtocol): ActorRef = { + private def createActor(actorInfo: ActorInfoProtocol, channel: Channel): ActorRef = { val uuid = actorInfo.getUuid val id = actorInfo.getId - val name = actorInfo.getTarget - val timeout = actorInfo.getTimeout - val actorRefOrNull = findActorByIdOrUuid(id, uuidFrom(uuid.getHigh,uuid.getLow).toString) - if (actorRefOrNull eq null) { - try { - if (RemoteServer.UNTRUSTED_MODE) throw new SecurityException( - "Remote server is operating is untrusted mode, can not create remote actors on behalf of the remote client") - - log.info("Creating a new remote actor [%s:%s]", name, uuid) - val clazz = if (applicationLoader.isDefined) applicationLoader.get.loadClass(name) - else Class.forName(name) - val actorRef = Actor.actorOf(clazz.asInstanceOf[Class[_ <: Actor]]) - actorRef.uuid = uuidFrom(uuid.getHigh,uuid.getLow) - actorRef.id = id - actorRef.timeout = timeout - actorRef.remoteAddress = None - server.actorsByUuid.put(actorRef.uuid.toString, actorRef) // register by uuid - actorRef - } catch { - case e => - log.error(e, "Could not create remote actor instance") - server.notifyListeners(RemoteServerError(e, server)) - throw e - } - } else actorRefOrNull + if (actorRefOrNull ne null) + actorRefOrNull + else + { + // the actor has not been registered globally. See if we have it in the session + val sessionActorRefOrNull = createSessionActor(actorInfo, channel) + if (sessionActorRefOrNull ne null) + sessionActorRefOrNull + else // maybe it is a client managed actor + createClientManagedActor(actorInfo) + } } - private def createTypedActor(actorInfo: ActorInfoProtocol): AnyRef = { + /** + * gets the actor from the session, or creates one if there is a factory for it + */ + private def createTypedSessionActor(actorInfo: ActorInfoProtocol, channel: Channel):AnyRef ={ + val id = actorInfo.getId + val sessionActorRefOrNull = findTypedSessionActor(id, channel) + if (sessionActorRefOrNull ne null) + sessionActorRefOrNull + else { + val actorFactoryOrNull = findTypedActorFactory(id) + if (actorFactoryOrNull ne null) { + val newInstance = actorFactoryOrNull() + typedSessionActors.get(channel).put(id, newInstance) + newInstance + } + else + null + } + + } + + private def createClientManagedTypedActor(actorInfo: ActorInfoProtocol) = { + val typedActorInfo = actorInfo.getTypedActorInfo + val interfaceClassname = typedActorInfo.getInterface + val targetClassname = actorInfo.getTarget + val uuid = actorInfo.getUuid + + try { + if (RemoteServer.UNTRUSTED_MODE) throw new SecurityException( + "Remote server is operating is untrusted mode, can not create remote actors on behalf of the remote client") + + log.info("Creating a new remote typed actor:\n\t[%s :: %s]", interfaceClassname, targetClassname) + + val (interfaceClass, targetClass) = + if (applicationLoader.isDefined) (applicationLoader.get.loadClass(interfaceClassname), + applicationLoader.get.loadClass(targetClassname)) + else (Class.forName(interfaceClassname), Class.forName(targetClassname)) + + val newInstance = TypedActor.newInstance( + interfaceClass, targetClass.asInstanceOf[Class[_ <: TypedActor]], actorInfo.getTimeout).asInstanceOf[AnyRef] + server.typedActors.put(uuidFrom(uuid.getHigh,uuid.getLow).toString, newInstance) // register by uuid + newInstance + } catch { + case e => + log.error(e, "Could not create remote typed actor instance") + server.notifyListeners(RemoteServerError(e, server)) + throw e + } + } + + private def createTypedActor(actorInfo: ActorInfoProtocol, channel: Channel): AnyRef = { val uuid = actorInfo.getUuid val id = actorInfo.getId val typedActorOrNull = findTypedActorByIdOrUuid(id, uuidFrom(uuid.getHigh,uuid.getLow).toString) - - if (typedActorOrNull eq null) { - val typedActorInfo = actorInfo.getTypedActorInfo - val interfaceClassname = typedActorInfo.getInterface - val targetClassname = actorInfo.getTarget - - try { - if (RemoteServer.UNTRUSTED_MODE) throw new SecurityException( - "Remote server is operating is untrusted mode, can not create remote actors on behalf of the remote client") - - log.info("Creating a new remote typed actor:\n\t[%s :: %s]", interfaceClassname, targetClassname) - - val (interfaceClass, targetClass) = - if (applicationLoader.isDefined) (applicationLoader.get.loadClass(interfaceClassname), - applicationLoader.get.loadClass(targetClassname)) - else (Class.forName(interfaceClassname), Class.forName(targetClassname)) - - val newInstance = TypedActor.newInstance( - interfaceClass, targetClass.asInstanceOf[Class[_ <: TypedActor]], actorInfo.getTimeout).asInstanceOf[AnyRef] - server.typedActors.put(uuidFrom(uuid.getHigh,uuid.getLow).toString, newInstance) // register by uuid - newInstance - } catch { - case e => - log.error(e, "Could not create remote typed actor instance") - server.notifyListeners(RemoteServerError(e, server)) - throw e - } - } else typedActorOrNull + if (typedActorOrNull ne null) + typedActorOrNull + else + { + // the actor has not been registered globally. See if we have it in the session + val sessionActorRefOrNull = createTypedSessionActor(actorInfo, channel) + if (sessionActorRefOrNull ne null) + sessionActorRefOrNull + else // maybe it is a client managed actor + createClientManagedTypedActor(actorInfo) + } } private def createErrorReplyMessage(exception: Throwable, request: RemoteMessageProtocol, actorType: AkkaActorType): RemoteMessageProtocol = { diff --git a/akka-remote/src/main/scala/serialization/Binary.scala b/akka-remote/src/main/scala/akka/serialization/Binary.scala similarity index 100% rename from akka-remote/src/main/scala/serialization/Binary.scala rename to akka-remote/src/main/scala/akka/serialization/Binary.scala diff --git a/akka-remote/src/main/scala/serialization/Compression.scala b/akka-remote/src/main/scala/akka/serialization/Compression.scala similarity index 100% rename from akka-remote/src/main/scala/serialization/Compression.scala rename to akka-remote/src/main/scala/akka/serialization/Compression.scala diff --git a/akka-remote/src/main/scala/serialization/Serializable.scala b/akka-remote/src/main/scala/akka/serialization/Serializable.scala similarity index 100% rename from akka-remote/src/main/scala/serialization/Serializable.scala rename to akka-remote/src/main/scala/akka/serialization/Serializable.scala diff --git a/akka-remote/src/main/scala/serialization/SerializationProtocol.scala b/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala similarity index 100% rename from akka-remote/src/main/scala/serialization/SerializationProtocol.scala rename to akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala diff --git a/akka-remote/src/main/scala/serialization/Serializer.scala b/akka-remote/src/main/scala/akka/serialization/Serializer.scala similarity index 100% rename from akka-remote/src/main/scala/serialization/Serializer.scala rename to akka-remote/src/main/scala/akka/serialization/Serializer.scala diff --git a/akka-remote/src/main/scala/serialization/package.scala b/akka-remote/src/main/scala/akka/serialization/package.scala similarity index 100% rename from akka-remote/src/main/scala/serialization/package.scala rename to akka-remote/src/main/scala/akka/serialization/package.scala diff --git a/akka-remote/src/test/java/akka/actor/RemoteTypedSessionActor.java b/akka-remote/src/test/java/akka/actor/RemoteTypedSessionActor.java new file mode 100644 index 0000000000..8a6c2e6373 --- /dev/null +++ b/akka-remote/src/test/java/akka/actor/RemoteTypedSessionActor.java @@ -0,0 +1,8 @@ +package akka.actor; + +public interface RemoteTypedSessionActor { + + public void login(String user); + public String getUser(); + public void doSomethingFunny() throws Exception; +} diff --git a/akka-remote/src/test/java/akka/actor/RemoteTypedSessionActorImpl.java b/akka-remote/src/test/java/akka/actor/RemoteTypedSessionActorImpl.java new file mode 100644 index 0000000000..b4140f74ed --- /dev/null +++ b/akka-remote/src/test/java/akka/actor/RemoteTypedSessionActorImpl.java @@ -0,0 +1,49 @@ +package akka.actor.remote; + +import akka.actor.*; + +import java.util.Set; +import java.util.HashSet; + +import java.util.concurrent.CountDownLatch; + +public class RemoteTypedSessionActorImpl extends TypedActor implements RemoteTypedSessionActor { + + + private static Set instantiatedSessionActors = new HashSet(); + + public static Set getInstances() { + return instantiatedSessionActors; + } + + @Override + public void preStart() { + instantiatedSessionActors.add(this); + } + + @Override + public void postStop() { + instantiatedSessionActors.remove(this); + } + + + private String user="anonymous"; + + @Override + public void login(String user) { + this.user = user; + } + + @Override + public String getUser() + { + return this.user; + } + + @Override + public void doSomethingFunny() throws Exception + { + throw new Exception("Bad boy"); + } + +} diff --git a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala index ef60732852..5881687c01 100644 --- a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala +++ b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSpec.scala @@ -3,7 +3,8 @@ package akka.actor.remote import java.util.concurrent.{CountDownLatch, TimeUnit} import org.scalatest.junit.JUnitSuite import org.junit.{Test, Before, After} - +import akka.util._ + import akka.remote.{RemoteServer, RemoteClient} import akka.actor.Actor._ import akka.actor.{ActorRegistry, ActorRef, Actor} diff --git a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteSessionActorSpec.scala b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteSessionActorSpec.scala new file mode 100644 index 0000000000..173898c1fe --- /dev/null +++ b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteSessionActorSpec.scala @@ -0,0 +1,162 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package akka.actor.remote + +import org.scalatest._ +import org.scalatest.matchers.ShouldMatchers +import org.scalatest.BeforeAndAfterAll +import org.scalatest.junit.JUnitRunner +import org.junit.runner.RunWith + +import java.util.concurrent.TimeUnit + +import akka.remote.{RemoteServer, RemoteClient} +import akka.actor._ +import akka.actor.Actor._ +import RemoteTypedActorLog._ + +object ServerInitiatedRemoteSessionActorSpec { + val HOSTNAME = "localhost" + val PORT = 9990 + var server: RemoteServer = null + + case class Login(user:String) + case class GetUser() + case class DoSomethingFunny() + + var instantiatedSessionActors= Set[ActorRef]() + + class RemoteStatefullSessionActorSpec extends Actor { + + var user : String= "anonymous" + + override def preStart = { + instantiatedSessionActors += self + } + + override def postStop = { + instantiatedSessionActors -= self + } + + def receive = { + case Login(user) => + this.user = user + case GetUser() => + self.reply(this.user) + case DoSomethingFunny() => + throw new Exception("Bad boy") + } + } + +} + +@RunWith(classOf[JUnitRunner]) +class ServerInitiatedRemoteSessionActorSpec extends + FlatSpec with + ShouldMatchers with + BeforeAndAfterEach { + import ServerInitiatedRemoteSessionActorSpec._ + + private val unit = TimeUnit.MILLISECONDS + + + override def beforeEach = { + server = new RemoteServer() + server.start(HOSTNAME, PORT) + + server.registerPerSession("untyped-session-actor-service", actorOf[RemoteStatefullSessionActorSpec]) + + Thread.sleep(1000) + } + + // make sure the servers shutdown cleanly after the test has finished + override def afterEach = { + try { + server.shutdown + RemoteClient.shutdownAll + Thread.sleep(1000) + } catch { + case e => () + } + } + + "A remote session Actor" should "create a new session actor per connection" in { + clearMessageLogs + + val session1 = RemoteClient.actorFor( + "untyped-session-actor-service", + 5000L, + HOSTNAME, PORT) + + val default1 = session1 !! GetUser() + default1.get.asInstanceOf[String] should equal ("anonymous") + session1 ! Login("session[1]") + val result1 = session1 !! GetUser() + result1.get.asInstanceOf[String] should equal ("session[1]") + + session1.stop() + + RemoteClient.shutdownAll + + //RemoteClient.clientFor(HOSTNAME, PORT).connect + + val session2 = RemoteClient.actorFor( + "untyped-session-actor-service", + 5000L, + HOSTNAME, PORT) + + // since this is a new session, the server should reset the state + val default2 = session2 !! GetUser() + default2.get.asInstanceOf[String] should equal ("anonymous") + + session2.stop() + + } + + it should "stop the actor when the client disconnects" in { + + val session1 = RemoteClient.actorFor( + "untyped-session-actor-service", + 5000L, + HOSTNAME, PORT) + + + val default1 = session1 !! GetUser() + default1.get.asInstanceOf[String] should equal ("anonymous") + + instantiatedSessionActors should have size (1) + + RemoteClient.shutdownAll + Thread.sleep(1000) + instantiatedSessionActors should have size (0) + + } + + it should "stop the actor when there is an error" in { + + val session1 = RemoteClient.actorFor( + "untyped-session-actor-service", + 5000L, + HOSTNAME, PORT) + + + session1 ! DoSomethingFunny() + session1.stop() + + Thread.sleep(1000) + + instantiatedSessionActors should have size (0) + } + + + it should "be able to unregister" in { + server.registerPerSession("my-service-1", actorOf[RemoteStatefullSessionActorSpec]) + server.actorsFactories.get("my-service-1") should not be (null) + server.unregisterPerSession("my-service-1") + server.actorsFactories.get("my-service-1") should be (null) + } + +} + diff --git a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedSessionActorSpec.scala b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedSessionActorSpec.scala new file mode 100644 index 0000000000..0ae4ca2dee --- /dev/null +++ b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedSessionActorSpec.scala @@ -0,0 +1,108 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package akka.actor.remote + +import org.scalatest._ +import org.scalatest.matchers.ShouldMatchers +import org.scalatest.BeforeAndAfterAll +import org.scalatest.junit.JUnitRunner +import org.junit.runner.RunWith + +import java.util.concurrent.TimeUnit + +import akka.remote.{RemoteServer, RemoteClient} +import akka.actor._ +import RemoteTypedActorLog._ + +object ServerInitiatedRemoteTypedSessionActorSpec { + val HOSTNAME = "localhost" + val PORT = 9990 + var server: RemoteServer = null +} + +@RunWith(classOf[JUnitRunner]) +class ServerInitiatedRemoteTypedSessionActorSpec extends + FlatSpec with + ShouldMatchers with + BeforeAndAfterEach { + import ServerInitiatedRemoteTypedActorSpec._ + + private val unit = TimeUnit.MILLISECONDS + + + override def beforeEach = { + server = new RemoteServer() + server.start(HOSTNAME, PORT) + + server.registerTypedPerSessionActor("typed-session-actor-service", + TypedActor.newInstance(classOf[RemoteTypedSessionActor], classOf[RemoteTypedSessionActorImpl], 1000)) + + Thread.sleep(1000) + } + + // make sure the servers shutdown cleanly after the test has finished + override def afterEach = { + try { + server.shutdown + RemoteClient.shutdownAll + Thread.sleep(1000) + } catch { + case e => () + } + } + + "A remote session Actor" should "create a new session actor per connection" in { + clearMessageLogs + + val session1 = RemoteClient.typedActorFor(classOf[RemoteTypedSessionActor], "typed-session-actor-service", 5000L, HOSTNAME, PORT) + + session1.getUser() should equal ("anonymous") + session1.login("session[1]") + session1.getUser() should equal ("session[1]") + + RemoteClient.shutdownAll + + val session2 = RemoteClient.typedActorFor(classOf[RemoteTypedSessionActor], "typed-session-actor-service", 5000L, HOSTNAME, PORT) + + session2.getUser() should equal ("anonymous") + + } + + it should "stop the actor when the client disconnects" in { + + val session1 = RemoteClient.typedActorFor(classOf[RemoteTypedSessionActor], "typed-session-actor-service", 5000L, HOSTNAME, PORT) + + session1.getUser() should equal ("anonymous") + + RemoteTypedSessionActorImpl.getInstances() should have size (1) + RemoteClient.shutdownAll + Thread.sleep(1000) + RemoteTypedSessionActorImpl.getInstances() should have size (0) + + } + + it should "stop the actor when there is an error" in { + + val session1 = RemoteClient.typedActorFor(classOf[RemoteTypedSessionActor], "typed-session-actor-service", 5000L, HOSTNAME, PORT) + + session1.doSomethingFunny() + + RemoteClient.shutdownAll + Thread.sleep(1000) + RemoteTypedSessionActorImpl.getInstances() should have size (0) + + } + + + it should "be able to unregister" in { + server.registerTypedPerSessionActor("my-service-1",TypedActor.newInstance(classOf[RemoteTypedSessionActor], classOf[RemoteTypedSessionActorImpl], 1000)) + + server.typedActorsFactories.get("my-service-1") should not be (null) + server.unregisterTypedPerSessionActor("my-service-1") + server.typedActorsFactories.get("my-service-1") should be (null) + } + +} + diff --git a/akka-remote/src/test/scala/ticket/Ticket506Spec.scala b/akka-remote/src/test/scala/ticket/Ticket506Spec.scala new file mode 100644 index 0000000000..7a15c00a2e --- /dev/null +++ b/akka-remote/src/test/scala/ticket/Ticket506Spec.scala @@ -0,0 +1,61 @@ +package ticket + +import org.scalatest.Spec +import org.scalatest.matchers.ShouldMatchers + +import akka.remote.{RemoteClient, RemoteNode, RemoteServer} +import akka.actor.{Actor, ActorRef} +import akka.serialization.RemoteActorSerialization +import akka.actor.Actor.actorOf + +import java.util.concurrent.{CountDownLatch, TimeUnit} + +object State { + val latch = new CountDownLatch(1) +} + +case class RecvActorRef(bytes:Array[Byte]) + +class ActorRefService extends Actor { + import self._ + + def receive:Receive = { + case RecvActorRef(bytes) => + val ref = RemoteActorSerialization.fromBinaryToRemoteActorRef(bytes) + ref ! "hello" + case "hello" => + State.latch.countDown + } +} + +class Ticket506Spec extends Spec with ShouldMatchers { + val hostname:String = "localhost" + val port:Int = 9440 + + describe("a RemoteActorRef serialized") { + it("should be remotely usable") { + val s1,s2 = new RemoteServer + s1.start(hostname, port) + s2.start(hostname, port + 1) + + val a1,a2 = actorOf[ActorRefService] + a1.homeAddress = (hostname, port) + a2.homeAddress = (hostname, port+1) + + s1.register("service", a1) + s2.register("service", a2) + + // connect to the first server/service + val c1 = RemoteClient.actorFor("service", hostname, port) + + val bytes = RemoteActorSerialization.toRemoteActorRefProtocol(a2).toByteArray + c1 ! RecvActorRef(bytes) + + State.latch.await(1000, TimeUnit.MILLISECONDS) should be(true) + + RemoteClient.shutdownAll + s1.shutdown + s2.shutdown + } + } +} \ No newline at end of file diff --git a/akka-sbt-plugin/src/main/scala/AkkaProject.scala b/akka-sbt-plugin/src/main/scala/AkkaProject.scala index e4d1308d7a..8644311030 100644 --- a/akka-sbt-plugin/src/main/scala/AkkaProject.scala +++ b/akka-sbt-plugin/src/main/scala/AkkaProject.scala @@ -59,7 +59,7 @@ trait AkkaProject extends AkkaBaseProject { val akkaVersion = "1.0-SNAPSHOT" // convenience method - def akkaModule(module: String) = "akka" %% ("akka-" + module) % akkaVersion + def akkaModule(module: String) = "se.scalablesolutions.akka" % ("akka-" + module) % akkaVersion // akka actor dependency by default val akkaActor = akkaModule("actor") diff --git a/akka-spring/src/main/scala/ActorBeanDefinitionParser.scala b/akka-spring/src/main/scala/akka/ActorBeanDefinitionParser.scala similarity index 100% rename from akka-spring/src/main/scala/ActorBeanDefinitionParser.scala rename to akka-spring/src/main/scala/akka/ActorBeanDefinitionParser.scala diff --git a/akka-spring/src/main/scala/ActorFactoryBean.scala b/akka-spring/src/main/scala/akka/ActorFactoryBean.scala similarity index 100% rename from akka-spring/src/main/scala/ActorFactoryBean.scala rename to akka-spring/src/main/scala/akka/ActorFactoryBean.scala diff --git a/akka-spring/src/main/scala/ActorParser.scala b/akka-spring/src/main/scala/akka/ActorParser.scala similarity index 100% rename from akka-spring/src/main/scala/ActorParser.scala rename to akka-spring/src/main/scala/akka/ActorParser.scala diff --git a/akka-spring/src/main/scala/ActorProperties.scala b/akka-spring/src/main/scala/akka/ActorProperties.scala similarity index 100% rename from akka-spring/src/main/scala/ActorProperties.scala rename to akka-spring/src/main/scala/akka/ActorProperties.scala diff --git a/akka-spring/src/main/scala/AkkaNamespaceHandler.scala b/akka-spring/src/main/scala/akka/AkkaNamespaceHandler.scala similarity index 100% rename from akka-spring/src/main/scala/AkkaNamespaceHandler.scala rename to akka-spring/src/main/scala/akka/AkkaNamespaceHandler.scala diff --git a/akka-spring/src/main/scala/AkkaSpringConfigurationTags.scala b/akka-spring/src/main/scala/akka/AkkaSpringConfigurationTags.scala similarity index 100% rename from akka-spring/src/main/scala/AkkaSpringConfigurationTags.scala rename to akka-spring/src/main/scala/akka/AkkaSpringConfigurationTags.scala diff --git a/akka-spring/src/main/scala/CamelServiceBeanDefinitionParser.scala b/akka-spring/src/main/scala/akka/CamelServiceBeanDefinitionParser.scala similarity index 100% rename from akka-spring/src/main/scala/CamelServiceBeanDefinitionParser.scala rename to akka-spring/src/main/scala/akka/CamelServiceBeanDefinitionParser.scala diff --git a/akka-spring/src/main/scala/CamelServiceFactoryBean.scala b/akka-spring/src/main/scala/akka/CamelServiceFactoryBean.scala similarity index 100% rename from akka-spring/src/main/scala/CamelServiceFactoryBean.scala rename to akka-spring/src/main/scala/akka/CamelServiceFactoryBean.scala diff --git a/akka-spring/src/main/scala/ConfiggyPropertyPlaceholderConfigurer.scala b/akka-spring/src/main/scala/akka/ConfiggyPropertyPlaceholderConfigurer.scala similarity index 100% rename from akka-spring/src/main/scala/ConfiggyPropertyPlaceholderConfigurer.scala rename to akka-spring/src/main/scala/akka/ConfiggyPropertyPlaceholderConfigurer.scala diff --git a/akka-spring/src/main/scala/DispatcherBeanDefinitionParser.scala b/akka-spring/src/main/scala/akka/DispatcherBeanDefinitionParser.scala similarity index 100% rename from akka-spring/src/main/scala/DispatcherBeanDefinitionParser.scala rename to akka-spring/src/main/scala/akka/DispatcherBeanDefinitionParser.scala diff --git a/akka-spring/src/main/scala/DispatcherFactoryBean.scala b/akka-spring/src/main/scala/akka/DispatcherFactoryBean.scala similarity index 100% rename from akka-spring/src/main/scala/DispatcherFactoryBean.scala rename to akka-spring/src/main/scala/akka/DispatcherFactoryBean.scala diff --git a/akka-spring/src/main/scala/DispatcherProperties.scala b/akka-spring/src/main/scala/akka/DispatcherProperties.scala similarity index 100% rename from akka-spring/src/main/scala/DispatcherProperties.scala rename to akka-spring/src/main/scala/akka/DispatcherProperties.scala diff --git a/akka-spring/src/main/scala/PropertyEntries.scala b/akka-spring/src/main/scala/akka/PropertyEntries.scala similarity index 100% rename from akka-spring/src/main/scala/PropertyEntries.scala rename to akka-spring/src/main/scala/akka/PropertyEntries.scala diff --git a/akka-spring/src/main/scala/StringReflect.scala b/akka-spring/src/main/scala/akka/StringReflect.scala similarity index 100% rename from akka-spring/src/main/scala/StringReflect.scala rename to akka-spring/src/main/scala/akka/StringReflect.scala diff --git a/akka-spring/src/main/scala/SupervisionBeanDefinitionParser.scala b/akka-spring/src/main/scala/akka/SupervisionBeanDefinitionParser.scala similarity index 100% rename from akka-spring/src/main/scala/SupervisionBeanDefinitionParser.scala rename to akka-spring/src/main/scala/akka/SupervisionBeanDefinitionParser.scala diff --git a/akka-spring/src/main/scala/SupervisionFactoryBean.scala b/akka-spring/src/main/scala/akka/SupervisionFactoryBean.scala similarity index 100% rename from akka-spring/src/main/scala/SupervisionFactoryBean.scala rename to akka-spring/src/main/scala/akka/SupervisionFactoryBean.scala diff --git a/akka-stm/src/main/scala/agent/Agent.scala b/akka-stm/src/main/scala/akka/agent/Agent.scala similarity index 100% rename from akka-stm/src/main/scala/agent/Agent.scala rename to akka-stm/src/main/scala/akka/agent/Agent.scala diff --git a/akka-stm/src/main/scala/stm/Atomic.scala b/akka-stm/src/main/scala/akka/stm/Atomic.scala similarity index 100% rename from akka-stm/src/main/scala/stm/Atomic.scala rename to akka-stm/src/main/scala/akka/stm/Atomic.scala diff --git a/akka-stm/src/main/scala/stm/Ref.scala b/akka-stm/src/main/scala/akka/stm/Ref.scala similarity index 100% rename from akka-stm/src/main/scala/stm/Ref.scala rename to akka-stm/src/main/scala/akka/stm/Ref.scala diff --git a/akka-stm/src/main/scala/stm/Stm.scala b/akka-stm/src/main/scala/akka/stm/Stm.scala similarity index 100% rename from akka-stm/src/main/scala/stm/Stm.scala rename to akka-stm/src/main/scala/akka/stm/Stm.scala diff --git a/akka-stm/src/main/scala/stm/Transaction.scala b/akka-stm/src/main/scala/akka/stm/Transaction.scala similarity index 100% rename from akka-stm/src/main/scala/stm/Transaction.scala rename to akka-stm/src/main/scala/akka/stm/Transaction.scala diff --git a/akka-stm/src/main/scala/stm/TransactionFactory.scala b/akka-stm/src/main/scala/akka/stm/TransactionFactory.scala similarity index 100% rename from akka-stm/src/main/scala/stm/TransactionFactory.scala rename to akka-stm/src/main/scala/akka/stm/TransactionFactory.scala diff --git a/akka-stm/src/main/scala/stm/TransactionFactoryBuilder.scala b/akka-stm/src/main/scala/akka/stm/TransactionFactoryBuilder.scala similarity index 100% rename from akka-stm/src/main/scala/stm/TransactionFactoryBuilder.scala rename to akka-stm/src/main/scala/akka/stm/TransactionFactoryBuilder.scala diff --git a/akka-stm/src/main/scala/stm/TransactionalMap.scala b/akka-stm/src/main/scala/akka/stm/TransactionalMap.scala similarity index 100% rename from akka-stm/src/main/scala/stm/TransactionalMap.scala rename to akka-stm/src/main/scala/akka/stm/TransactionalMap.scala diff --git a/akka-stm/src/main/scala/stm/TransactionalVector.scala b/akka-stm/src/main/scala/akka/stm/TransactionalVector.scala similarity index 100% rename from akka-stm/src/main/scala/stm/TransactionalVector.scala rename to akka-stm/src/main/scala/akka/stm/TransactionalVector.scala diff --git a/akka-stm/src/main/scala/stm/package.scala b/akka-stm/src/main/scala/akka/stm/package.scala similarity index 100% rename from akka-stm/src/main/scala/stm/package.scala rename to akka-stm/src/main/scala/akka/stm/package.scala diff --git a/akka-stm/src/main/scala/transactor/Atomically.scala b/akka-stm/src/main/scala/akka/transactor/Atomically.scala similarity index 100% rename from akka-stm/src/main/scala/transactor/Atomically.scala rename to akka-stm/src/main/scala/akka/transactor/Atomically.scala diff --git a/akka-stm/src/main/scala/transactor/Coordinated.scala b/akka-stm/src/main/scala/akka/transactor/Coordinated.scala similarity index 100% rename from akka-stm/src/main/scala/transactor/Coordinated.scala rename to akka-stm/src/main/scala/akka/transactor/Coordinated.scala diff --git a/akka-stm/src/main/scala/transactor/Transactor.scala b/akka-stm/src/main/scala/akka/transactor/Transactor.scala similarity index 100% rename from akka-stm/src/main/scala/transactor/Transactor.scala rename to akka-stm/src/main/scala/akka/transactor/Transactor.scala diff --git a/akka-stm/src/main/scala/transactor/UntypedTransactor.scala b/akka-stm/src/main/scala/akka/transactor/UntypedTransactor.scala similarity index 100% rename from akka-stm/src/main/scala/transactor/UntypedTransactor.scala rename to akka-stm/src/main/scala/akka/transactor/UntypedTransactor.scala diff --git a/akka-typed-actor/src/main/scala/actor/TypedActor.scala b/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala similarity index 100% rename from akka-typed-actor/src/main/scala/actor/TypedActor.scala rename to akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala diff --git a/akka-typed-actor/src/main/scala/config/TypedActorConfigurator.scala b/akka-typed-actor/src/main/scala/akka/config/TypedActorConfigurator.scala similarity index 100% rename from akka-typed-actor/src/main/scala/config/TypedActorConfigurator.scala rename to akka-typed-actor/src/main/scala/akka/config/TypedActorConfigurator.scala diff --git a/akka-typed-actor/src/main/scala/config/TypedActorGuiceConfigurator.scala b/akka-typed-actor/src/main/scala/akka/config/TypedActorGuiceConfigurator.scala similarity index 100% rename from akka-typed-actor/src/main/scala/config/TypedActorGuiceConfigurator.scala rename to akka-typed-actor/src/main/scala/akka/config/TypedActorGuiceConfigurator.scala diff --git a/akka-typed-actor/src/main/scala/transactor/Coordination.scala b/akka-typed-actor/src/main/scala/akka/transactor/Coordination.scala similarity index 100% rename from akka-typed-actor/src/main/scala/transactor/Coordination.scala rename to akka-typed-actor/src/main/scala/akka/transactor/Coordination.scala diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala index b427e515b4..845e7aed8a 100644 --- a/project/build/AkkaProject.scala +++ b/project/build/AkkaProject.scala @@ -30,7 +30,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { // ------------------------------------------------------------------------------------------------------------------- // Deploy/dist settings // ------------------------------------------------------------------------------------------------------------------- - def distName = "%s_%s-%s".format(name, buildScalaVersion, version) + def distName = "%s-%s".format(name, version) lazy val deployPath = info.projectPath / "deploy" lazy val distPath = info.projectPath / "dist" @@ -307,6 +307,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { // ------------------------------------------------------------------------------------------------------------------- // Miscellaneous // ------------------------------------------------------------------------------------------------------------------- + override def disableCrossPaths = true override def mainClass = Some("akka.kernel.Main") @@ -324,27 +325,27 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { .filter(_.getName.endsWith(".jar")) .filter(!_.getName.contains("servlet_2.4")) .filter(!_.getName.contains("scala-library")) - .map("lib_managed/scala_%s/compile/".format(buildScalaVersion) + _.getName) + .map("lib_managed/compile/" + _.getName) .mkString(" ") + " config/" + " scala-library.jar" + - " dist/akka-actor_%s-%s.jar".format(buildScalaVersion, version) + - " dist/akka-stm_%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) + - " dist/akka-persistence-common_%s-%s.jar".format(buildScalaVersion, version) + - " dist/akka-persistence-redis_%s-%s.jar".format(buildScalaVersion, version) + - " dist/akka-persistence-mongo_%s-%s.jar".format(buildScalaVersion, version) + - " dist/akka-persistence-cassandra_%s-%s.jar".format(buildScalaVersion, version) + - " dist/akka-persistence-voldemort_%s-%s.jar".format(buildScalaVersion, version) + - " dist/akka-persistence-riak_%s-%s.jar".format(buildScalaVersion, version) + - " dist/akka-persistence-hbase_%s-%s.jar".format(buildScalaVersion, version) + - " dist/akka-kernel_%s-%s.jar".format(buildScalaVersion, version) + - " dist/akka-spring_%s-%s.jar".format(buildScalaVersion, version) + - " dist/akka-jta_%s-%s.jar".format(buildScalaVersion, version) + " dist/akka-actor-%s.jar".format(version) + + " dist/akka-stm-%s.jar".format(version) + + " dist/akka-typed-actor-%s.jar".format(version) + + " dist/akka-remote-%s.jar".format(version) + + " dist/akka-http-%s.jar".format(version) + + " dist/akka-camel-%s.jar".format(version) + + " dist/akka-amqp-%s.jar".format(version) + + " dist/akka-persistence-common-%s.jar".format(version) + + " dist/akka-persistence-redis-%s.jar".format(version) + + " dist/akka-persistence-mongo-%s.jar".format(version) + + " dist/akka-persistence-cassandra-%s.jar".format(version) + + " dist/akka-persistence-voldemort-%s.jar".format(version) + + " dist/akka-persistence-riak-%s.jar".format(version) + + " dist/akka-persistence-hbase-%s.jar".format(version) + + " dist/akka-kernel-%s.jar".format(version) + + " dist/akka-spring-%s.jar".format(version) + + " dist/akka-jta-%s.jar".format(version) ) //Exclude slf4j1.5.11 from the classpath, it's conflicting... @@ -376,7 +377,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { override def pomExtra = 2009 - http://akkasource.org + http://akka.io Scalable Solutions AB http://scalablesolutions.se @@ -541,6 +542,8 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { // ------------------------------------------------------------------------------------------------------------------- class AkkaPersistenceParentProject(info: ProjectInfo) extends ParentProject(info) { + override def disableCrossPaths = true + lazy val akka_persistence_common = project("akka-persistence-common", "akka-persistence-common", new AkkaPersistenceCommonProject(_), akka_remote, akka_stm) lazy val akka_persistence_redis = project("akka-persistence-redis", "akka-persistence-redis", @@ -750,6 +753,8 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { // ------------------------------------------------------------------------------------------------------------------- class AkkaOSGiParentProject(info: ProjectInfo) extends ParentProject(info) { + override def disableCrossPaths = true + 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", @@ -786,6 +791,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { } class AkkaOSGiAssemblyProject(info: ProjectInfo) extends DefaultProject(info) { + override def disableCrossPaths = true // Scala bundle val scala_bundle = "com.weiglewilczek.scala-lang-osgi" % "scala-library" % buildScalaVersion % "compile" intransitive @@ -846,6 +852,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { // ------------------------------------------------------------------------------------------------------------------- class AkkaSampleAntsProject(info: ProjectInfo) extends DefaultSpdeProject(info) { + override def disableCrossPaths = true override def spdeSourcePath = mainSourcePath / "spde" } @@ -894,6 +901,8 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { } class AkkaSamplesParentProject(info: ProjectInfo) extends ParentProject(info) { + override def disableCrossPaths = true + lazy val akka_sample_ants = project("akka-sample-ants", "akka-sample-ants", new AkkaSampleAntsProject(_), akka_stm) lazy val akka_sample_chat = project("akka-sample-chat", "akka-sample-chat", @@ -944,12 +953,13 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { ) } - def akkaArtifacts = descendents(info.projectPath / "dist", "*" + buildScalaVersion + "-" + version + ".jar") + def akkaArtifacts = descendents(info.projectPath / "dist", "*-" + version + ".jar") lazy val integrationTestsEnabled = systemOptional[Boolean]("integration.tests",false) lazy val stressTestsEnabled = systemOptional[Boolean]("stress.tests",false) // ------------------------------------------------------------ class AkkaDefaultProject(info: ProjectInfo, val deployPath: Path) extends DefaultProject(info) with DeployProject with OSGiProject { + override def disableCrossPaths = true lazy val sourceArtifact = Artifact(this.artifactID, "source", "jar", Some("sources"), Nil, None) lazy val docsArtifact = Artifact(this.artifactID, "doc", "jar", Some("docs"), Nil, None) override def runClasspath = super.runClasspath +++ (AkkaParentProject.this.info.projectPath / "config")