diff --git a/LICENSE b/LICENSE index 4e1dd06320..011cb9d98a 100755 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ This software is licensed under the Apache 2 license, quoted below. -Copyright 2009-2010 Scalable Solutions AB [http://scalablesolutions.se] +Copyright 2009-2011 Scalable Solutions AB [http://scalablesolutions.se] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of diff --git a/akka-actor/src/main/scala/akka/util/AkkaException.scala b/akka-actor/src/main/scala/akka/AkkaException.scala similarity index 95% rename from akka-actor/src/main/scala/akka/util/AkkaException.scala rename to akka-actor/src/main/scala/akka/AkkaException.scala index e006690123..8ab4f925a6 100644 --- a/akka-actor/src/main/scala/akka/util/AkkaException.scala +++ b/akka-actor/src/main/scala/akka/AkkaException.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka diff --git a/akka-actor/src/main/scala/akka/actor/Implicits.scala b/akka-actor/src/main/scala/akka/Implicits.scala similarity index 88% rename from akka-actor/src/main/scala/akka/actor/Implicits.scala rename to akka-actor/src/main/scala/akka/Implicits.scala index a2d6386d97..6370e1c2fd 100644 --- a/akka-actor/src/main/scala/akka/actor/Implicits.scala +++ b/akka-actor/src/main/scala/akka/Implicits.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka diff --git a/akka-actor/src/main/scala/akka/actor/Actor.scala b/akka-actor/src/main/scala/akka/actor/Actor.scala index 5ce4478391..6d58f782f9 100644 --- a/akka-actor/src/main/scala/akka/actor/Actor.scala +++ b/akka-actor/src/main/scala/akka/actor/Actor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/ActorRef.scala b/akka-actor/src/main/scala/akka/actor/ActorRef.scala index 98b45d7aca..37e470c835 100644 --- a/akka-actor/src/main/scala/akka/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-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/ActorRegistry.scala b/akka-actor/src/main/scala/akka/actor/ActorRegistry.scala index d17f406e89..50c7f72752 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorRegistry.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorRegistry.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/BootableActorLoaderService.scala b/akka-actor/src/main/scala/akka/actor/BootableActorLoaderService.scala index 3d3f06a2c5..0463196eaf 100644 --- a/akka-actor/src/main/scala/akka/actor/BootableActorLoaderService.scala +++ b/akka-actor/src/main/scala/akka/actor/BootableActorLoaderService.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/FSM.scala b/akka-actor/src/main/scala/akka/actor/FSM.scala index 0649eb4605..17c0d1dd64 100644 --- a/akka-actor/src/main/scala/akka/actor/FSM.scala +++ b/akka-actor/src/main/scala/akka/actor/FSM.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/Supervisor.scala b/akka-actor/src/main/scala/akka/actor/Supervisor.scala index daf7a962de..f9ca4d923f 100644 --- a/akka-actor/src/main/scala/akka/actor/Supervisor.scala +++ b/akka-actor/src/main/scala/akka/actor/Supervisor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/actor/UntypedActor.scala b/akka-actor/src/main/scala/akka/actor/UntypedActor.scala index 668dad7f86..3d154c600e 100644 --- a/akka-actor/src/main/scala/akka/actor/UntypedActor.scala +++ b/akka-actor/src/main/scala/akka/actor/UntypedActor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/main/scala/akka/config/Config.scala b/akka-actor/src/main/scala/akka/config/Config.scala index 07dce6f3c5..cb3731679b 100644 --- a/akka-actor/src/main/scala/akka/config/Config.scala +++ b/akka-actor/src/main/scala/akka/config/Config.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.config @@ -20,7 +20,7 @@ class ModuleNotAvailableException(message: String) extends AkkaException(message * @author Jonas Bonér */ object Config extends Logging { - val VERSION = "1.0-RC2-SNAPSHOT" + val VERSION = "1.1-SNAPSHOT" val HOME = { val envHome = System.getenv("AKKA_HOME") match { @@ -64,9 +64,19 @@ object Config extends Logging { "\n\tdue to: " + e.toString) } Configgy.config + } else if (getClass.getClassLoader.getResource(confName) ne null) { + try { + Configgy.configureFromResource(confName, getClass.getClassLoader) + log.slf4j.info("Config [{}] loaded from the application classpath.",confName) + } catch { + case e: ParseException => throw new ConfigurationException( + "Can't load '" + confName + "' config file from application classpath," + + "\n\tdue to: " + e.toString) + } + Configgy.config } else if (HOME.isDefined) { try { - val configFile = HOME.getOrElse(throwNoAkkaHomeException) + "/config/" + confName + val configFile = HOME.get + "/config/" + confName Configgy.configure(configFile) log.slf4j.info( "AKKA_HOME is defined as [{}], config loaded from [{}].", @@ -79,16 +89,6 @@ object Config extends Logging { "\n\tdue to: " + e.toString) } Configgy.config - } else if (getClass.getClassLoader.getResource(confName) ne null) { - try { - Configgy.configureFromResource(confName, getClass.getClassLoader) - log.slf4j.info("Config [{}] loaded from the application classpath.",confName) - } catch { - case e: ParseException => throw new ConfigurationException( - "Can't load '" + confName + "' config file from application classpath," + - "\n\tdue to: " + e.toString) - } - Configgy.config } else { log.slf4j.warn( "\nCan't load '" + confName + "'." + @@ -101,6 +101,7 @@ object Config extends Logging { CConfig.fromString("") // default empty config } } + if (config.getBool("akka.enable-jmx", true)) config.registerWithJmx("akka") val CONFIG_VERSION = config.getString("akka.version", VERSION) if (VERSION != CONFIG_VERSION) throw new ConfigurationException( diff --git a/akka-actor/src/main/scala/akka/config/Configuration.scala b/akka-actor/src/main/scala/akka/config/Configuration.scala index 7e0cb406d4..d6141ac352 100644 --- a/akka-actor/src/main/scala/akka/config/Configuration.scala +++ b/akka-actor/src/main/scala/akka/config/Configuration.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.config diff --git a/akka-actor/src/main/scala/akka/config/Configurator.scala b/akka-actor/src/main/scala/akka/config/Configurator.scala index f63c96b065..e209ee21fb 100644 --- a/akka-actor/src/main/scala/akka/config/Configurator.scala +++ b/akka-actor/src/main/scala/akka/config/Configurator.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.config diff --git a/akka-actor/src/main/scala/akka/config/SupervisionConfig.scala b/akka-actor/src/main/scala/akka/config/SupervisionConfig.scala index f7771d80b5..9f63c64bc1 100644 --- a/akka-actor/src/main/scala/akka/config/SupervisionConfig.scala +++ b/akka-actor/src/main/scala/akka/config/SupervisionConfig.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.config diff --git a/akka-actor/src/main/scala/akka/dataflow/DataFlow.scala b/akka-actor/src/main/scala/akka/dataflow/DataFlow.scala index 5d09a1715f..3abf6c8aca 100644 --- a/akka-actor/src/main/scala/akka/dataflow/DataFlow.scala +++ b/akka-actor/src/main/scala/akka/dataflow/DataFlow.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dataflow diff --git a/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala b/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala index bb58c8600a..56dbc1195e 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Dispatchers.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala index 902d014707..96aa9aef5f 100644 --- a/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenDispatcher.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala index 03e2c37303..53cb3c84e2 100644 --- a/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/ExecutorBasedEventDrivenWorkStealingDispatcher.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/Future.scala b/akka-actor/src/main/scala/akka/dispatch/Future.scala index 2b17ed5313..2fc4026ce4 100644 --- a/akka-actor/src/main/scala/akka/dispatch/Future.scala +++ b/akka-actor/src/main/scala/akka/dispatch/Future.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/HawtDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/HawtDispatcher.scala index 34449d16b6..362c06ec94 100644 --- a/akka-actor/src/main/scala/akka/dispatch/HawtDispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/HawtDispatcher.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/MailboxHandling.scala b/akka-actor/src/main/scala/akka/dispatch/MailboxHandling.scala index 49aa26b840..3751bab666 100644 --- a/akka-actor/src/main/scala/akka/dispatch/MailboxHandling.scala +++ b/akka-actor/src/main/scala/akka/dispatch/MailboxHandling.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/MessageHandling.scala b/akka-actor/src/main/scala/akka/dispatch/MessageHandling.scala index f0f2f259d6..bc8ed1805a 100644 --- a/akka-actor/src/main/scala/akka/dispatch/MessageHandling.scala +++ b/akka-actor/src/main/scala/akka/dispatch/MessageHandling.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/ThreadBasedDispatcher.scala b/akka-actor/src/main/scala/akka/dispatch/ThreadBasedDispatcher.scala index ab7541e65b..a8dfcf5860 100644 --- a/akka-actor/src/main/scala/akka/dispatch/ThreadBasedDispatcher.scala +++ b/akka-actor/src/main/scala/akka/dispatch/ThreadBasedDispatcher.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala b/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala index fa7f4acf19..c8a13229c4 100644 --- a/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala +++ b/akka-actor/src/main/scala/akka/dispatch/ThreadPoolBuilder.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dispatch diff --git a/akka-actor/src/main/scala/akka/routing/Iterators.scala b/akka-actor/src/main/scala/akka/routing/Iterators.scala index c7a6f245c4..a01cc6fe2d 100644 --- a/akka-actor/src/main/scala/akka/routing/Iterators.scala +++ b/akka-actor/src/main/scala/akka/routing/Iterators.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.routing diff --git a/akka-actor/src/main/scala/akka/routing/Listeners.scala b/akka-actor/src/main/scala/akka/routing/Listeners.scala index c80ff21353..3b774d9323 100644 --- a/akka-actor/src/main/scala/akka/routing/Listeners.scala +++ b/akka-actor/src/main/scala/akka/routing/Listeners.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.routing diff --git a/akka-actor/src/main/scala/akka/routing/Routers.scala b/akka-actor/src/main/scala/akka/routing/Routers.scala index e770159b2b..b0283ce77d 100644 --- a/akka-actor/src/main/scala/akka/routing/Routers.scala +++ b/akka-actor/src/main/scala/akka/routing/Routers.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.routing diff --git a/akka-actor/src/main/scala/akka/routing/Routing.scala b/akka-actor/src/main/scala/akka/routing/Routing.scala index 4bbb51ddab..1d43950f8b 100644 --- a/akka-actor/src/main/scala/akka/routing/Routing.scala +++ b/akka-actor/src/main/scala/akka/routing/Routing.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.routing diff --git a/akka-actor/src/main/scala/akka/util/Address.scala b/akka-actor/src/main/scala/akka/util/Address.scala index 8ee1693553..07ffbec303 100644 --- a/akka-actor/src/main/scala/akka/util/Address.scala +++ b/akka-actor/src/main/scala/akka/util/Address.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Bootable.scala b/akka-actor/src/main/scala/akka/util/Bootable.scala index ef1f750e93..bea62e5ac7 100644 --- a/akka-actor/src/main/scala/akka/util/Bootable.scala +++ b/akka-actor/src/main/scala/akka/util/Bootable.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Crypt.scala b/akka-actor/src/main/scala/akka/util/Crypt.scala index c85646987e..c7bb520edc 100644 --- a/akka-actor/src/main/scala/akka/util/Crypt.scala +++ b/akka-actor/src/main/scala/akka/util/Crypt.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Duration.scala b/akka-actor/src/main/scala/akka/util/Duration.scala index 4b8c6e7f9a..1ab14164fe 100644 --- a/akka-actor/src/main/scala/akka/util/Duration.scala +++ b/akka-actor/src/main/scala/akka/util/Duration.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/HashCode.scala b/akka-actor/src/main/scala/akka/util/HashCode.scala index e74f85d069..51d2926bb9 100644 --- a/akka-actor/src/main/scala/akka/util/HashCode.scala +++ b/akka-actor/src/main/scala/akka/util/HashCode.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Helpers.scala b/akka-actor/src/main/scala/akka/util/Helpers.scala index 09f6865984..c2bfcca0af 100644 --- a/akka-actor/src/main/scala/akka/util/Helpers.scala +++ b/akka-actor/src/main/scala/akka/util/Helpers.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/ListenerManagement.scala b/akka-actor/src/main/scala/akka/util/ListenerManagement.scala index f372fac18c..aab92c7601 100644 --- a/akka-actor/src/main/scala/akka/util/ListenerManagement.scala +++ b/akka-actor/src/main/scala/akka/util/ListenerManagement.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/LockUtil.scala b/akka-actor/src/main/scala/akka/util/LockUtil.scala index 977383e9ff..bccf42a121 100644 --- a/akka-actor/src/main/scala/akka/util/LockUtil.scala +++ b/akka-actor/src/main/scala/akka/util/LockUtil.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/Logging.scala b/akka-actor/src/main/scala/akka/util/Logging.scala index f349386d42..87973b5e2c 100644 --- a/akka-actor/src/main/scala/akka/util/Logging.scala +++ b/akka-actor/src/main/scala/akka/util/Logging.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.util diff --git a/akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala b/akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala index b449e45552..606044a66e 100644 --- a/akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala +++ b/akka-actor/src/main/scala/akka/util/ReflectiveAccess.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.util @@ -87,6 +87,49 @@ object ReflectiveAccess extends Logging { } } + object AkkaCloudModule { + + type Mailbox = { + def enqueue(message: MessageInvocation) + def dequeue: MessageInvocation + } + + type Serializer = { + def toBinary(obj: AnyRef): Array[Byte] + def fromBinary(bytes: Array[Byte], clazz: Option[Class[_]]): AnyRef + } + + lazy val isEnabled = clusterObjectInstance.isDefined + + val clusterObjectInstance: Option[AnyRef] = + getObjectFor("akka.cloud.cluster.Cluster$") + + val serializerClass: Option[Class[_]] = + getClassFor("akka.serialization.Serializer") + + def ensureEnabled = if (!isEnabled) throw new ModuleNotAvailableException( + "Feature is only available in Akka Cloud") + + def createFileBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.cloud.cluster.FileBasedMailbox", actorRef) + + def createZooKeeperBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.cloud.cluster.ZooKeeperBasedMailbox", actorRef) + + def createBeanstalkBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.cloud.cluster.BeanstalkBasedMailbox", actorRef) + + def createRedisBasedMailbox(actorRef: ActorRef): Mailbox = createMailbox("akka.cloud.cluster.RedisBasedMailbox", actorRef) + + private def createMailbox(mailboxClassname: String, actorRef: ActorRef): Mailbox = { + ensureEnabled + createInstance( + mailboxClassname, + Array(classOf[ActorRef]), + Array(actorRef).asInstanceOf[Array[AnyRef]], + loader) + .getOrElse(throw new IllegalActorStateException("Could not create durable mailbox [" + mailboxClassname + "] for actor [" + actorRef + "]")) + .asInstanceOf[Mailbox] + } + } + val noParams = Array[Class[_]]() val noArgs = Array[AnyRef]() @@ -130,9 +173,15 @@ object ReflectiveAccess extends Logging { instance.setAccessible(true) Option(instance.get(null).asInstanceOf[T]) } catch { - case e: ClassNotFoundException => + case e: ClassNotFoundException => { log.slf4j.debug("Could not get object [{}] due to [{}]", fqn, e) None + } + case ei: ExceptionInInitializerError => { + log.error("Exception in initializer for object [%s]".format(fqn)) + log.error(ei.getCause, "Cause was:") + throw ei + } } def getClassFor[T](fqn: String, classloader: ClassLoader = loader): Option[Class[T]] = try { diff --git a/akka-actor/src/test/scala/akka/Messages.scala b/akka-actor/src/test/scala/akka/Messages.scala index fda3ba5b91..9f54627a18 100644 --- a/akka-actor/src/test/scala/akka/Messages.scala +++ b/akka-actor/src/test/scala/akka/Messages.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka diff --git a/akka-actor/src/test/scala/akka/actor/actor/ActorRefSpec.scala b/akka-actor/src/test/scala/akka/actor/actor/ActorRefSpec.scala index 35922670f3..b1f715c65c 100644 --- a/akka-actor/src/test/scala/akka/actor/actor/ActorRefSpec.scala +++ b/akka-actor/src/test/scala/akka/actor/actor/ActorRefSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/test/scala/akka/actor/actor/FSMActorSpec.scala b/akka-actor/src/test/scala/akka/actor/actor/FSMActorSpec.scala index ed9a433b73..d948865002 100644 --- a/akka-actor/src/test/scala/akka/actor/actor/FSMActorSpec.scala +++ b/akka-actor/src/test/scala/akka/actor/actor/FSMActorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/test/scala/akka/actor/supervisor/RestartStrategySpec.scala b/akka-actor/src/test/scala/akka/actor/supervisor/RestartStrategySpec.scala index 59bf800909..a930b86784 100644 --- a/akka-actor/src/test/scala/akka/actor/supervisor/RestartStrategySpec.scala +++ b/akka-actor/src/test/scala/akka/actor/supervisor/RestartStrategySpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorHierarchySpec.scala b/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorHierarchySpec.scala index bfdf9b600a..0fee4b77b5 100644 --- a/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorHierarchySpec.scala +++ b/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorHierarchySpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorMiscSpec.scala b/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorMiscSpec.scala index 08de79c400..f02b369387 100644 --- a/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorMiscSpec.scala +++ b/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorMiscSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorSpec.scala b/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorSpec.scala index 814127752e..af0be95de4 100644 --- a/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorSpec.scala +++ b/akka-actor/src/test/scala/akka/actor/supervisor/SupervisorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-actor/src/test/scala/akka/dataflow/DataFlowSpec.scala b/akka-actor/src/test/scala/akka/dataflow/DataFlowSpec.scala index d3b2b7d57a..ae01e84b19 100644 --- a/akka-actor/src/test/scala/akka/dataflow/DataFlowSpec.scala +++ b/akka-actor/src/test/scala/akka/dataflow/DataFlowSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.dataflow diff --git a/akka-actor/src/test/scala/akka/dispatch/ActorModelSpec.scala b/akka-actor/src/test/scala/akka/dispatch/ActorModelSpec.scala index df088ce89c..b282e08090 100644 --- a/akka-actor/src/test/scala/akka/dispatch/ActorModelSpec.scala +++ b/akka-actor/src/test/scala/akka/dispatch/ActorModelSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor.dispatch diff --git a/akka-actor/src/test/scala/akka/dispatch/DispatchersSpec.scala b/akka-actor/src/test/scala/akka/dispatch/DispatchersSpec.scala index ba9398de2c..826cd72690 100644 --- a/akka-actor/src/test/scala/akka/dispatch/DispatchersSpec.scala +++ b/akka-actor/src/test/scala/akka/dispatch/DispatchersSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor.dispatch diff --git a/akka-actor/src/test/scala/akka/dispatch/HawtDispatcherEchoServer.scala b/akka-actor/src/test/scala/akka/dispatch/HawtDispatcherEchoServer.scala index a052ca690d..9fa09e7254 100644 --- a/akka-actor/src/test/scala/akka/dispatch/HawtDispatcherEchoServer.scala +++ b/akka-actor/src/test/scala/akka/dispatch/HawtDispatcherEchoServer.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor.dispatch diff --git a/akka-http/src/main/scala/Jersey.scala b/akka-http/src/main/scala/akka/http/AkkaRestServlet.scala similarity index 90% rename from akka-http/src/main/scala/Jersey.scala rename to akka-http/src/main/scala/akka/http/AkkaRestServlet.scala index 0ee24b0b9f..e91cf2690a 100644 --- a/akka-http/src/main/scala/Jersey.scala +++ b/akka-http/src/main/scala/akka/http/AkkaRestServlet.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.http @@ -14,7 +14,7 @@ class AkkaRestServlet extends ServletContainer { val initParams = new java.util.HashMap[String,String] - addInitParameter("com.sun.jersey.config.property.packages", c.getList("akka.http.resource_packages").mkString(";")) + addInitParameter("com.sun.jersey.config.property.packages", c.getList("akka.http.resource-packages").mkString(";")) addInitParameter("com.sun.jersey.spi.container.ResourceFilters",c.getList("akka.http.filters").mkString(",")) /** @@ -35,4 +35,4 @@ class AkkaRestServlet extends ServletContainer { * Provide possibility to add config params */ def addInitParameter(param: String, value: String): Unit = initParams.put(param,value) -} \ No newline at end of file +} diff --git a/akka-http/src/main/scala/DefaultAkkaLoader.scala b/akka-http/src/main/scala/akka/http/DefaultAkkaLoader.scala similarity index 89% rename from akka-http/src/main/scala/DefaultAkkaLoader.scala rename to akka-http/src/main/scala/akka/http/DefaultAkkaLoader.scala index 0e032f184d..b7c09afde8 100644 --- a/akka-http/src/main/scala/DefaultAkkaLoader.scala +++ b/akka-http/src/main/scala/akka/http/DefaultAkkaLoader.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.http diff --git a/akka-http/src/main/scala/EmbeddedAppServer.scala b/akka-http/src/main/scala/akka/http/EmbeddedAppServer.scala similarity index 97% rename from akka-http/src/main/scala/EmbeddedAppServer.scala rename to akka-http/src/main/scala/akka/http/EmbeddedAppServer.scala index 578ac72964..7fd63d8456 100644 --- a/akka-http/src/main/scala/EmbeddedAppServer.scala +++ b/akka-http/src/main/scala/akka/http/EmbeddedAppServer.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.http diff --git a/akka-http/src/main/scala/JettyContinuation.scala b/akka-http/src/main/scala/akka/http/JettyContinuation.scala similarity index 100% rename from akka-http/src/main/scala/JettyContinuation.scala rename to akka-http/src/main/scala/akka/http/JettyContinuation.scala diff --git a/akka-http/src/main/scala/ListWriter.scala b/akka-http/src/main/scala/akka/http/ListWriter.scala similarity index 95% rename from akka-http/src/main/scala/ListWriter.scala rename to akka-http/src/main/scala/akka/http/ListWriter.scala index b2addd6cd7..3f1123d4d8 100644 --- a/akka-http/src/main/scala/ListWriter.scala +++ b/akka-http/src/main/scala/akka/http/ListWriter.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.http diff --git a/akka-http/src/main/scala/Mist.scala b/akka-http/src/main/scala/akka/http/Mist.scala similarity index 99% rename from akka-http/src/main/scala/Mist.scala rename to akka-http/src/main/scala/akka/http/Mist.scala index b7e1f6ff49..992e4695be 100644 --- a/akka-http/src/main/scala/Mist.scala +++ b/akka-http/src/main/scala/akka/http/Mist.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.http diff --git a/akka-http/src/main/scala/Servlet30Context.scala b/akka-http/src/main/scala/akka/http/Servlet30Context.scala similarity index 96% rename from akka-http/src/main/scala/Servlet30Context.scala rename to akka-http/src/main/scala/akka/http/Servlet30Context.scala index be202006e9..974ece230d 100644 --- a/akka-http/src/main/scala/Servlet30Context.scala +++ b/akka-http/src/main/scala/akka/http/Servlet30Context.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.http diff --git a/akka-http/src/main/scala/Security.scala b/akka-http/src/main/scala/akka/security/Security.scala similarity index 100% rename from akka-http/src/main/scala/Security.scala rename to akka-http/src/main/scala/akka/security/Security.scala diff --git a/akka-http/src/main/scala/AkkaLoader.scala b/akka-http/src/main/scala/akka/servlet/AkkaLoader.scala similarity index 97% rename from akka-http/src/main/scala/AkkaLoader.scala rename to akka-http/src/main/scala/akka/servlet/AkkaLoader.scala index 1ddfce4b7a..6aef44d733 100644 --- a/akka-http/src/main/scala/AkkaLoader.scala +++ b/akka-http/src/main/scala/akka/servlet/AkkaLoader.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.servlet diff --git a/akka-http/src/main/scala/Initializer.scala b/akka-http/src/main/scala/akka/servlet/Initializer.scala similarity index 92% rename from akka-http/src/main/scala/Initializer.scala rename to akka-http/src/main/scala/akka/servlet/Initializer.scala index c9eb1f8f67..cef7463f59 100644 --- a/akka-http/src/main/scala/Initializer.scala +++ b/akka-http/src/main/scala/akka/servlet/Initializer.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.servlet diff --git a/akka-http/src/test/scala/SecuritySpec.scala b/akka-http/src/test/scala/SecuritySpec.scala index 36069e50ad..d67d7e3bb7 100644 --- a/akka-http/src/test/scala/SecuritySpec.scala +++ b/akka-http/src/test/scala/SecuritySpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.security diff --git a/akka-remote/src/main/protocol/RemoteProtocol.proto b/akka-remote/src/main/protocol/RemoteProtocol.proto index 5c8b9b88f3..ee8e298fc5 100644 --- a/akka-remote/src/main/protocol/RemoteProtocol.proto +++ b/akka-remote/src/main/protocol/RemoteProtocol.proto @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ option java_package = "akka.remote.protocol"; diff --git a/akka-remote/src/main/scala/akka/serialization/package.scala b/akka-remote/src/main/scala/akka/Package.scala similarity index 100% rename from akka-remote/src/main/scala/akka/serialization/package.scala rename to akka-remote/src/main/scala/akka/Package.scala diff --git a/akka-remote/src/main/scala/akka/remote/BootableRemoteActorService.scala b/akka-remote/src/main/scala/akka/remote/BootableRemoteActorService.scala index d1d4d954f5..7951dd25f9 100644 --- a/akka-remote/src/main/scala/akka/remote/BootableRemoteActorService.scala +++ b/akka-remote/src/main/scala/akka/remote/BootableRemoteActorService.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.remote diff --git a/akka-remote/src/main/scala/akka/remote/MessageSerializer.scala b/akka-remote/src/main/scala/akka/remote/MessageSerializer.scala index aca0333582..90336649e7 100644 --- a/akka-remote/src/main/scala/akka/remote/MessageSerializer.scala +++ b/akka-remote/src/main/scala/akka/remote/MessageSerializer.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.remote diff --git a/akka-remote/src/main/scala/akka/remote/NettyRemoteSupport.scala b/akka-remote/src/main/scala/akka/remote/NettyRemoteSupport.scala index fff7d49185..b9e8e511de 100644 --- a/akka-remote/src/main/scala/akka/remote/NettyRemoteSupport.scala +++ b/akka-remote/src/main/scala/akka/remote/NettyRemoteSupport.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.remote @@ -404,7 +404,7 @@ class RemoteClientHandler( } catch { case e: Exception => client.notifyListeners(RemoteClientError(e, client)) - log.slf4j.error("Unexpected exception in remote client handler: {}", e) + log.slf4j.error("Unexpected exception in remote client handler", e) throw e } } diff --git a/akka-remote/src/main/scala/akka/serialization/Binary.scala b/akka-remote/src/main/scala/akka/serialization/Binary.scala index 1f93b7f093..71d16fac38 100644 --- a/akka-remote/src/main/scala/akka/serialization/Binary.scala +++ b/akka-remote/src/main/scala/akka/serialization/Binary.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.serialization diff --git a/akka-remote/src/main/scala/akka/serialization/Compression.scala b/akka-remote/src/main/scala/akka/serialization/Compression.scala index 5f8f2e5e94..d0478cc62b 100644 --- a/akka-remote/src/main/scala/akka/serialization/Compression.scala +++ b/akka-remote/src/main/scala/akka/serialization/Compression.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.serialization diff --git a/akka-remote/src/main/scala/akka/serialization/Serializable.scala b/akka-remote/src/main/scala/akka/serialization/Serializable.scala index ba46baef1b..c3564240ad 100644 --- a/akka-remote/src/main/scala/akka/serialization/Serializable.scala +++ b/akka-remote/src/main/scala/akka/serialization/Serializable.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.serialization diff --git a/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala b/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala index 83b75dd5da..f3b110958a 100644 --- a/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala +++ b/akka-remote/src/main/scala/akka/serialization/SerializationProtocol.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.serialization diff --git a/akka-remote/src/main/scala/akka/serialization/Serializer.scala b/akka-remote/src/main/scala/akka/serialization/Serializer.scala index 20c91c8559..7fb8736010 100644 --- a/akka-remote/src/main/scala/akka/serialization/Serializer.scala +++ b/akka-remote/src/main/scala/akka/serialization/Serializer.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.serialization diff --git a/akka-remote/src/test/protocol/ProtobufProtocol.proto b/akka-remote/src/test/protocol/ProtobufProtocol.proto index 84b3ab4990..7f6a2a37c3 100644 --- a/akka-remote/src/test/protocol/ProtobufProtocol.proto +++ b/akka-remote/src/test/protocol/ProtobufProtocol.proto @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor; diff --git a/akka-remote/src/test/scala/Messages.scala b/akka-remote/src/test/scala/Messages.scala index b2200885ac..bb7e8cdbfc 100644 --- a/akka-remote/src/test/scala/Messages.scala +++ b/akka-remote/src/test/scala/Messages.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka diff --git a/akka-remote/src/test/scala/remote/RemoteSupervisorSpec.scala b/akka-remote/src/test/scala/remote/RemoteSupervisorSpec.scala index 550c883800..02b65d4a30 100644 --- a/akka-remote/src/test/scala/remote/RemoteSupervisorSpec.scala +++ b/akka-remote/src/test/scala/remote/RemoteSupervisorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor.remote diff --git a/akka-remote/src/test/scala/remote/RemoteTypedActorSpec.scala b/akka-remote/src/test/scala/remote/RemoteTypedActorSpec.scala index 2301d4b253..b72c49c204 100644 --- a/akka-remote/src/test/scala/remote/RemoteTypedActorSpec.scala +++ b/akka-remote/src/test/scala/remote/RemoteTypedActorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor.remote diff --git a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSample.scala b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSample.scala index 186d5a3362..a0fbb25d84 100644 --- a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSample.scala +++ b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteActorSample.scala @@ -5,6 +5,26 @@ import akka.util.Logging import Actor._ +/************************************* +Instructions how to run the sample: + +* Download Akka distribution. +* Unzip and step into the Akka root dir +* Set AKKA_HOME. For exampe 'export AKKA_HOME=`pwd` + +* Then open up two shells and in each run: +* sbt +* > project akka-remote +* > console + +* Then paste in the code below into both shells. + +Then run: +* ServerInitiatedRemoteActorServer.run in one shell +* ServerInitiatedRemoteActorClient.run in one shell +Have fun. +*************************************/ + class HelloWorldActor extends Actor { self.start diff --git a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteSessionActorSpec.scala b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteSessionActorSpec.scala index 6cad41e5e7..8a97ec3516 100644 --- a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteSessionActorSpec.scala +++ b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteSessionActorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor.remote diff --git a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedActorSpec.scala b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedActorSpec.scala index 79de741377..e26a873b0c 100644 --- a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedActorSpec.scala +++ b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedActorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor.remote diff --git a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedSessionActorSpec.scala b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedSessionActorSpec.scala index 5bbd0f4a29..e357127641 100644 --- a/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedSessionActorSpec.scala +++ b/akka-remote/src/test/scala/remote/ServerInitiatedRemoteTypedSessionActorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor.remote diff --git a/akka-remote/src/test/scala/serialization/TypedActorSerializationSpec.scala b/akka-remote/src/test/scala/serialization/TypedActorSerializationSpec.scala index 861a77d7e0..78ba95d60a 100644 --- a/akka-remote/src/test/scala/serialization/TypedActorSerializationSpec.scala +++ b/akka-remote/src/test/scala/serialization/TypedActorSerializationSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ @@ -146,4 +146,4 @@ class MyStatelessTypedActorImpl extends TypedActor with MyTypedActor { override def requestReply(message: String) : String = { if (message == "hello") "world" else ("hello " + message) } -} \ No newline at end of file +} diff --git a/akka-remote/src/test/scala/ticket/Ticket434Spec.scala b/akka-remote/src/test/scala/ticket/Ticket434Spec.scala index f69b284d92..971f200340 100644 --- a/akka-remote/src/test/scala/ticket/Ticket434Spec.scala +++ b/akka-remote/src/test/scala/ticket/Ticket434Spec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor.ticket diff --git a/akka-remote/src/test/scala/ticket/Ticket519Spec.scala b/akka-remote/src/test/scala/ticket/Ticket519Spec.scala index 5af963d2ff..6edec702b5 100644 --- a/akka-remote/src/test/scala/ticket/Ticket519Spec.scala +++ b/akka-remote/src/test/scala/ticket/Ticket519Spec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor.ticket diff --git a/akka-samples/akka-sample-ants/src/main/scala/Ants.scala b/akka-samples/akka-sample-ants/src/main/scala/Ants.scala index 5cddce66fa..79b14d2e78 100644 --- a/akka-samples/akka-sample-ants/src/main/scala/Ants.scala +++ b/akka-samples/akka-sample-ants/src/main/scala/Ants.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package sample.ants diff --git a/akka-samples/akka-sample-remote/src/main/scala/ClientManagedRemoteActorSample.scala b/akka-samples/akka-sample-remote/src/main/scala/ClientManagedRemoteActorSample.scala index 52281f4fbe..5df1a725ce 100644 --- a/akka-samples/akka-sample-remote/src/main/scala/ClientManagedRemoteActorSample.scala +++ b/akka-samples/akka-sample-remote/src/main/scala/ClientManagedRemoteActorSample.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package sample.remote diff --git a/akka-samples/akka-sample-remote/src/main/scala/ServerManagedRemoteActorSample.scala b/akka-samples/akka-sample-remote/src/main/scala/ServerManagedRemoteActorSample.scala index 7dad199ca5..0c937ccdae 100644 --- a/akka-samples/akka-sample-remote/src/main/scala/ServerManagedRemoteActorSample.scala +++ b/akka-samples/akka-sample-remote/src/main/scala/ServerManagedRemoteActorSample.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package sample.remote diff --git a/akka-sbt-plugin/project/build.properties b/akka-sbt-plugin/project/build.properties index 97c3cd54ad..cad220e416 100644 --- a/akka-sbt-plugin/project/build.properties +++ b/akka-sbt-plugin/project/build.properties @@ -2,6 +2,6 @@ project.name=Akka SBT Plugin # need full domain name for publishing to scala-tools project.organization=se.scalablesolutions.akka # mirrors akka version -project.version=1.0-RC2-SNAPSHOT +project.version=1.1-SNAPSHOT sbt.version=0.7.4 build.scala.versions=2.7.7 diff --git a/akka-sbt-plugin/src/main/scala/AkkaProject.scala b/akka-sbt-plugin/src/main/scala/AkkaProject.scala index e900724d9c..32b22794c9 100644 --- a/akka-sbt-plugin/src/main/scala/AkkaProject.scala +++ b/akka-sbt-plugin/src/main/scala/AkkaProject.scala @@ -56,7 +56,7 @@ trait AkkaBaseProject extends BasicScalaProject { } trait AkkaProject extends AkkaBaseProject { - val akkaVersion = "1.0-RC2-SNAPSHOT" + val akkaVersion = "1.1-SNAPSHOT" // convenience method def akkaModule(module: String) = "se.scalablesolutions.akka" % ("akka-" + module) % akkaVersion diff --git a/akka-stm/src/main/scala/akka/agent/Agent.scala b/akka-stm/src/main/scala/akka/agent/Agent.scala index f250a65f15..708c79d128 100644 --- a/akka-stm/src/main/scala/akka/agent/Agent.scala +++ b/akka-stm/src/main/scala/akka/agent/Agent.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.agent diff --git a/akka-stm/src/main/scala/akka/stm/Atomic.scala b/akka-stm/src/main/scala/akka/stm/Atomic.scala index dc5f192573..c6d7244272 100644 --- a/akka-stm/src/main/scala/akka/stm/Atomic.scala +++ b/akka-stm/src/main/scala/akka/stm/Atomic.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.stm diff --git a/akka-stm/src/main/scala/akka/stm/Ref.scala b/akka-stm/src/main/scala/akka/stm/Ref.scala index 398ab82eee..d6ef09bccd 100644 --- a/akka-stm/src/main/scala/akka/stm/Ref.scala +++ b/akka-stm/src/main/scala/akka/stm/Ref.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.stm diff --git a/akka-stm/src/main/scala/akka/stm/Stm.scala b/akka-stm/src/main/scala/akka/stm/Stm.scala index 2ca9844442..17be90ff52 100644 --- a/akka-stm/src/main/scala/akka/stm/Stm.scala +++ b/akka-stm/src/main/scala/akka/stm/Stm.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.stm diff --git a/akka-stm/src/main/scala/akka/stm/Transaction.scala b/akka-stm/src/main/scala/akka/stm/Transaction.scala index 07580ab7dd..48b9beaf2d 100644 --- a/akka-stm/src/main/scala/akka/stm/Transaction.scala +++ b/akka-stm/src/main/scala/akka/stm/Transaction.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.stm @@ -75,7 +75,8 @@ object Transaction { TransactionManagement.transaction.set(Some(tx)) mtx.registerLifecycleListener(new TransactionLifecycleListener() { def notify(mtx: MultiverseTransaction, event: TransactionLifecycleEvent) = event match { - case TransactionLifecycleEvent.PostCommit => tx.commit + case TransactionLifecycleEvent.PostCommit => tx.commitJta + case TransactionLifecycleEvent.PreCommit => tx.commitPersistentState case TransactionLifecycleEvent.PostAbort => tx.abort case _ => {} } @@ -89,6 +90,7 @@ object Transaction { */ @serializable class Transaction extends Logging { val JTA_AWARE = config.getBool("akka.stm.jta-aware", false) + val STATE_RETRIES = config.getInt("akka.storage.max-retries",10) val id = Transaction.idFactory.incrementAndGet @volatile private[this] var status: TransactionStatus = TransactionStatus.New @@ -109,10 +111,16 @@ object Transaction { jta.foreach { _.beginWithStmSynchronization(this) } } - def commit = synchronized { - log.slf4j.trace("Committing transaction " + toString) - persistentStateMap.valuesIterator.foreach(_.commit) + def commitPersistentState = synchronized { + log.trace("Committing transaction " + toString) + retry(STATE_RETRIES){ + persistentStateMap.valuesIterator.foreach(_.commit) + persistentStateMap.clear + } status = TransactionStatus.Completed + } + + def commitJta = synchronized { jta.foreach(_.commit) } @@ -123,6 +131,21 @@ object Transaction { persistentStateMap.clear } + def retry(tries:Int)(block: => Unit):Unit={ + log.debug("Trying commit of persistent data structures") + if(tries==0){ + throw new TransactionRetryException("Exhausted Retries while committing persistent state") + } + try{ + block + } catch{ + case e:Exception=>{ + log.warn(e,"Exception while committing persistent state, retrying") + retry(tries-1){block} + } + } + } + def isNew = synchronized { status == TransactionStatus.New } def isActive = synchronized { status == TransactionStatus.Active } @@ -144,7 +167,13 @@ object Transaction { private[akka] def isTopLevel = depth.get == 0 //when calling this method, make sure to prefix the uuid with the type so you //have no possibility of kicking a diffferent type with the same uuid out of a transction - private[akka] def register(uuid: String, storage: Committable with Abortable) = persistentStateMap.put(uuid, storage) + private[akka] def register(uuid: String, storage: Committable with Abortable) = { + if(persistentStateMap.getOrElseUpdate(uuid, {storage}) ne storage){ + log.error("existing:"+System.identityHashCode(persistentStateMap.get(uuid).get)) + log.error("new:"+System.identityHashCode(storage)) + throw new IllegalStateException("attempted to register an instance of persistent data structure for id [%s] when there is already a different instance registered".format(uuid)) + } + } private def ensureIsActive = if (status != TransactionStatus.Active) throw new StmConfigurationException( diff --git a/akka-stm/src/main/scala/akka/stm/TransactionFactory.scala b/akka-stm/src/main/scala/akka/stm/TransactionFactory.scala index a6c847002b..8d888b9c80 100644 --- a/akka-stm/src/main/scala/akka/stm/TransactionFactory.scala +++ b/akka-stm/src/main/scala/akka/stm/TransactionFactory.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.stm diff --git a/akka-stm/src/main/scala/akka/stm/TransactionFactoryBuilder.scala b/akka-stm/src/main/scala/akka/stm/TransactionFactoryBuilder.scala index 07eb1ed6df..0765652c6a 100644 --- a/akka-stm/src/main/scala/akka/stm/TransactionFactoryBuilder.scala +++ b/akka-stm/src/main/scala/akka/stm/TransactionFactoryBuilder.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.stm diff --git a/akka-stm/src/main/scala/akka/stm/TransactionalMap.scala b/akka-stm/src/main/scala/akka/stm/TransactionalMap.scala index a149171763..61b131b211 100644 --- a/akka-stm/src/main/scala/akka/stm/TransactionalMap.scala +++ b/akka-stm/src/main/scala/akka/stm/TransactionalMap.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.stm diff --git a/akka-stm/src/main/scala/akka/stm/TransactionalVector.scala b/akka-stm/src/main/scala/akka/stm/TransactionalVector.scala index b3ef8fea34..488b56db78 100644 --- a/akka-stm/src/main/scala/akka/stm/TransactionalVector.scala +++ b/akka-stm/src/main/scala/akka/stm/TransactionalVector.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.stm diff --git a/akka-stm/src/main/scala/akka/stm/package.scala b/akka-stm/src/main/scala/akka/stm/package.scala index 50f9e709b9..055b1d3adf 100644 --- a/akka-stm/src/main/scala/akka/stm/package.scala +++ b/akka-stm/src/main/scala/akka/stm/package.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka diff --git a/akka-stm/src/main/scala/akka/transactor/Atomically.scala b/akka-stm/src/main/scala/akka/transactor/Atomically.scala index e20c85d4b4..94394c777f 100644 --- a/akka-stm/src/main/scala/akka/transactor/Atomically.scala +++ b/akka-stm/src/main/scala/akka/transactor/Atomically.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.transactor diff --git a/akka-stm/src/main/scala/akka/transactor/Coordinated.scala b/akka-stm/src/main/scala/akka/transactor/Coordinated.scala index 81040fce44..730bad3f9c 100644 --- a/akka-stm/src/main/scala/akka/transactor/Coordinated.scala +++ b/akka-stm/src/main/scala/akka/transactor/Coordinated.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.transactor diff --git a/akka-stm/src/main/scala/akka/transactor/Transactor.scala b/akka-stm/src/main/scala/akka/transactor/Transactor.scala index 98871e42a4..8469aa53dd 100644 --- a/akka-stm/src/main/scala/akka/transactor/Transactor.scala +++ b/akka-stm/src/main/scala/akka/transactor/Transactor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.transactor diff --git a/akka-stm/src/main/scala/akka/transactor/UntypedTransactor.scala b/akka-stm/src/main/scala/akka/transactor/UntypedTransactor.scala index 9383d67aaf..c9d4e96aea 100644 --- a/akka-stm/src/main/scala/akka/transactor/UntypedTransactor.scala +++ b/akka-stm/src/main/scala/akka/transactor/UntypedTransactor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.transactor diff --git a/akka-typed-actor/src/main/java/akka/config/DependencyBinding.java b/akka-typed-actor/src/main/java/akka/config/DependencyBinding.java index 207e11cda7..5fd43d99e2 100644 --- a/akka-typed-actor/src/main/java/akka/config/DependencyBinding.java +++ b/akka-typed-actor/src/main/java/akka/config/DependencyBinding.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.config; diff --git a/akka-typed-actor/src/main/java/akka/config/TypedActorGuiceModule.java b/akka-typed-actor/src/main/java/akka/config/TypedActorGuiceModule.java index fbeafce9f6..8c370a8218 100644 --- a/akka-typed-actor/src/main/java/akka/config/TypedActorGuiceModule.java +++ b/akka-typed-actor/src/main/java/akka/config/TypedActorGuiceModule.java @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.config; diff --git a/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala b/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala index e39be47549..4ea2d0f2b9 100644 --- a/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala +++ b/akka-typed-actor/src/main/scala/akka/actor/TypedActor.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor @@ -9,7 +9,7 @@ import akka.dispatch.{MessageDispatcher, Future, CompletableFuture, Dispatchers} import akka.config.Supervision._ import akka.util._ import ReflectiveAccess._ -import akka.transactor.{Coordinated, Coordination} +import akka.transactor.{Coordinated, Coordination, CoordinateException} import akka.transactor.annotation.{Coordinated => CoordinatedAnnotation} import org.codehaus.aspectwerkz.joinpoint.{MethodRtti, JoinPoint} @@ -272,9 +272,46 @@ abstract class TypedActor extends Actor with Proxyable { * * @author Jonas Bonér */ -final class TypedActorContext(private val actorRef: ActorRef) { +final class TypedActorContext(private[akka] val actorRef: ActorRef) { private[akka] var _sender: AnyRef = _ + /** +5 * Returns the uuid for the actor. + */ + def getUuid() = actorRef.uuid + + /** +5 * Returns the uuid for the actor. + */ + def uuid = actorRef.uuid + + def timeout = actorRef.timeout + def getTimout = timeout + def setTimout(timeout: Long) = actorRef.timeout = timeout + + def id = actorRef.id + def getId = id + def setId(id: String) = actorRef.id = id + + def receiveTimeout = actorRef.receiveTimeout + def getReceiveTimeout = receiveTimeout + def setReceiveTimeout(timeout: Long) = actorRef.setReceiveTimeout(timeout) + + /** + * Is the actor running? + */ + def isRunning: Boolean = actorRef.isRunning + + /** + * Is the actor shut down? + */ + def isShutdown: Boolean = actorRef.isShutdown + + /** + * Is the actor ever started? + */ + def isUnstarted: Boolean = actorRef.isUnstarted + /** * Returns the current sender reference. * Scala style getter. @@ -284,27 +321,34 @@ final class TypedActorContext(private val actorRef: ActorRef) { else _sender } + /** + * Returns the current sender future TypedActor reference. + * Scala style getter. + */ + def senderFuture: Option[CompletableFuture[Any]] = actorRef.senderFuture + /** * Returns the current sender reference. * Java style getter. + * @deprecated use 'sender()' */ def getSender: AnyRef = { if (_sender eq null) throw new IllegalActorStateException("Sender reference should not be null.") else _sender } - /** - * Returns the current sender future TypedActor reference. - * Scala style getter. - */ - def senderFuture: Option[CompletableFuture[Any]] = actorRef.senderFuture - /** * Returns the current sender future TypedActor reference. * Java style getter. * This method returns 'null' if the sender future is not available. + * @deprecated use 'senderFuture()' */ def getSenderFuture = senderFuture + + /** + * Returns the home address and port for this actor. + */ + def homeAddress: InetSocketAddress = actorRef.homeAddress.getOrElse(ActorRegistry.homeAddress) } object TypedActorConfiguration { @@ -521,8 +565,8 @@ object TypedActor extends Logging { if (config._messageDispatcher.isDefined) actorRef.dispatcher = config._messageDispatcher.get if (config._threadBasedDispatcher.isDefined) actorRef.dispatcher = Dispatchers.newThreadBasedDispatcher(actorRef) actorRef.timeout = config.timeout - log.slf4j.warn("config._host for {} is {} but homeAddress is {}",intfClass, config._host) - AspectInitRegistry.register(proxy, AspectInit(intfClass, typedActor, actorRef, config._host, actorRef.timeout)) //TODO: REVISIT fix Client managed typed actor + //log.slf4j.debug("config._host for {} is {} but homeAddress is {} and on ref {}",Array[AnyRef](intfClass, config._host, typedActor.context.homeAddress,actorRef.homeAddress)) + AspectInitRegistry.register(proxy, AspectInit(intfClass, typedActor, actorRef, actorRef.homeAddress, actorRef.timeout)) actorRef.start proxy.asInstanceOf[T] } @@ -590,7 +634,7 @@ object TypedActor extends Logging { val jProxy = JProxy.newProxyInstance(intfClass.getClassLoader(), interfaces, handler) val awProxy = Proxy.newInstance(interfaces, Array(jProxy, jProxy), true, false) - AspectInitRegistry.register(awProxy, AspectInit(intfClass, null, actorRef, None, 5000L)) //TODO: does .homeAddress work here or do we need to check if it's local and then provide None? + AspectInitRegistry.register(awProxy, AspectInit(intfClass, null, actorRef, actorRef.homeAddress, 5000L)) awProxy.asInstanceOf[T] } @@ -824,6 +868,9 @@ private[akka] abstract class ActorAspect { actorRef.!(coordinated)(senderActorRef) null.asInstanceOf[AnyRef] + } else if (isCoordinated) { + throw new CoordinateException("Can't use @Coordinated annotation with non-void methods.") + } else if (isOneWay) { actorRef.!(joinPoint)(senderActorRef) null.asInstanceOf[AnyRef] diff --git a/akka-typed-actor/src/main/scala/akka/config/TypedActorConfigurator.scala b/akka-typed-actor/src/main/scala/akka/config/TypedActorConfigurator.scala index e44db8d2c4..451b742793 100644 --- a/akka-typed-actor/src/main/scala/akka/config/TypedActorConfigurator.scala +++ b/akka-typed-actor/src/main/scala/akka/config/TypedActorConfigurator.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.config diff --git a/akka-typed-actor/src/main/scala/akka/config/TypedActorGuiceConfigurator.scala b/akka-typed-actor/src/main/scala/akka/config/TypedActorGuiceConfigurator.scala index 1669122812..321c6b0c3a 100644 --- a/akka-typed-actor/src/main/scala/akka/config/TypedActorGuiceConfigurator.scala +++ b/akka-typed-actor/src/main/scala/akka/config/TypedActorGuiceConfigurator.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.config diff --git a/akka-typed-actor/src/main/scala/akka/transactor/Coordination.scala b/akka-typed-actor/src/main/scala/akka/transactor/Coordination.scala index 7bdf440fb5..33a74fea79 100644 --- a/akka-typed-actor/src/main/scala/akka/transactor/Coordination.scala +++ b/akka-typed-actor/src/main/scala/akka/transactor/Coordination.scala @@ -1,13 +1,16 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.transactor +import akka.AkkaException import akka.stm.Atomic import scala.util.DynamicVariable +class CoordinateException private[akka](message: String) extends AkkaException(message) + /** * Coordinating transactions between typed actors. * diff --git a/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala index 7a34454a24..c8fac4058b 100644 --- a/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala +++ b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorContextSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala index aca3d0b998..4584ccf6a6 100644 --- a/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala +++ b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorGuiceConfiguratorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorRegistrySpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorRegistrySpec.scala index 31c17a725d..cbbb6c169d 100644 --- a/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorRegistrySpec.scala +++ b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorRegistrySpec.scala @@ -1,26 +1,75 @@ package akka.actor -import org.scalatest.junit.JUnitSuite -import org.junit.Test +import org.scalatest.WordSpec +import org.scalatest.matchers.MustMatchers + +import akka.config.Supervision._ +import akka.config._ object TypedActorRegistrySpec { trait My class MyImpl extends TypedActor with My } -class TypedActorRegistrySpec extends JUnitSuite { +class TypedActorRegistrySpec extends WordSpec with MustMatchers { import TypedActorRegistrySpec._ - @Test def shouldGetTypedActorByClassFromActorRegistry { - ActorRegistry.shutdownAll - val my = TypedActor.newInstance[My](classOf[My], classOf[MyImpl], 3000) + "Typed Actor" should { - val actors = ActorRegistry.typedActorsFor(classOf[My]) - assert(actors.length === 1) + "be able to be retreived from the registry by class" in { + ActorRegistry.shutdownAll + val my = TypedActor.newInstance[My](classOf[My], classOf[MyImpl], 3000) + val actors = ActorRegistry.typedActorsFor(classOf[My]) + actors.length must be (1) + ActorRegistry.shutdownAll + } - val option = ActorRegistry.typedActorFor[My] - assert(option != null) - assert(option.isDefined) - ActorRegistry.shutdownAll + "be able to be retreived from the registry by manifest" in { + ActorRegistry.shutdownAll + val my = TypedActor.newInstance[My](classOf[My], classOf[MyImpl], 3000) + val option = ActorRegistry.typedActorFor[My] + option must not be (null) + option.isDefined must be (true) + ActorRegistry.shutdownAll + } + + "be able to be retreived from the registry by class two times" in { + ActorRegistry.shutdownAll + val my = TypedActor.newInstance[My](classOf[My], classOf[MyImpl], 3000) + val actors1 = ActorRegistry.typedActorsFor(classOf[My]) + actors1.length must be (1) + val actors2 = ActorRegistry.typedActorsFor(classOf[My]) + actors2.length must be (1) + ActorRegistry.shutdownAll + } + + "be able to be retreived from the registry by manifest two times" in { + ActorRegistry.shutdownAll + val my = TypedActor.newInstance[My](classOf[My], classOf[MyImpl], 3000) + val option1 = ActorRegistry.typedActorFor[My] + option1 must not be (null) + option1.isDefined must be (true) + val option2 = ActorRegistry.typedActorFor[My] + option2 must not be (null) + option2.isDefined must be (true) + ActorRegistry.shutdownAll + } + + "be able to be retreived from the registry by manifest two times (even when created in supervisor)" in { + ActorRegistry.shutdownAll + val manager = new TypedActorConfigurator + manager.configure( + OneForOneStrategy(classOf[Exception] :: Nil, 3, 1000), + Array(new SuperviseTypedActor(classOf[My], classOf[MyImpl], Permanent, 6000)) + ).supervise + + val option1 = ActorRegistry.typedActorFor[My] + option1 must not be (null) + option1.isDefined must be (true) + val option2 = ActorRegistry.typedActorFor[My] + option2 must not be (null) + option2.isDefined must be (true) + ActorRegistry.shutdownAll + } } } diff --git a/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorSpec.scala b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorSpec.scala index 40a18101cc..12e9691de7 100644 --- a/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorSpec.scala +++ b/akka-typed-actor/src/test/scala/actor/typed-actor/TypedActorSpec.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ package akka.actor diff --git a/akka-typed-actor/src/test/scala/transactor/TypedCoordinatedIncrementSpec.scala b/akka-typed-actor/src/test/scala/transactor/TypedCoordinatedIncrementSpec.scala index 77d9d0ef59..2f8776f564 100644 --- a/akka-typed-actor/src/test/scala/transactor/TypedCoordinatedIncrementSpec.scala +++ b/akka-typed-actor/src/test/scala/transactor/TypedCoordinatedIncrementSpec.scala @@ -6,23 +6,27 @@ import org.scalatest.matchers.MustMatchers import akka.actor.TypedActor import akka.stm.Ref import akka.transactor.annotation.Coordinated +import akka.transactor.CoordinateException import akka.transactor.Coordination._ object TypedCoordinatedIncrement { trait Counter { @Coordinated def increment: Unit + @Coordinated def incrementAndGet: Int def get: Int } class CounterImpl extends TypedActor with Counter { val ref = Ref(0) def increment = ref alter (_ + 1) + def incrementAndGet = { ref alter (_ + 1); ref.get } def get = ref.get } class FailerImpl extends TypedActor with Counter { val ref = Ref(0) def increment = throw new RuntimeException("Expected failure") + def incrementAndGet = throw new RuntimeException("Expected failure") def get = ref.get } } @@ -68,5 +72,11 @@ class TypedCoordinatedIncrementSpec extends WordSpec with MustMatchers { counters foreach (TypedActor.stop) TypedActor.stop(failer) } + + "fail when used with non-void methods" in { + val counter = TypedActor.newInstance(classOf[Counter], classOf[CounterImpl]) + evaluating { counter.incrementAndGet } must produce [CoordinateException] + TypedActor.stop(counter) + } } } diff --git a/config/akka-reference.conf b/config/akka-reference.conf index b84e7409ae..46b05ca1ec 100644 --- a/config/akka-reference.conf +++ b/config/akka-reference.conf @@ -6,12 +6,14 @@ # Modify as needed. akka { - version = "1.0-RC2-SNAPSHOT" # Akka version, checked against the runtime version of Akka. + version = "1.1-SNAPSHOT" # Akka version, checked against the runtime version of Akka. enabled-modules = [] # Comma separated list of the enabled modules. Options: ["remote", "camel", "http"] time-unit = "seconds" # Time unit for all timeout properties throughout the config + enable-jmx = on # expose the configuration through JMX + # These boot classes are loaded (and created) automatically when the Akka Microkernel boots up # Can be used to bootstrap your application(s) # Should be the FQN (Fully Qualified Name) of the boot class which needs to have a default constructor @@ -88,7 +90,7 @@ akka { #If you are using akka.http.AkkaRestServlet filters = ["se.scalablesolutions.akka.security.AkkaSecurityFilterFactory"] # List with all jersey filters to use - resource_packages = ["sample.rest.scala", + resource-packages = ["sample.rest.scala", "sample.rest.java", "sample.security"] # List with all resource packages for your Jersey services authenticator = "sample.security.BasicAuthenticationService" # The authentication service to use. Need to be overridden (sample now) @@ -135,90 +137,4 @@ akka { reconnection-time-window = 600 # Maximum time window that a client should try to reconnect for } } - - persistence { - cassandra { - hostname = "127.0.0.1" # IP address or hostname of one of the Cassandra cluster's seeds - port = 9160 # Port to Cassandra - consistency-level = "QUORUM" # Options: ZERO, ONE, QUORUM, DCQUORUM, DCQUORUMSYNC, ALL, ANY - } - - mongodb { - hostname = "127.0.0.1" # IP address or hostname of the MongoDB DB instance - port = 27017 # Port to MongoDB - dbname = "mydb" - } - - redis { - hostname = "127.0.0.1" # IP address or hostname of the Redis instance - port = 6379 # Port to Redis - } - - couchdb { - url = "http://localhost:5984/testakka/" - } - - hbase { - zookeeper-quorum = "localhost" # A comma separated list of hostnames or IPs of the zookeeper quorum instances - } - - voldemort { - store { - ref = "Refs" # Voldemort Store Used to Persist Refs. Use string serializer for keys, identity serializer for values - maps = "Maps" # Voldemort Store Used to Persist Map Keys. Use identity serializer for keys, identity serializer for values - vector = "Vectors" # Voldemort Store Used to Persist Vector Sizes. Use identity serializer for keys, identity serializer for values - queue = "Queues" # Voldemort Store Used to Persist Vector Values. Use identity serializer for keys, identity serializer for values - } - - client { # The KeyValue pairs under client are converted to java Properties and used to construct the Voldemort ClientConfig - bootstrap_urls = "tcp://localhost:6666" # All Valid Voldemort Client properties are valid here, in string form - } - } - - riak { - bucket { - ref = "Refs" - maps = "Maps" - vector = "Vectors" - queue = "Queues" - } - - client { - host = "localhost" - port = 8087 #Default Riak Protobuf port - } - } - - memcached { - client { - addresses = "localhost:11211" #Formatted according to spymemcached "localhost:11211 otherhost:11211" etc.. - } - } - - simpledb { - account { - id = "YOU NEED TO PROVIDE AN AWS ID" - secretKey = "YOU NEED TO PROVIDE AN AWS SECRETKEY" - } - - client { - #Defaults to default AWS ClientConfiguration - timeout =50000 - #maxconnections = - maxretries = 10 - #protocol = "HTTPS" | "HTTP" - #sockettimeout 50000 - #sendbuffer = 0 - #receivebuffer = 0 - #useragent = "AWS Java SDK-1.0.14" - } - - domain { - ref = "ref" - map = "map" - vector = "vector" - queue = "queue" - } - } - } } diff --git a/project/build.properties b/project/build.properties index eba6b97977..c5b83d798f 100644 --- a/project/build.properties +++ b/project/build.properties @@ -3,6 +3,6 @@ project.organization=se.scalablesolutions.akka project.name=akka sbt.version=0.7.5.RC0 -project.version=1.0-RC2-SNAPSHOT +project.version=1.1-SNAPSHOT def.scala.version=2.7.7 build.scala.versions=2.8.1 diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala index 886e9cd407..e0d95f87da 100644 --- a/project/build/AkkaProject.scala +++ b/project/build/AkkaProject.scala @@ -1,5 +1,5 @@ /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ import com.weiglewilczek.bnd4sbt.BNDPlugin @@ -185,10 +185,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { lazy val sjson = "sjson.json" % "sjson" % "0.8-2.8.0" % "compile" //ApacheV2 lazy val sjson_test = "sjson.json" % "sjson" % "0.8-2.8.0" % "test" //ApacheV2 - lazy val slf4j = "org.slf4j" % "slf4j-api" % SLF4J_VERSION % "compile" //MIT - lazy val logback = "ch.qos.logback" % "logback-classic" % LOGBACK_VERSION % "compile" //LGPL 2.1 - lazy val logback_core = "ch.qos.logback" % "logback-core" % LOGBACK_VERSION % "compile" //LGPL 2.1 lazy val stax_api = "javax.xml.stream" % "stax-api" % "1.0-2" % "compile" //ApacheV2 @@ -212,12 +209,12 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { // Subprojects // ------------------------------------------------------------------------------------------------------------------- - lazy val akka_actor = project("akka-actor", "akka-actor", new AkkaActorProject(_)) - lazy val akka_stm = project("akka-stm", "akka-stm", new AkkaStmProject(_), akka_actor) + lazy val akka_actor = project("akka-actor", "akka-actor", new AkkaActorProject(_)) + lazy val akka_stm = project("akka-stm", "akka-stm", new AkkaStmProject(_), akka_actor) lazy val akka_typed_actor = project("akka-typed-actor", "akka-typed-actor", new AkkaTypedActorProject(_), akka_stm) - lazy val akka_remote = project("akka-remote", "akka-remote", new AkkaRemoteProject(_), akka_typed_actor) - lazy val akka_http = project("akka-http", "akka-http", new AkkaHttpProject(_), akka_remote) - lazy val akka_samples = project("akka-samples", "akka-samples", new AkkaSamplesParentProject(_)) + lazy val akka_remote = project("akka-remote", "akka-remote", new AkkaRemoteProject(_), akka_typed_actor) + lazy val akka_http = project("akka-http", "akka-http", new AkkaHttpProject(_), akka_remote) + lazy val akka_samples = project("akka-samples", "akka-samples", new AkkaSamplesParentProject(_)) // ------------------------------------------------------------------------------------------------------------------- // Miscellaneous @@ -245,11 +242,12 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { // ------------------------------------------------------------ // publishing override def managedStyle = ManagedStyle.Maven + //override def defaultPublishRepository = Some(Resolver.file("maven-local", Path.userHome / ".m2" / "repository" asFile)) val publishTo = Resolver.file("maven-local", Path.userHome / ".m2" / "repository" asFile) val sourceArtifact = Artifact(artifactID, "source", "jar", Some("sources"), Nil, None) - val docsArtifact = Artifact(artifactID, "doc", "jar", Some("docs"), Nil, None) + val docsArtifact = Artifact(artifactID, "doc", "jar", Some("docs"), Nil, None) // Credentials(Path.userHome / ".akka_publish_credentials", log) @@ -300,9 +298,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { val configgy = Dependencies.configgy val hawtdispatch = Dependencies.hawtdispatch val jsr166x = Dependencies.jsr166x - val slf4j = Dependencies.slf4j val logback = Dependencies.logback - val logback_core = Dependencies.logback_core // testing val junit = Dependencies.junit @@ -318,8 +314,8 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { val multiverse = Dependencies.multiverse // testing - val junit = Dependencies.junit - val scalatest = Dependencies.scalatest + val junit = Dependencies.junit + val scalatest = Dependencies.scalatest } // ------------------------------------------------------------------------------------------------------------------- @@ -327,9 +323,9 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { // ------------------------------------------------------------------------------------------------------------------- class AkkaTypedActorProject(info: ProjectInfo) extends AkkaDefaultProject(info, distPath) { - val aopalliance = Dependencies.aopalliance - val aspectwerkz = Dependencies.aspectwerkz - val guicey = Dependencies.guicey + val aopalliance = Dependencies.aopalliance + val aspectwerkz = Dependencies.aspectwerkz + val guicey = Dependencies.guicey // testing val junit = Dependencies.junit @@ -396,6 +392,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { } class AkkaSampleRemoteProject(info: ProjectInfo) extends AkkaDefaultProject(info, deployPath) + class AkkaSampleFSMProject(info: ProjectInfo) extends AkkaDefaultProject(info, deployPath) class AkkaSamplesParentProject(info: ProjectInfo) extends ParentProject(info) { @@ -441,7 +438,8 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { lazy val stressTestsEnabled = systemOptional[Boolean]("stress.tests",false) // ------------------------------------------------------------ - class AkkaDefaultProject(info: ProjectInfo, val deployPath: Path) extends DefaultProject(info) with DeployProject with OSGiProject with McPom { + class AkkaDefaultProject(info: ProjectInfo, val deployPath: Path) extends DefaultProject(info) + with DeployProject with OSGiProject with McPom { 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) @@ -500,32 +498,36 @@ trait McPom { self: DefaultProject => def mcPom(mcs: Set[ModuleConfiguration])(node: Node): Node = { def cleanUrl(url: String) = url match { - case null => "" - case "" => "" + case null => "" + case "" => "" case u if u endsWith "/" => u - case u => u + "/" + case u => u + "/" } - val oldRepos = (node \\ "project" \ "repositories" \ "repository"). - map( n => cleanUrl((n \ "url").text) -> (n \ "name").text).toList - val newRepos = mcs.filter(_.resolver.isInstanceOf[MavenRepository]).map(m => { - val r = m.resolver.asInstanceOf[MavenRepository] - cleanUrl(r.root) -> r.name - }) + val oldRepos = + (node \\ "project" \ "repositories" \ "repository").map { n => + cleanUrl((n \ "url").text) -> (n \ "name").text + }.toList - val repos = Map((oldRepos ++ newRepos):_*).map( pair => - - {pair._2.toSeq.filter(_.isLetterOrDigit).mkString} - {pair._2} - {pair._1} - - ) + val newRepos = + mcs.filter(_.resolver.isInstanceOf[MavenRepository]).map { m => + val r = m.resolver.asInstanceOf[MavenRepository] + cleanUrl(r.root) -> r.name + } - def rewrite(pf:PartialFunction[Node,Node])(ns: Seq[Node]): Seq[Node] = for(subnode <- ns) yield subnode match { - case e: Elem => - if (pf isDefinedAt e) pf(e) - else Elem(e.prefix, e.label, e.attributes, e.scope, rewrite(pf)(e.child):_*) - case other => other + val repos = Map((oldRepos ++ newRepos): _*).map { pair => + + {pair._2.toSeq.filter(_.isLetterOrDigit).mkString} + {pair._2} + {pair._1} + + } + + def rewrite(pf: PartialFunction[Node, Node])(ns: Seq[Node]): Seq[Node] = for(subnode <- ns) yield subnode match { + case e: Elem => + if (pf isDefinedAt e) pf(e) + else Elem(e.prefix, e.label, e.attributes, e.scope, rewrite(pf)(e.child):_*) + case other => other } val rule: PartialFunction[Node,Node] = if ((node \\ "project" \ "repositories" ).isEmpty) { @@ -533,7 +535,7 @@ trait McPom { self: DefaultProject => Elem(prefix, "project", attribs, scope, children ++ {repos}:_*) } else { case Elem(prefix, "repositories", attribs, scope, children @ _*) => - Elem(prefix, "repositories", attribs, scope, repos.toList:_*) + Elem(prefix, "repositories", attribs, scope, repos.toList: _*) } rewrite(rule)(node.theSeq)(0) diff --git a/scripts/generate_config_with_secure_cookie.sh b/scripts/generate_config_with_secure_cookie.sh index 899ec22025..3fcc36a19e 100755 --- a/scripts/generate_config_with_secure_cookie.sh +++ b/scripts/generate_config_with_secure_cookie.sh @@ -3,7 +3,7 @@ exec scala "$0" "$@" !# /** - * Copyright (C) 2009-2010 Scalable Solutions AB + * Copyright (C) 2009-2011 Scalable Solutions AB */ import java.security.{MessageDigest, SecureRandom} diff --git a/scripts/run_akka.sh b/scripts/run_akka.sh index c49106ea9b..a58c021482 100755 --- a/scripts/run_akka.sh +++ b/scripts/run_akka.sh @@ -1,6 +1,6 @@ #!/bin/bash cd $AKKA_HOME -VERSION=1.0-RC2-SNAPSHOT +VERSION=1.1-SNAPSHOT TARGET_DIR=dist/$VERSION/$1 shift 1 VMARGS=$@