From 17ac9b51523641b5dfa07eae86a8231554ccb1a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Mon, 31 May 2010 17:16:37 +0200 Subject: [PATCH 01/24] Refactored Java REST example to work with the new way of doing REST in Akka --- .../src/main/scala/actor/Supervisor.scala | 2 +- .../src/main/java/sample/rest/java/Boot.java | 13 +++++---- .../rest/java/PersistentSimpleService.java | 14 ---------- .../java/PersistentSimpleServiceRest.java | 27 +++++++++++++++++++ .../java/sample/rest/java/SimpleService.java | 14 ---------- .../sample/rest/java/SimpleServiceRest.java | 27 +++++++++++++++++++ 6 files changed, 63 insertions(+), 34 deletions(-) create mode 100644 akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/PersistentSimpleServiceRest.java create mode 100644 akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/SimpleServiceRest.java diff --git a/akka-core/src/main/scala/actor/Supervisor.scala b/akka-core/src/main/scala/actor/Supervisor.scala index 3028a87c60..5607c17e96 100644 --- a/akka-core/src/main/scala/actor/Supervisor.scala +++ b/akka-core/src/main/scala/actor/Supervisor.scala @@ -126,7 +126,7 @@ sealed class Supervisor private[akka] ( private val childActors = new ConcurrentHashMap[String, List[ActorRef]] private val childSupervisors = new CopyOnWriteArrayList[Supervisor] - private[akka] val supervisor = SupervisorActor(handler, trapExceptions) + private[akka] val supervisor = actorOf(new SupervisorActor(handler, trapExceptions)).start def uuid = supervisor.uuid diff --git a/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/Boot.java b/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/Boot.java index 2f97b4ce92..60eb4f11af 100644 --- a/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/Boot.java +++ b/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/Boot.java @@ -1,13 +1,16 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + package sample.rest.java; import se.scalablesolutions.akka.config.ActiveObjectConfigurator; import static se.scalablesolutions.akka.config.JavaConfig.*; public class Boot { - final private ActiveObjectConfigurator manager = new ActiveObjectConfigurator(); - - public Boot() throws Exception { - manager.configure( + public final static ActiveObjectConfigurator configurator = new ActiveObjectConfigurator(); + static { + configurator.configure( new RestartStrategy(new OneForOne(), 3, 5000, new Class[]{Exception.class}), new Component[] { new Component( @@ -19,5 +22,5 @@ public class Boot { new LifeCycle(new Permanent()), 1000) }).supervise(); - } + } } diff --git a/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/PersistentSimpleService.java b/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/PersistentSimpleService.java index 82d4bc5ea5..1108fcdb63 100644 --- a/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/PersistentSimpleService.java +++ b/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/PersistentSimpleService.java @@ -4,10 +4,6 @@ package sample.rest.java; -import javax.ws.rs.Path; -import javax.ws.rs.GET; -import javax.ws.rs.Produces; - import se.scalablesolutions.akka.actor.annotation.transactionrequired; import se.scalablesolutions.akka.actor.annotation.prerestart; import se.scalablesolutions.akka.actor.annotation.postrestart; @@ -16,14 +12,6 @@ import se.scalablesolutions.akka.persistence.cassandra.CassandraStorage; import java.nio.ByteBuffer; -/** - * Try service out by invoking (multiple times): - *
- * curl http://localhost:9998/persistentjavacount
- * 
- * Or browse to the URL from a web browser. - */ -@Path("/persistentjavacount") @transactionrequired public class PersistentSimpleService { private String KEY = "COUNTER"; @@ -31,8 +19,6 @@ public class PersistentSimpleService { private boolean hasStartedTicking = false; private PersistentMap storage; - @GET - @Produces({"application/html"}) public String count() { if (storage == null) storage = CassandraStorage.newMap(); if (!hasStartedTicking) { diff --git a/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/PersistentSimpleServiceRest.java b/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/PersistentSimpleServiceRest.java new file mode 100644 index 0000000000..dc2d2d5aee --- /dev/null +++ b/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/PersistentSimpleServiceRest.java @@ -0,0 +1,27 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package sample.rest.java; + +import javax.ws.rs.Path; +import javax.ws.rs.GET; +import javax.ws.rs.Produces; + +/** + * Try service out by invoking (multiple times): + *
+ * curl http://localhost:9998/persistentjavacount
+ * 
+ * Or browse to the URL from a web browser. + */ +@Path("/persistentjavacount") +public class PersistentSimpleServiceRest { + private PersistentSimpleService service = (PersistentSimpleService) Boot.configurator.getInstance(PersistentSimpleService.class); + + @GET + @Produces({"application/json"}) + public String count() { + return service.count(); + } +} \ No newline at end of file diff --git a/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/SimpleService.java b/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/SimpleService.java index 260df02a3e..44d23e873c 100644 --- a/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/SimpleService.java +++ b/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/SimpleService.java @@ -4,10 +4,6 @@ package sample.rest.java; -import javax.ws.rs.Path; -import javax.ws.rs.GET; -import javax.ws.rs.Produces; - import se.scalablesolutions.akka.actor.ActiveObject; import se.scalablesolutions.akka.actor.ActiveObjectContext; import se.scalablesolutions.akka.actor.annotation.transactionrequired; @@ -16,14 +12,6 @@ import se.scalablesolutions.akka.actor.annotation.postrestart; import se.scalablesolutions.akka.stm.TransactionalState; import se.scalablesolutions.akka.stm.TransactionalMap; -/** - * Try service out by invoking (multiple times): - *
- * curl http://localhost:9998/javacount
- * 
- * Or browse to the URL from a web browser. - */ -@Path("/javacount") @transactionrequired public class SimpleService { private String KEY = "COUNTER"; @@ -32,8 +20,6 @@ public class SimpleService { private TransactionalMap storage; private Receiver receiver = ActiveObject.newInstance(Receiver.class); - @GET - @Produces({"application/json"}) public String count() { if (storage == null) storage = TransactionalState.newMap(); if (!hasStartedTicking) { diff --git a/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/SimpleServiceRest.java b/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/SimpleServiceRest.java new file mode 100644 index 0000000000..ed048f25dc --- /dev/null +++ b/akka-samples/akka-sample-rest-java/src/main/java/sample/rest/java/SimpleServiceRest.java @@ -0,0 +1,27 @@ +/** + * Copyright (C) 2009-2010 Scalable Solutions AB + */ + +package sample.rest.java; + +import javax.ws.rs.Path; +import javax.ws.rs.GET; +import javax.ws.rs.Produces; + +/** + * Try service out by invoking (multiple times): + *
+ * curl http://localhost:9998/javacount
+ * 
+ * Or browse to the URL from a web browser. + */ +@Path("/javacount") +public class SimpleServiceRest { + private SimpleService service = (SimpleService) Boot.configurator.getInstance(SimpleService.class); + + @GET + @Produces({"application/json"}) + public String count() { + return service.count(); + } +} \ No newline at end of file From 33a1d35de0b90fc47383c1553c02aa2e36f2d8a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Mon, 31 May 2010 21:21:52 +0200 Subject: [PATCH 02/24] Added convenience method to ActorRegistry --- akka-core/src/main/scala/actor/ActorRegistry.scala | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/akka-core/src/main/scala/actor/ActorRegistry.scala b/akka-core/src/main/scala/actor/ActorRegistry.scala index ea77b2c6b7..ee1b6e2b4f 100644 --- a/akka-core/src/main/scala/actor/ActorRegistry.scala +++ b/akka-core/src/main/scala/actor/ActorRegistry.scala @@ -65,6 +65,12 @@ object ActorRegistry extends Logging { all.toList } + /** + * Finds any actor that matches T. + */ + def actorFor[T <: Actor](implicit manifest: Manifest[T]): Option[ActorRef] = + actorsFor[T](manifest).headOption + /** * Finds all actors of the exact type specified by the class passed in as the Class argument. */ From e14bbc3b2026ae73d851a4846b7dd229dfbd9a81 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Mon, 31 May 2010 22:34:32 +0200 Subject: [PATCH 03/24] Fixed Jersey dependency --- project/build/AkkaProject.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala index 4ad4858d09..38201eaadd 100644 --- a/project/build/AkkaProject.scala +++ b/project/build/AkkaProject.scala @@ -14,7 +14,7 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) { // ------------------------------------------------------------ // project versions - val JERSEY_VERSION = "1.1.5" + val JERSEY_VERSION = "1.2" val ATMO_VERSION = "0.6-SNAPSHOT" val CASSANDRA_VERSION = "0.6.1" val LIFT_VERSION = "2.0-scala280-SNAPSHOT" From 4c0d7eca4450c4198d9941f4f6a3332dc50c61fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Tue, 1 Jun 2010 09:15:09 +0200 Subject: [PATCH 04/24] Fixed race condition in Agent + improved ScalaDoc --- akka-core/src/main/scala/actor/Actor.scala | 118 +++++++++--------- akka-core/src/main/scala/actor/ActorRef.scala | 2 +- akka-core/src/main/scala/actor/Agent.scala | 3 +- 3 files changed, 60 insertions(+), 63 deletions(-) diff --git a/akka-core/src/main/scala/actor/Actor.scala b/akka-core/src/main/scala/actor/Actor.scala index 2a9e70bde9..8ff0b518f3 100644 --- a/akka-core/src/main/scala/actor/Actor.scala +++ b/akka-core/src/main/scala/actor/Actor.scala @@ -295,8 +295,10 @@ trait Actor extends Logging { type Receive = Actor.Receive /* - * For internal use only, functions as the implicit sender references when invoking - * one of the message send functions (!, !! and !!!). + * Option[ActorRef] representation of the 'self' ActorRef reference. + *

+ * Mainly for internal use, functions as the implicit sender references when invoking + * one of the message send functions ('!', '!!' and '!!!'). */ implicit val optionSelf: Option[ActorRef] = { val ref = Actor.actorRefInCreation.value @@ -313,8 +315,10 @@ trait Actor extends Logging { } /* - * For internal use only, functions as the implicit sender references when invoking - * the forward function. + * Some[ActorRef] representation of the 'self' ActorRef reference. + *

+ * Mainly for internal use, functions as the implicit sender references when invoking + * the 'forward' function. */ implicit val someSelf: Some[ActorRef] = optionSelf.asInstanceOf[Some[ActorRef]] @@ -325,9 +329,31 @@ trait Actor extends Logging { *

    * self ! message
    * 
+ * Here you also find most of the Actor API. + *

+ * For example fields like: + *

+   * self.dispactcher = ...
+   * self.trapExit = ...
+   * self.faultHandler = ...
+   * self.lifeCycle = ...
+   * self.sender
+   * 
+ *

+ * Here you also find methods like: + *

+   * self.reply(..)
+   * self.link(..)
+   * self.unlink(..)
+   * self.start(..)
+   * self.stop(..)
+   * 
*/ - val self: ActorRef = optionSelf.get - self.id = getClass.getName + val self: ActorRef = { + val zelf = optionSelf.get + zelf.id = getClass.getName + zelf + } /** * User overridable callback/setting. @@ -339,64 +365,64 @@ trait Actor extends Logging { *
    *   def receive = {
    *     case Ping =>
-   *       println("got a ping")
+   *       log.info("got a 'Ping' message")
    *       self.reply("pong")
    *
    *     case OneWay =>
-   *       println("got a oneway")
+   *       log.info("got a 'OneWay' message")
    *
-   *     case _ =>
-   *       println("unknown message, ignoring")
+   *     case unknown =>
+   *       log.warning("unknown message [%s], ignoring", unknown)
    * }
    * 
*/ protected def receive: Receive /** - * User overridable callback/setting. + * User overridable callback. *

- * Optional callback method that is called during initialization. - * To be implemented by subclassing actor. + * Is called when an Actor is started by invoking 'actor.start'. */ def init {} + + /** + * User overridable callback. + *

+ * Is called when 'actor.stop' is invoked. + */ + def shutdown {} /** - * User overridable callback/setting. + * User overridable callback. *

- * Mandatory callback method that is called during restart and reinitialization after a server crash. - * To be implemented by subclassing actor. + * Is called on a crashed Actor right BEFORE it is restarted to allow clean up of resources before Actor is terminated. */ def preRestart(reason: Throwable) {} /** - * User overridable callback/setting. + * User overridable callback. *

- * Mandatory callback method that is called during restart and reinitialization after a server crash. - * To be implemented by subclassing actor. + * Is called right AFTER restart on the newly created Actor to allow reinitialization after an Actor crash. */ def postRestart(reason: Throwable) {} /** - * User overridable callback/setting. + * User overridable callback. *

- * Optional callback method that is called during termination. - * To be implemented by subclassing actor. + * Is called during initialization. Can be used to initialize transactional state. Will be invoked within a transaction. */ def initTransactionalState {} - /** - * User overridable callback/setting. - *

- * Optional callback method that is called during termination. - * To be implemented by subclassing actor. - */ - def shutdown {} - // ========================================= // ==== INTERNAL IMPLEMENTATION DETAILS ==== // ========================================= - private[akka] def base: Receive = lifeCycles orElse (self.hotswap getOrElse receive) + private[akka] def base: Receive = try { + lifeCycles orElse (self.hotswap getOrElse receive) + } catch { + case e: NullPointerException => throw new IllegalStateException( + "The 'self' ActorRef reference for [" + getClass.getName + "] is NULL, error in the ActorRef initialization process.") + } private val lifeCycles: Receive = { case HotSwap(code) => self.hotswap = code @@ -415,36 +441,8 @@ trait Actor extends Logging { override def toString = self.toString } +// FIXME remove the ActorMessageInvoker class /** - * Base class for the different dispatcher types. - * - * @author Jonas Bonér - */ -sealed abstract class DispatcherType - -/** - * Module that holds the different dispatcher types. - * - * @author Jonas Bonér - */ -object DispatcherType { - case object EventBasedThreadPooledProxyInvokingDispatcher extends DispatcherType - case object EventBasedSingleThreadDispatcher extends DispatcherType - case object EventBasedThreadPoolDispatcher extends DispatcherType - case object ThreadBasedDispatcher extends DispatcherType -} - -/** - * Actor base trait that should be extended by or mixed to create an Actor with the semantics of the 'Actor Model': - * http://en.wikipedia.org/wiki/Actor_model - *

- * An actor has a well-defined (non-cyclic) life-cycle. - *

- * => NEW (newly created actor) - can't receive messages (yet)
- *     => STARTED (when 'start' is invoked) - can receive messages
- *         => SHUT DOWN (when 'exit' is invoked) - can't do anything
- * 
- * * @author Jonas Bonér */ class ActorMessageInvoker private[akka] (val actorRef: ActorRef) extends MessageInvoker { diff --git a/akka-core/src/main/scala/actor/ActorRef.scala b/akka-core/src/main/scala/actor/ActorRef.scala index 2491863a11..200997d1d2 100644 --- a/akka-core/src/main/scala/actor/ActorRef.scala +++ b/akka-core/src/main/scala/actor/ActorRef.scala @@ -595,7 +595,7 @@ sealed class LocalActorRef private[akka]( @volatile private[akka] var _supervisor: Option[ActorRef] = None protected[akka] val _mailbox: Deque[MessageInvocation] = new ConcurrentLinkedDeque[MessageInvocation] - protected[this] val actorInstance = new AtomicReference[Actor](newActor) + protected[this] val actorInstance = guard.withGuard { new AtomicReference[Actor](newActor) } @volatile private var isInInitialization = false @volatile private var runActorInitialization = false diff --git a/akka-core/src/main/scala/actor/Agent.scala b/akka-core/src/main/scala/actor/Agent.scala index e65a5a5b74..7927041f95 100644 --- a/akka-core/src/main/scala/actor/Agent.scala +++ b/akka-core/src/main/scala/actor/Agent.scala @@ -103,7 +103,6 @@ sealed class Agent[T] private (initialValue: T) { import Actor._ private val dispatcher = actorOf(new AgentDispatcher[T](initialValue)).start - dispatcher ! Value(initialValue) /** * Submits a request to read the internal state. @@ -215,7 +214,7 @@ final class AgentDispatcher[T] private[akka] (initialValue: T) extends Transacto import Actor._ log.debug("Starting up Agent [%s]", self.uuid) - private lazy val value = Ref[T]() + private val value = Ref[T](initialValue) /** * Periodically handles incoming messages. From d109255c9f9434fafe4337098df8caa651307481 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Tue, 1 Jun 2010 09:23:45 +0200 Subject: [PATCH 05/24] Removed ActorMessageInvoker --- akka-core/src/main/scala/actor/Actor.scala | 8 -------- .../AbstractReactorBasedEventDrivenDispatcher.scala | 6 +++--- .../src/main/scala/dispatch/ThreadBasedDispatcher.scala | 7 +++---- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/akka-core/src/main/scala/actor/Actor.scala b/akka-core/src/main/scala/actor/Actor.scala index 8ff0b518f3..120bea199d 100644 --- a/akka-core/src/main/scala/actor/Actor.scala +++ b/akka-core/src/main/scala/actor/Actor.scala @@ -440,11 +440,3 @@ trait Actor extends Logging { override def toString = self.toString } - -// FIXME remove the ActorMessageInvoker class -/** - * @author Jonas Bonér - */ -class ActorMessageInvoker private[akka] (val actorRef: ActorRef) extends MessageInvoker { - def invoke(handle: MessageInvocation) = actorRef.invoke(handle) -} diff --git a/akka-core/src/main/scala/dispatch/AbstractReactorBasedEventDrivenDispatcher.scala b/akka-core/src/main/scala/dispatch/AbstractReactorBasedEventDrivenDispatcher.scala index 72e94526ce..832ae9203a 100644 --- a/akka-core/src/main/scala/dispatch/AbstractReactorBasedEventDrivenDispatcher.scala +++ b/akka-core/src/main/scala/dispatch/AbstractReactorBasedEventDrivenDispatcher.scala @@ -7,19 +7,19 @@ package se.scalablesolutions.akka.dispatch import java.util.{LinkedList, Queue, List} import java.util.HashMap -import se.scalablesolutions.akka.actor.{ActorMessageInvoker, Actor, ActorRef} +import se.scalablesolutions.akka.actor.{Actor, ActorRef} abstract class AbstractReactorBasedEventDrivenDispatcher(val name: String) extends MessageDispatcher { @volatile protected var active: Boolean = false protected val queue = new ReactiveMessageQueue(name) - protected val messageInvokers = new HashMap[AnyRef, MessageInvoker] + protected val messageInvokers = new HashMap[ActorRef, ActorRef] protected var selectorThread: Thread = _ protected val guard = new Object def dispatch(invocation: MessageInvocation) = queue.append(invocation) override def register(actorRef: ActorRef) = synchronized { - messageInvokers.put(actorRef, new ActorMessageInvoker(actorRef)) + messageInvokers.put(actorRef, actorRef) super.register(actorRef) } diff --git a/akka-core/src/main/scala/dispatch/ThreadBasedDispatcher.scala b/akka-core/src/main/scala/dispatch/ThreadBasedDispatcher.scala index f5d8c034c1..5c1cb78a52 100644 --- a/akka-core/src/main/scala/dispatch/ThreadBasedDispatcher.scala +++ b/akka-core/src/main/scala/dispatch/ThreadBasedDispatcher.scala @@ -7,17 +7,16 @@ package se.scalablesolutions.akka.dispatch import java.util.concurrent.LinkedBlockingQueue import java.util.Queue -import se.scalablesolutions.akka.actor.{Actor, ActorRef, ActorMessageInvoker} +import se.scalablesolutions.akka.actor.{Actor, ActorRef} /** * Dedicates a unique thread for each actor passed in as reference. Served through its messageQueue. * * @author Jonas Bonér */ -class ThreadBasedDispatcher(actor: ActorRef) extends MessageDispatcher { +class ThreadBasedDispatcher(private val actor: ActorRef) extends MessageDispatcher { private val name = actor.getClass.getName + ":" + actor.uuid private val threadName = "thread-based:dispatcher:" + name - private val messageHandler = new ActorMessageInvoker(actor) private val queue = new BlockingMessageQueue(name) private var selectorThread: Thread = _ @volatile private var active: Boolean = false @@ -30,7 +29,7 @@ class ThreadBasedDispatcher(actor: ActorRef) extends MessageDispatcher { override def run = { while (active) { try { - messageHandler.invoke(queue.take) + actor.invoke(queue.take) } catch { case e: InterruptedException => active = false } } } From dbad1f461f497914a6603794e3285e62799fbd03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Tue, 1 Jun 2010 09:27:14 +0200 Subject: [PATCH 06/24] Removed MessageInvoker --- akka-core/src/main/scala/dispatch/MessageHandling.scala | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/akka-core/src/main/scala/dispatch/MessageHandling.scala b/akka-core/src/main/scala/dispatch/MessageHandling.scala index 8e094fe108..4a40787bd8 100644 --- a/akka-core/src/main/scala/dispatch/MessageHandling.scala +++ b/akka-core/src/main/scala/dispatch/MessageHandling.scala @@ -53,10 +53,6 @@ trait MessageQueue { def append(handle: MessageInvocation) } -trait MessageInvoker { - def invoke(message: MessageInvocation) -} - trait MessageDispatcher extends Logging { protected val references = new ConcurrentHashMap[String, ActorRef] def dispatch(invocation: MessageInvocation) @@ -65,8 +61,7 @@ trait MessageDispatcher extends Logging { def register(actorRef: ActorRef) = references.put(actorRef.uuid, actorRef) def unregister(actorRef: ActorRef) = { references.remove(actorRef.uuid) - if (canBeShutDown) - shutdown // shut down in the dispatcher's references is zero + if (canBeShutDown) shutdown // shut down in the dispatcher's references is zero } def canBeShutDown: Boolean = references.isEmpty def isShutdown: Boolean From 2245af767a119d93c641fdd7ebeb6b8624ba1eeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Tue, 1 Jun 2010 09:28:39 +0200 Subject: [PATCH 07/24] Added assert for if message is NULL --- akka-core/src/main/scala/dispatch/MessageHandling.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/akka-core/src/main/scala/dispatch/MessageHandling.scala b/akka-core/src/main/scala/dispatch/MessageHandling.scala index 4a40787bd8..7dcf3f5554 100644 --- a/akka-core/src/main/scala/dispatch/MessageHandling.scala +++ b/akka-core/src/main/scala/dispatch/MessageHandling.scala @@ -19,6 +19,7 @@ final class MessageInvocation(val receiver: ActorRef, val senderFuture: Option[CompletableFuture[Any]], val transactionSet: Option[CountDownCommitBarrier]) { if (receiver eq null) throw new IllegalArgumentException("receiver is null") + if (message eq null) throw new IllegalArgumentException("message is null") def invoke = receiver.invoke(this) From a8b2253325f7fdfc00e5b10552d836b1a570c08d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Tue, 1 Jun 2010 09:33:14 +0200 Subject: [PATCH 08/24] Added guard for NULL inital values in Agent --- akka-core/src/main/scala/actor/Agent.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/akka-core/src/main/scala/actor/Agent.scala b/akka-core/src/main/scala/actor/Agent.scala index 7927041f95..e20f1d8da9 100644 --- a/akka-core/src/main/scala/actor/Agent.scala +++ b/akka-core/src/main/scala/actor/Agent.scala @@ -101,6 +101,7 @@ class AgentException private[akka](message: String) extends RuntimeException(mes sealed class Agent[T] private (initialValue: T) { import Agent._ import Actor._ + if (initialValue eq null) throw new AgentException("Initial value to Agent can't be NULL") private val dispatcher = actorOf(new AgentDispatcher[T](initialValue)).start From ba61e3647cb619a8abdb311d764c46599d0cbfc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Tue, 1 Jun 2010 18:10:48 +0200 Subject: [PATCH 09/24] Removed redundant servlet spec API jar from dist manifest --- akka-core/src/main/scala/actor/Agent.scala | 7 +++---- .../src/main/scala/dispatch/MessageHandling.scala | 13 ++++++++++++- project/build/AkkaProject.scala | 9 +-------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/akka-core/src/main/scala/actor/Agent.scala b/akka-core/src/main/scala/actor/Agent.scala index e20f1d8da9..b800c94f23 100644 --- a/akka-core/src/main/scala/actor/Agent.scala +++ b/akka-core/src/main/scala/actor/Agent.scala @@ -88,7 +88,8 @@ class AgentException private[akka](message: String) extends RuntimeException(mes * *

* -* IMPORTANT: +* IMPORTANT: +*

* You can *not* call 'agent.get', 'agent()' or use the monadic 'foreach', * 'map' and 'flatMap' within an enclosing transaction since that would block * the transaction indefinitely. But all other operations are fine. The system @@ -101,7 +102,6 @@ class AgentException private[akka](message: String) extends RuntimeException(mes sealed class Agent[T] private (initialValue: T) { import Agent._ import Actor._ - if (initialValue eq null) throw new AgentException("Initial value to Agent can't be NULL") private val dispatcher = actorOf(new AgentDispatcher[T](initialValue)).start @@ -233,6 +233,5 @@ final class AgentDispatcher[T] private[akka] (initialValue: T) extends Transacto * Performs a CAS operation, atomically swapping the internal state with the value * provided as a by-name parameter. */ - private final def swap(newData: => T): Unit = value.swap(newData) + private def swap(newData: => T): Unit = value.swap(newData) } - diff --git a/akka-core/src/main/scala/dispatch/MessageHandling.scala b/akka-core/src/main/scala/dispatch/MessageHandling.scala index 7dcf3f5554..fbf52224ce 100644 --- a/akka-core/src/main/scala/dispatch/MessageHandling.scala +++ b/akka-core/src/main/scala/dispatch/MessageHandling.scala @@ -13,13 +13,15 @@ import java.util.concurrent.ConcurrentHashMap import org.multiverse.commitbarriers.CountDownCommitBarrier +/** + * @author Jonas Bonér + */ final class MessageInvocation(val receiver: ActorRef, val message: Any, val sender: Option[ActorRef], val senderFuture: Option[CompletableFuture[Any]], val transactionSet: Option[CountDownCommitBarrier]) { if (receiver eq null) throw new IllegalArgumentException("receiver is null") - if (message eq null) throw new IllegalArgumentException("message is null") def invoke = receiver.invoke(this) @@ -50,10 +52,16 @@ final class MessageInvocation(val receiver: ActorRef, } } +/** + * @author Jonas Bonér + */ trait MessageQueue { def append(handle: MessageInvocation) } +/** + * @author Jonas Bonér + */ trait MessageDispatcher extends Logging { protected val references = new ConcurrentHashMap[String, ActorRef] def dispatch(invocation: MessageInvocation) @@ -69,6 +77,9 @@ trait MessageDispatcher extends Logging { def usesActorMailbox : Boolean } +/** + * @author Jonas Bonér + */ trait MessageDemultiplexer { def select def wakeUp diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala index 4ad4858d09..21f2332fcb 100644 --- a/project/build/AkkaProject.scala +++ b/project/build/AkkaProject.scala @@ -66,14 +66,6 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) { val atmosphereModuleConfig = ModuleConfiguration("org.atmosphere", sonatypeSnapshotRepo) val liftModuleConfig = ModuleConfiguration("net.liftweb", ScalaToolsSnapshots) - /* These are not needed and can possibly be deleted. - val databinder = "DataBinder" at "http://databinder.net/repo" - // val configgy = "Configgy" at "http://www.lag.net/repo" - val codehaus = "Codehaus" at "http://repository.codehaus.org" - val codehaus_snapshots = "Codehaus Snapshots" at "http://snapshots.repository.codehaus.org" - val google = "Google" at "http://google-maven-repository.googlecode.com/svn/repository" - */ - // ------------------------------------------------------------ // project defintions lazy val akka_core = project("akka-core", "akka-core", new AkkaCoreProject(_)) @@ -108,6 +100,7 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) { // create a manifest with all akka jars and dependency jars on classpath override def manifestClassPath = Some(allArtifacts.getFiles .filter(_.getName.endsWith(".jar")) + .filter(!_.getName.contains("servlet_2.4")) .filter(!_.getName.contains("scala-library")) .map("lib_managed/scala_%s/compile/".format(buildScalaVersion) + _.getName) .mkString(" ") + From 31ef608313e01c1dfc8b0e19fd1831357373f431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Tue, 1 Jun 2010 18:11:55 +0200 Subject: [PATCH 10/24] Added activemq-data to .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c4a1e0a3be..ef2fb469bb 100755 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ *~ *# src_managed -project/plugins/project/ +activemq-data +project/plugins/project project/boot/* */project/build/target */project/boot From ce684b86353ec2a0fbd66d23c77c99505b132651 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Tue, 1 Jun 2010 18:33:37 +0200 Subject: [PATCH 11/24] Converted tabs to spaces --- akka-core/src/main/scala/remote/Cluster.scala | 8 ++-- .../src/test/scala/ActorPatternsTest.scala | 6 +-- akka-fun-test-java/pom.xml | 8 ++-- .../src/main/scala/EmbeddedAppServer.scala | 2 +- .../src/main/scala/SimpleService.scala | 38 +++++++++---------- .../src/main/scala/SimpleService.scala | 12 +++--- project/build/AkkaProject.scala | 9 ++--- 7 files changed, 40 insertions(+), 43 deletions(-) diff --git a/akka-core/src/main/scala/remote/Cluster.scala b/akka-core/src/main/scala/remote/Cluster.scala index 66f7b59baa..32380bec7d 100644 --- a/akka-core/src/main/scala/remote/Cluster.scala +++ b/akka-core/src/main/scala/remote/Cluster.scala @@ -261,11 +261,11 @@ object Cluster extends Cluster with Logging { sup <- createSupervisor(actorRef) } { val serializer = Class.forName(config.getString( - "akka.remote.cluster.serializer", DEFAULT_SERIALIZER_CLASS_NAME)) - .newInstance.asInstanceOf[Serializer] + "akka.remote.cluster.serializer", DEFAULT_SERIALIZER_CLASS_NAME)) + .newInstance.asInstanceOf[Serializer] - classLoader = serializerClassLoader orElse classLoader - serializer.classLoader = classLoader + classLoader = serializerClassLoader orElse classLoader + serializer.classLoader = classLoader actorRef.start sup.start actorRef ! InitClusterActor(serializer) diff --git a/akka-core/src/test/scala/ActorPatternsTest.scala b/akka-core/src/test/scala/ActorPatternsTest.scala index fac59a163c..028ea80ea3 100644 --- a/akka-core/src/test/scala/ActorPatternsTest.scala +++ b/akka-core/src/test/scala/ActorPatternsTest.scala @@ -21,14 +21,14 @@ class ActorPatternsTest extends junit.framework.TestCase with Suite with MustMat val (testMsg1,testMsg2,testMsg3,testMsg4) = ("test1","test2","test3","test4") val targetOk = new AtomicInteger(0) val t1 = actorOf( new Actor() { - def receive = { + def receive = { case `testMsg1` => self.reply(3) case `testMsg2` => self.reply(7) } } ).start val t2 = actorOf( new Actor() { - def receive = { + def receive = { case `testMsg3` => self.reply(11) } }).start @@ -45,7 +45,7 @@ class ActorPatternsTest extends junit.framework.TestCase with Suite with MustMat } yield a + b + c result.get must be(21) - for(a <- List(t1,t2,d)) a.stop + for(a <- List(t1,t2,d)) a.stop } @Test def testLogger = { diff --git a/akka-fun-test-java/pom.xml b/akka-fun-test-java/pom.xml index c8ddef3320..c7ce656cf3 100644 --- a/akka-fun-test-java/pom.xml +++ b/akka-fun-test-java/pom.xml @@ -10,7 +10,7 @@ jar - 2.8.0.RC2 + 2.8.0.RC3 0.5.2 1.1.5 1.9.18-i @@ -35,18 +35,18 @@ se.scalablesolutions.akka - akka-kernel_2.8.0.RC2 + akka-kernel_2.8.0.RC3 0.9 se.scalablesolutions.akka - akka-persistence-cassandra_2.8.0.RC2 + akka-persistence-cassandra_2.8.0.RC3 0.9 com.google.protobuf protobuf-java - 2.2.0 + 2.3.0 org.codehaus.jackson diff --git a/akka-kernel/src/main/scala/EmbeddedAppServer.scala b/akka-kernel/src/main/scala/EmbeddedAppServer.scala index 41e6dd44ae..5d3001edbd 100644 --- a/akka-kernel/src/main/scala/EmbeddedAppServer.scala +++ b/akka-kernel/src/main/scala/EmbeddedAppServer.scala @@ -65,7 +65,7 @@ trait EmbeddedAppServer extends Bootable with Logging { config.getList("akka.rest.resource_packages").mkString(";") ) adapter.addInitParameter("com.sun.jersey.spi.container.ResourceFilters", - config.getList("akka.rest.filters").mkString(",") + config.getList("akka.rest.filters").mkString(",") ) if (HOME.isDefined) adapter.addRootFolder(HOME.get + "/deploy/root") diff --git a/akka-samples/akka-sample-rest-scala/src/main/scala/SimpleService.scala b/akka-samples/akka-sample-rest-scala/src/main/scala/SimpleService.scala index e8f3576e9f..18b8bda6e6 100644 --- a/akka-samples/akka-sample-rest-scala/src/main/scala/SimpleService.scala +++ b/akka-samples/akka-sample-rest-scala/src/main/scala/SimpleService.scala @@ -51,12 +51,12 @@ class SimpleService { @GET @Produces(Array("text/html")) def count = { - //Fetch the first actor of type SimpleServiceActor - //Send it the "Tick" message and expect a NdeSeq back - val result = for{a <- actorsFor(classOf[SimpleServiceActor]).headOption - r <- a.!![NodeSeq]("Tick")} yield r - //Return either the resulting NodeSeq or a default one - result getOrElse Error in counter + //Fetch the first actor of type SimpleServiceActor + //Send it the "Tick" message and expect a NdeSeq back + val result = for{a <- actorsFor(classOf[SimpleServiceActor]).headOption + r <- a.!![NodeSeq]("Tick")} yield r + //Return either the resulting NodeSeq or a default one + result getOrElse Error in counter } } class SimpleServiceActor extends Transactor { @@ -105,12 +105,12 @@ class PersistentSimpleService { @GET @Produces(Array("text/html")) def count = { - //Fetch the first actor of type PersistentSimpleServiceActor - //Send it the "Tick" message and expect a NdeSeq back - val result = for{a <- actorsFor(classOf[PersistentSimpleServiceActor]).headOption - r <- a.!![NodeSeq]("Tick")} yield r - //Return either the resulting NodeSeq or a default one - result getOrElse Error in counter + //Fetch the first actor of type PersistentSimpleServiceActor + //Send it the "Tick" message and expect a NdeSeq back + val result = for{a <- actorsFor(classOf[PersistentSimpleServiceActor]).headOption + r <- a.!![NodeSeq]("Tick")} yield r + //Return either the resulting NodeSeq or a default one + result getOrElse Error in counter } } @@ -147,18 +147,18 @@ class Chat { @Consumes(Array("application/x-www-form-urlencoded")) @Produces(Array("text/html")) def publishMessage(form: MultivaluedMap[String, String]) = { - val msg = ChatMsg(form.getFirst("name"),form.getFirst("action"),form.getFirst("message")) + val msg = ChatMsg(form.getFirst("name"),form.getFirst("action"),form.getFirst("message")) //Fetch the first actor of type ChatActor - //Send it the "Tick" message and expect a NdeSeq back - val result = for{a <- actorsFor(classOf[ChatActor]).headOption - r <- a.!![String](msg)} yield r - //Return either the resulting String or a default one - result getOrElse "System__error" + //Send it the "Tick" message and expect a NdeSeq back + val result = for{a <- actorsFor(classOf[ChatActor]).headOption + r <- a.!![String](msg)} yield r + //Return either the resulting String or a default one + result getOrElse "System__error" } } object ChatActor { - case class ChatMsg(val who: String, val what: String, val msg: String) + case class ChatMsg(val who: String, val what: String, val msg: String) } class ChatActor extends Actor with Logging { diff --git a/akka-samples/akka-sample-security/src/main/scala/SimpleService.scala b/akka-samples/akka-sample-security/src/main/scala/SimpleService.scala index 4fd5a8a63d..800fdca7ff 100644 --- a/akka-samples/akka-sample-security/src/main/scala/SimpleService.scala +++ b/akka-samples/akka-sample-security/src/main/scala/SimpleService.scala @@ -120,12 +120,12 @@ class SecureTickService { def paranoiaTick = tick def tick = { - //Fetch the first actor of type PersistentSimpleServiceActor - //Send it the "Tick" message and expect a NdeSeq back - val result = for{a <- actorsFor(classOf[SecureTickActor]).headOption - r <- a.!![Integer]("Tick")} yield r - //Return either the resulting NodeSeq or a default one - result match { + //Fetch the first actor of type PersistentSimpleServiceActor + //Send it the "Tick" message and expect a NdeSeq back + val result = for{a <- actorsFor(classOf[SecureTickActor]).headOption + r <- a.!![Integer]("Tick")} yield r + //Return either the resulting NodeSeq or a default one + result match { case (Some(counter)) => (Tick: {counter}) case _ => (Error in counter) } diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala index 21f2332fcb..173d310a12 100644 --- a/project/build/AkkaProject.scala +++ b/project/build/AkkaProject.scala @@ -156,7 +156,7 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) { import Process._ lazy val publishLocalMvn = runMvnInstall def runMvnInstall = task { - for(absPath <- akkaArtifacts.getPaths) { + for (absPath <- akkaArtifacts.getPaths) { val artifactRE = """(.*)/dist/(.*)-(.*).jar""".r val artifactRE(path, artifactId, artifactVersion) = absPath val command = "mvn install:install-file" + @@ -390,12 +390,9 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) { ) } - def akkaArtifacts = { - descendents(info.projectPath / "dist", "*" + buildScalaVersion + "-" + version + ".jar") - } + def akkaArtifacts = descendents(info.projectPath / "dist", "*" + buildScalaVersion + "-" + version + ".jar") + // ------------------------------------------------------------ - - class AkkaDefaultProject(info: ProjectInfo, val deployPath: Path) extends DefaultProject(info) with DeployProject trait DeployProject extends DefaultProject { From 7ed3ad379885bbf2da2b6e843726fb9f94b8f6b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Tue, 1 Jun 2010 18:41:39 +0200 Subject: [PATCH 12/24] Removed trailing whitespace --- .../src/main/scala/actor/ActiveObject.scala | 50 ++++++------ akka-core/src/main/scala/actor/Actor.scala | 4 +- akka-core/src/main/scala/actor/ActorRef.scala | 6 +- .../src/main/scala/remote/RemoteClient.scala | 16 ++-- .../src/main/scala/remote/RemoteServer.scala | 2 +- .../src/main/scala/routing/Listeners.scala | 4 +- .../src/main/scala/stm/Transaction.scala | 4 +- .../src/test/scala/ActorPatternsTest.scala | 2 +- akka-core/src/test/scala/StmSpec.scala | 30 +++---- akka-http/src/main/scala/AkkaLoader.scala | 44 +++++------ .../src/main/scala/EmbeddedAppServer.scala | 4 +- .../main/scala/CassandraStorageBackend.scala | 6 +- .../scala/CassandraPersistentActorSpec.scala | 2 +- .../src/main/scala/Storage.scala | 62 +++++++-------- .../src/main/scala/StorageBackend.scala | 20 ++--- .../src/main/scala/MongoStorageBackend.scala | 2 +- .../src/main/scala/Ants.scala | 2 +- .../src/main/scala/Application1.scala | 2 +- .../src/main/scala/Application2.scala | 2 +- .../src/main/scala/Boot.scala | 2 +- .../src/main/scala/ChatServer.scala | 78 +++++++++---------- .../main/scala/bootstrap/liftweb/Boot.scala | 8 +- .../src/test/scala/LiftConsole.scala | 2 +- .../src/main/scala/RedisPubSub.scala | 14 ++-- .../ClientManagedRemoteActorSample.scala | 4 +- .../ServerManagedRemoteActorSample.scala | 4 +- .../src/main/scala/SimpleService.scala | 2 +- .../src/main/scala/SimpleService.scala | 2 +- config/akka-reference.conf | 26 +++---- config/log4j.properties | 40 +++++----- config/storage-conf.xml | 56 ++++++------- project/build/AkkaProject.scala | 40 +++++----- project/plugins/Plugins.scala | 2 +- scripts/remove_trailing_whitespace.sh | 2 +- 34 files changed, 273 insertions(+), 273 deletions(-) diff --git a/akka-core/src/main/scala/actor/ActiveObject.scala b/akka-core/src/main/scala/actor/ActiveObject.scala index 9ec943cfc6..0780e355dd 100644 --- a/akka-core/src/main/scala/actor/ActiveObject.scala +++ b/akka-core/src/main/scala/actor/ActiveObject.scala @@ -66,23 +66,23 @@ final class ActiveObjectConfiguration { } /** - * Holds RTTI (runtime type information) for the Active Object, f.e. current 'sender' + * Holds RTTI (runtime type information) for the Active Object, f.e. current 'sender' * reference, the 'senderFuture' reference etc. *

- * In order to make use of this context you have to create a member field in your - * Active Object that has the type 'ActiveObjectContext', then an instance will - * be injected for you to use. + * In order to make use of this context you have to create a member field in your + * Active Object that has the type 'ActiveObjectContext', then an instance will + * be injected for you to use. *

- * This class does not contain static information but is updated by the runtime system - * at runtime. + * This class does not contain static information but is updated by the runtime system + * at runtime. *

- * Here is an example of usage: + * Here is an example of usage: *

  * class Ping {
- *   // This context will be injected, holds RTTI (runtime type information) 
- *   // for the current message send 
+ *   // This context will be injected, holds RTTI (runtime type information)
+ *   // for the current message send
  *   private ActiveObjectContext context = null;
- *   
+ *
  *   public void hit(int count) {
  *     Pong pong = (Pong) context.getSender();
  *     pong.hit(count++)
@@ -100,19 +100,19 @@ final class ActiveObjectContext {
    * Returns the current sender Active Object reference.
    * Scala style getter.
    */
-  def sender: AnyRef = { 
+  def sender: AnyRef = {
     if (_sender eq null) throw new IllegalStateException("Sender reference should not be null.")
     else _sender
-  } 
+  }
 
   /**
    * Returns the current sender Active Object reference.
    * Java style getter.
    */
-   def getSender: AnyRef = { 
+   def getSender: AnyRef = {
      if (_sender eq null) throw new IllegalStateException("Sender reference should not be null.")
      else _sender
-   } 
+   }
 
   /**
    * Returns the current sender future Active Object reference.
@@ -364,7 +364,7 @@ object ActiveObject extends Logging {
     proxy.asInstanceOf[T]
   }
 
-  private[akka] def newInstance[T](intf: Class[T], target: AnyRef, actorRef: ActorRef, 
+  private[akka] def newInstance[T](intf: Class[T], target: AnyRef, actorRef: ActorRef,
                                    remoteAddress: Option[InetSocketAddress], timeout: Long): T = {
     val context = injectActiveObjectContext(target)
     val proxy = Proxy.newInstance(Array(intf), Array(target), false, false)
@@ -462,7 +462,7 @@ object ActiveObject extends Logging {
         if (parent != null) injectActiveObjectContext0(activeObject, parent)
         else {
           log.warning(
-          "Can't set 'ActiveObjectContext' for ActiveObject [%s] since no field of this type could be found.", 
+          "Can't set 'ActiveObjectContext' for ActiveObject [%s] since no field of this type could be found.",
           activeObject.getClass.getName)
           None
         }
@@ -522,7 +522,7 @@ private[akka] sealed class ActiveObjectAspect {
       remoteAddress = init.remoteAddress
       timeout = init.timeout
       isInitialized = true
-      
+
     }
     dispatch(joinPoint)
   }
@@ -583,7 +583,7 @@ private[akka] sealed class ActiveObjectAspect {
     } else future.result
 
   private def isVoid(rtti: MethodRtti) = rtti.getMethod.getReturnType == java.lang.Void.TYPE
-  
+
   private def escapeArguments(args: Array[AnyRef]): Tuple2[Array[AnyRef], Boolean] = {
     var isEscaped = false
     val escapedArgs = for (arg <- args) yield {
@@ -606,11 +606,11 @@ private[akka] sealed class ActiveObjectAspect {
   joinPoint: JoinPoint, isOneWay: Boolean, isVoid: Boolean, sender: AnyRef, senderFuture: CompletableFuture[Any]) {
 
   override def toString: String = synchronized {
-    "Invocation [joinPoint: " + joinPoint.toString + 
-    ", isOneWay: " + isOneWay + 
+    "Invocation [joinPoint: " + joinPoint.toString +
+    ", isOneWay: " + isOneWay +
     ", isVoid: " + isVoid +
-    ", sender: " + sender + 
-    ", senderFuture: " + senderFuture + 
+    ", sender: " + sender +
+    ", senderFuture: " + senderFuture +
     "]"
   }
 
@@ -653,11 +653,11 @@ private[akka] class Dispatcher(transactionalRequired: Boolean, val callbacks: Op
   private var postRestart: Option[Method] = None
   private var initTxState: Option[Method] = None
   private var context: Option[ActiveObjectContext] = None
-  
+
   def this(transactionalRequired: Boolean) = this(transactionalRequired,None)
 
   private[actor] def initialize(targetClass: Class[_], targetInstance: AnyRef, ctx: Option[ActiveObjectContext]) = {
-    if (transactionalRequired || targetClass.isAnnotationPresent(Annotations.transactionrequired)) 
+    if (transactionalRequired || targetClass.isAnnotationPresent(Annotations.transactionrequired))
       self.makeTransactionRequired
     self.id = targetClass.getName
     target = Some(targetInstance)
@@ -705,7 +705,7 @@ private[akka] class Dispatcher(transactionalRequired: Boolean, val callbacks: Op
 
   def receive = {
     case Invocation(joinPoint, isOneWay, _, sender, senderFuture) =>
-      context.foreach { ctx => 
+      context.foreach { ctx =>
         if (sender ne null) ctx._sender = sender
         if (senderFuture ne null) ctx._senderFuture = senderFuture
       }
diff --git a/akka-core/src/main/scala/actor/Actor.scala b/akka-core/src/main/scala/actor/Actor.scala
index 120bea199d..3b7d62f97f 100644
--- a/akka-core/src/main/scala/actor/Actor.scala
+++ b/akka-core/src/main/scala/actor/Actor.scala
@@ -329,7 +329,7 @@ trait Actor extends Logging {
    * 
    * self ! message
    * 
- * Here you also find most of the Actor API. + * Here you also find most of the Actor API. *

* For example fields like: *

@@ -384,7 +384,7 @@ trait Actor extends Logging {
    * Is called when an Actor is started by invoking 'actor.start'.
    */
   def init {}
-  
+
   /**
    * User overridable callback.
    * 

diff --git a/akka-core/src/main/scala/actor/ActorRef.scala b/akka-core/src/main/scala/actor/ActorRef.scala index 200997d1d2..682e85655c 100644 --- a/akka-core/src/main/scala/actor/ActorRef.scala +++ b/akka-core/src/main/scala/actor/ActorRef.scala @@ -222,7 +222,7 @@ trait ActorRef extends TransactionManagement { * Is defined if the message was sent with sent with '!!' or '!!!', else None. */ def senderFuture: Option[CompletableFuture[Any]] = guard.withGuard { _senderFuture } - + /** * Is the actor being restarted? */ @@ -356,7 +356,7 @@ trait ActorRef extends TransactionManagement { "\n\tYou have probably: " + "\n\t\t1. Sent a message to an Actor from an instance that is NOT an Actor." + "\n\t\t2. Invoked a method on an Active Object from an instance NOT an Active Object.") - + /** * Use reply_?(..) to reply with a message to the original sender of the message currently * being processed. @@ -1224,7 +1224,7 @@ private[akka] case class RemoteActorRef private[akka] ( extends ActorRef { _uuid = uuuid timeout = _timeout - + start lazy val remoteClient = RemoteClient.clientFor(hostname, port, loader) diff --git a/akka-core/src/main/scala/remote/RemoteClient.scala b/akka-core/src/main/scala/remote/RemoteClient.scala index f93c5dc345..15ed0409ed 100644 --- a/akka-core/src/main/scala/remote/RemoteClient.scala +++ b/akka-core/src/main/scala/remote/RemoteClient.scala @@ -82,19 +82,19 @@ object RemoteClient extends Logging { private[akka] def actorFor(uuid: String, className: String, timeout: Long, hostname: String, port: Int, loader: Option[ClassLoader]): ActorRef = RemoteActorRef(uuid, className, hostname, port, timeout, loader) - def clientFor(hostname: String, port: Int): RemoteClient = + def clientFor(hostname: String, port: Int): RemoteClient = clientFor(new InetSocketAddress(hostname, port), None) - def clientFor(hostname: String, port: Int, loader: ClassLoader): RemoteClient = + def clientFor(hostname: String, port: Int, loader: ClassLoader): RemoteClient = clientFor(new InetSocketAddress(hostname, port), Some(loader)) - def clientFor(address: InetSocketAddress): RemoteClient = + def clientFor(address: InetSocketAddress): RemoteClient = clientFor(address, None) - def clientFor(address: InetSocketAddress, loader: ClassLoader): RemoteClient = + def clientFor(address: InetSocketAddress, loader: ClassLoader): RemoteClient = clientFor(address, Some(loader)) - private[akka] def clientFor(hostname: String, port: Int, loader: Option[ClassLoader]): RemoteClient = + private[akka] def clientFor(hostname: String, port: Int, loader: Option[ClassLoader]): RemoteClient = clientFor(new InetSocketAddress(hostname, port), loader) private[akka] def clientFor(address: InetSocketAddress, loader: Option[ClassLoader]): RemoteClient = synchronized { @@ -330,7 +330,7 @@ class RemoteClientHandler(val name: String, client.connection = bootstrap.connect(remoteAddress) client.connection.awaitUninterruptibly // Wait until the connection attempt succeeds or fails. if (!client.connection.isSuccess) { - client.listeners.toArray.foreach(l => + client.listeners.toArray.foreach(l => l.asInstanceOf[ActorRef] ! RemoteClientError(client.connection.getCause)) log.error(client.connection.getCause, "Reconnection to [%s] has failed", remoteAddress) } @@ -339,13 +339,13 @@ class RemoteClientHandler(val name: String, } override def channelConnected(ctx: ChannelHandlerContext, event: ChannelStateEvent) = { - client.listeners.toArray.foreach(l => + client.listeners.toArray.foreach(l => l.asInstanceOf[ActorRef] ! RemoteClientConnected(client.hostname, client.port)) log.debug("Remote client connected to [%s]", ctx.getChannel.getRemoteAddress) } override def channelDisconnected(ctx: ChannelHandlerContext, event: ChannelStateEvent) = { - client.listeners.toArray.foreach(l => + client.listeners.toArray.foreach(l => l.asInstanceOf[ActorRef] ! RemoteClientDisconnected(client.hostname, client.port)) log.debug("Remote client disconnected from [%s]", ctx.getChannel.getRemoteAddress) } diff --git a/akka-core/src/main/scala/remote/RemoteServer.scala b/akka-core/src/main/scala/remote/RemoteServer.scala index 3b02a3a850..8f6cd40684 100644 --- a/akka-core/src/main/scala/remote/RemoteServer.scala +++ b/akka-core/src/main/scala/remote/RemoteServer.scala @@ -184,7 +184,7 @@ class RemoteServer extends Logging { def start(_hostname: String, _port: Int): RemoteServer = start(_hostname, _port, None) - private def start(_hostname: String, _port: Int, loader: ClassLoader): RemoteServer = + private def start(_hostname: String, _port: Int, loader: ClassLoader): RemoteServer = start(_hostname, _port, Some(loader)) private def start(_hostname: String, _port: Int, loader: Option[ClassLoader]): RemoteServer = synchronized { diff --git a/akka-core/src/main/scala/routing/Listeners.scala b/akka-core/src/main/scala/routing/Listeners.scala index 4bfc3f30b6..7563e0800b 100644 --- a/akka-core/src/main/scala/routing/Listeners.scala +++ b/akka-core/src/main/scala/routing/Listeners.scala @@ -13,7 +13,7 @@ case class Listen(listener: ActorRef) extends ListenerMessage case class Deafen(listener: ActorRef) extends ListenerMessage case class WithListeners(f: List[ActorRef] => Unit) extends ListenerMessage -/** +/** * Listeners is a generic trait to implement listening capability on an Actor. *

* Use the gossip(msg) method to have it sent to the listeners. @@ -34,6 +34,6 @@ trait Listeners { self: Actor => } protected def gossip(msg: Any) = listenersAsList foreach (_ ! msg) - + private def listenersAsList: List[ActorRef] = listeners.toArray.toList.asInstanceOf[List[ActorRef]] } diff --git a/akka-core/src/main/scala/stm/Transaction.scala b/akka-core/src/main/scala/stm/Transaction.scala index a7870cec93..439093dec6 100644 --- a/akka-core/src/main/scala/stm/Transaction.scala +++ b/akka-core/src/main/scala/stm/Transaction.scala @@ -282,10 +282,10 @@ object Transaction { setTransaction(Some(tx)) mtx.registerLifecycleListener(new TransactionLifecycleListener() { def notify(mtx: MultiverseTransaction, event: TransactionLifecycleEvent) = event.name match { - case "postCommit" => + case "postCommit" => log.trace("Committing transaction [%s]", mtx) tx.commit - case "postAbort" => + case "postAbort" => log.trace("Aborting transaction [%s]", mtx) tx.abort case _ => {} diff --git a/akka-core/src/test/scala/ActorPatternsTest.scala b/akka-core/src/test/scala/ActorPatternsTest.scala index 028ea80ea3..0d4e9b6b08 100644 --- a/akka-core/src/test/scala/ActorPatternsTest.scala +++ b/akka-core/src/test/scala/ActorPatternsTest.scala @@ -43,7 +43,7 @@ class ActorPatternsTest extends junit.framework.TestCase with Suite with MustMat b <- (d.!![Int](testMsg2,5000)) c <- (d.!![Int](testMsg3,5000)) } yield a + b + c - + result.get must be(21) for(a <- List(t1,t2,d)) a.stop } diff --git a/akka-core/src/test/scala/StmSpec.scala b/akka-core/src/test/scala/StmSpec.scala index 58b9b6805f..17d4be32bd 100644 --- a/akka-core/src/test/scala/StmSpec.scala +++ b/akka-core/src/test/scala/StmSpec.scala @@ -95,7 +95,7 @@ class StmSpec extends val size2: Int = (actor !! Size).getOrElse(fail("Could not get Vector::size")) size2 should equal(3) } catch { - case e => + case e => e.printStackTrace fail(e.toString) } @@ -122,7 +122,7 @@ class StmSpec extends val size4: Int = (actor !! Size).getOrElse(fail("Could not get size")) size4 should equal(3) } catch { - case e => + case e => fail(e.toString) } } @@ -130,7 +130,7 @@ class StmSpec extends /* describe("Multiverse API") { it("should blablabla") { - + import org.multiverse.api.programmatic._ // import org.multiverse.api._ import org.multiverse.templates._ @@ -139,13 +139,13 @@ class StmSpec extends import org.multiverse.api.{GlobalStmInstance, ThreadLocalTransaction, Transaction => MultiverseTransaction} import org.multiverse.api.lifecycle.{TransactionLifecycleListener, TransactionLifecycleEvent} import org.multiverse.commitbarriers._ - + def createRef[T]: ProgrammaticReference[T] = GlobalStmInstance .getGlobalStmInstance .getProgrammaticReferenceFactoryBuilder .build .atomicCreateReference(null.asInstanceOf[T]) - + val ref1 = Ref(0)//createRef[Int] val ref2 = Ref(0)//createRef[Int] @@ -185,13 +185,13 @@ class GlobalTransactionVectorTestActor extends Actor { import se.scalablesolutions.akka.stm.Transaction.Global private val vector: TransactionalVector[Int] = Global.atomic { TransactionalVector(1) } - + def receive = { - case Add(value) => + case Add(value) => Global.atomic { vector + value} self.reply(Success) - case Size => + case Size => val size = Global.atomic { vector.size } self.reply(size) } @@ -200,12 +200,12 @@ class GlobalTransactionVectorTestActor extends Actor { class NestedTransactorLevelOneActor extends Actor { import GlobalTransactionVectorTestActor._ private val nested = actorOf[NestedTransactorLevelTwoActor].start - + def receive = { - case add @ Add(_) => + case add @ Add(_) => self.reply((nested !! add).get) - case Size => + case Size => self.reply((nested !! Size).get) case "HiLevelOne" => println("HiLevelOne") @@ -216,15 +216,15 @@ class NestedTransactorLevelOneActor extends Actor { class NestedTransactorLevelTwoActor extends Actor { import GlobalTransactionVectorTestActor._ private val ref = Ref(0) - + def receive = { - case Add(value) => + case Add(value) => ref.swap(value) self.reply(Success) - case Size => + case Size => self.reply(ref.getOrElse(-1)) - + case "HiLevelTwo" => println("HiLevelTwo") } } diff --git a/akka-http/src/main/scala/AkkaLoader.scala b/akka-http/src/main/scala/AkkaLoader.scala index 431758e2c7..886c2c0688 100644 --- a/akka-http/src/main/scala/AkkaLoader.scala +++ b/akka-http/src/main/scala/AkkaLoader.scala @@ -47,29 +47,29 @@ class AkkaLoader extends Logging { private def printBanner = { log.info( """ - t - t t t - t t tt t - tt t t tt t - t ttttttt t ttt t - t tt ttt t ttt t - t t ttt t ttt t t - tt t ttt ttt ttt t - t t ttt ttt t tt t - t ttt ttt t t - tt ttt ttt t - ttt ttt - tttttttt ttt ttt ttt ttt tttttttt - ttt tt ttt ttt ttt ttt ttt ttt - ttt ttt ttt ttt ttt ttt ttt ttt - ttt ttt ttt ttt ttt tt ttt ttt - tttt ttttttttt tttttttt tttt - ttttttttt ttt ttt ttt ttt ttttttttt - ttt ttt ttt ttt ttt ttt ttt ttt - ttt ttt ttt ttt ttt ttt ttt ttt - ttt tt ttt ttt ttt ttt ttt ttt + t + t t t + t t tt t + tt t t tt t + t ttttttt t ttt t + t tt ttt t ttt t + t t ttt t ttt t t + tt t ttt ttt ttt t + t t ttt ttt t tt t + t ttt ttt t t + tt ttt ttt t + ttt ttt tttttttt ttt ttt ttt ttt tttttttt - + ttt tt ttt ttt ttt ttt ttt ttt + ttt ttt ttt ttt ttt ttt ttt ttt + ttt ttt ttt ttt ttt tt ttt ttt + tttt ttttttttt tttttttt tttt + ttttttttt ttt ttt ttt ttt ttttttttt + ttt ttt ttt ttt ttt ttt ttt ttt + ttt ttt ttt ttt ttt ttt ttt ttt + ttt tt ttt ttt ttt ttt ttt ttt + tttttttt ttt ttt ttt ttt tttttttt + ================================================== """) log.info(" Running version %s", Config.VERSION) diff --git a/akka-kernel/src/main/scala/EmbeddedAppServer.scala b/akka-kernel/src/main/scala/EmbeddedAppServer.scala index 5d3001edbd..8d9982c7e2 100644 --- a/akka-kernel/src/main/scala/EmbeddedAppServer.scala +++ b/akka-kernel/src/main/scala/EmbeddedAppServer.scala @@ -50,14 +50,14 @@ trait EmbeddedAppServer extends Bootable with Logging { Thread.currentThread.setContextClassLoader(applicationLoader.get) super.init(sc) } - finally { + finally { Thread.currentThread.setContextClassLoader(cl) } } }) adapter.setContextPath(uri.getPath) - adapter.addInitParameter("cometSupport", + adapter.addInitParameter("cometSupport", "org.atmosphere.container.GrizzlyCometSupport") adapter.addInitParameter("com.sun.jersey.config.property.resourceConfigClass", "com.sun.jersey.api.core.PackagesResourceConfig") diff --git a/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraStorageBackend.scala b/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraStorageBackend.scala index b67a0e9256..f393f4a162 100644 --- a/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraStorageBackend.scala +++ b/akka-persistence/akka-persistence-cassandra/src/main/scala/CassandraStorageBackend.scala @@ -42,7 +42,7 @@ private[akka] object CassandraStorageBackend extends case "ALL" => ConsistencyLevel.ALL case "ANY" => ConsistencyLevel.ANY case unknown => throw new IllegalArgumentException( - "Cassandra consistency level [" + unknown + "] is not supported." + + "Cassandra consistency level [" + unknown + "] is not supported." + "\n\tExpected one of [ZERO, ONE, QUORUM, DCQUORUM, DCQUORUMSYNC, ALL, ANY] in the akka.conf configuration file.") } } @@ -105,9 +105,9 @@ private[akka] object CassandraStorageBackend extends } } - def insertVectorStorageEntriesFor(name: String, elements: List[Array[Byte]]) = + def insertVectorStorageEntriesFor(name: String, elements: List[Array[Byte]]) = elements.foreach(insertVectorStorageEntryFor(name, _)) - + def updateVectorStorageEntryFor(name: String, index: Int, elem: Array[Byte]) = { val columnPath = new ColumnPath(VECTOR_COLUMN_PARENT.getColumn_family) columnPath.setColumn(intToBytes(index)) diff --git a/akka-persistence/akka-persistence-cassandra/src/test/scala/CassandraPersistentActorSpec.scala b/akka-persistence/akka-persistence-cassandra/src/test/scala/CassandraPersistentActorSpec.scala index 6746fca529..648dec2be3 100644 --- a/akka-persistence/akka-persistence-cassandra/src/test/scala/CassandraPersistentActorSpec.scala +++ b/akka-persistence/akka-persistence-cassandra/src/test/scala/CassandraPersistentActorSpec.scala @@ -171,4 +171,4 @@ object EmbeddedCassandraService { def start: Unit = {} } -*/ \ No newline at end of file +*/ diff --git a/akka-persistence/akka-persistence-common/src/main/scala/Storage.scala b/akka-persistence/akka-persistence-common/src/main/scala/Storage.scala index bcfb2c1025..6a0eb9a8d8 100644 --- a/akka-persistence/akka-persistence-common/src/main/scala/Storage.scala +++ b/akka-persistence/akka-persistence-common/src/main/scala/Storage.scala @@ -30,7 +30,7 @@ class StorageException(message: String) extends RuntimeException(message) *

  * val myMap = CassandraStorage.getMap(id)
  * 
- * + * * Example Java usage: *
  * PersistentMap myMap = MongoStorage.newMap();
@@ -72,7 +72,7 @@ trait Storage {
 }
 
 /**
- * Implementation of PersistentMap for every concrete 
+ * Implementation of PersistentMap for every concrete
  * storage will have the same workflow. This abstracts the workflow.
  *
  * Subclasses just need to provide the actual concrete instance for the
@@ -117,23 +117,23 @@ trait PersistentMap[K, V] extends scala.collection.mutable.Map[K, V]
     put(key, value)
     this
   }
-  
+
   override def put(key: K, value: V): Option[V] = {
     register
     newAndUpdatedEntries.put(key, value)
   }
- 
-  override def update(key: K, value: V) = { 
+
+  override def update(key: K, value: V) = {
     register
     newAndUpdatedEntries.update(key, value)
   }
-  
+
   override def remove(key: K) = {
     register
     removedEntries.add(key)
     newAndUpdatedEntries.get(key)
   }
-  
+
   def slice(start: Option[K], count: Int): List[Tuple2[K, V]] =
     slice(start, None, count)
 
@@ -141,11 +141,11 @@ trait PersistentMap[K, V] extends scala.collection.mutable.Map[K, V]
     storage.getMapStorageRangeFor(uuid, start, finish, count)
   } catch { case e: Exception => Nil }
 
-  override def clear = { 
+  override def clear = {
     register
     shouldClearOnCommit.swap(true)
   }
-  
+
   override def contains(key: K): Boolean = try {
     newAndUpdatedEntries.contains(key) ||
     storage.getMapStorageEntryFor(uuid, key).isDefined
@@ -163,9 +163,9 @@ trait PersistentMap[K, V] extends scala.collection.mutable.Map[K, V]
       storage.getMapStorageEntryFor(uuid, key)
     } catch { case e: Exception => None }
   }
-  
+
   def iterator = elements
-  
+
   override def elements: Iterator[Tuple2[K, V]]  = {
     new Iterator[Tuple2[K, V]] {
       private val originalList: List[Tuple2[K, V]] = try {
@@ -173,10 +173,10 @@ trait PersistentMap[K, V] extends scala.collection.mutable.Map[K, V]
       } catch {
         case e: Throwable => Nil
       }
-      private var elements = newAndUpdatedEntries.toList union originalList.reverse 
+      private var elements = newAndUpdatedEntries.toList union originalList.reverse
       override def next: Tuple2[K, V]= synchronized {
         val element = elements.head
-        elements = elements.tail        
+        elements = elements.tail
         element
       }
       override def hasNext: Boolean = synchronized { !elements.isEmpty }
@@ -217,12 +217,12 @@ trait PersistentVector[T] extends IndexedSeq[T] with Transactional with Committa
   }
 
   def +(elem: T) = add(elem)
-  
+
   def add(elem: T) = {
     register
     newElems + elem
   }
- 
+
   def apply(index: Int): T = get(index)
 
   def get(index: Int): T = {
@@ -231,7 +231,7 @@ trait PersistentVector[T] extends IndexedSeq[T] with Transactional with Committa
   }
 
   override def slice(start: Int, finish: Int): IndexedSeq[T] = slice(Some(start), Some(finish))
-  
+
   def slice(start: Option[Int], finish: Option[Int], count: Int = 0): IndexedSeq[T] = {
     val buffer = new scala.collection.mutable.ArrayBuffer[T]
     storage.getVectorStorageRangeFor(uuid, start, finish, count).foreach(buffer.append(_))
@@ -277,21 +277,21 @@ trait PersistentVector[T] extends IndexedSeq[T] with Transactional with Committa
  */
 trait PersistentRef[T] extends Transactional with Committable with Abortable {
   protected val ref = new TransactionalRef[T]
-  
+
   val storage: RefStorageBackend[T]
 
   def commit = if (ref.isDefined) {
     storage.insertRefStorageFor(uuid, ref.get.get)
-    ref.swap(null.asInstanceOf[T]) 
+    ref.swap(null.asInstanceOf[T])
   }
 
-  def abort = ref.swap(null.asInstanceOf[T]) 
+  def abort = ref.swap(null.asInstanceOf[T])
 
   def swap(elem: T) = {
     register
     ref.swap(elem)
   }
-  
+
   def get: Option[T] = if (ref.isDefined) ref.get else storage.getRefStorageFor(uuid)
 
   def isDefined: Boolean = ref.isDefined || storage.getRefStorageFor(uuid).isDefined
@@ -309,7 +309,7 @@ trait PersistentRef[T] extends Transactional with Committable with Abortable {
 }
 
 /**
- * Implementation of PersistentQueue for every concrete 
+ * Implementation of PersistentQueue for every concrete
  * storage will have the same workflow. This abstracts the workflow.
  * 

* Enqueue is simpler, we just have to record the operation in a local @@ -410,13 +410,13 @@ trait PersistentQueue[A] extends scala.collection.mutable.Queue[A] } } - override def clear = { + override def clear = { register shouldClearOnCommit.swap(true) localQ.swap(Queue.empty) pickMeForDQ.swap(0) } - + override def size: Int = try { storage.size(uuid) + localQ.get.get.length } catch { case e: Exception => 0 } @@ -424,11 +424,11 @@ trait PersistentQueue[A] extends scala.collection.mutable.Queue[A] override def isEmpty: Boolean = size == 0 - override def +=(elem: A) = { + override def +=(elem: A) = { enqueue(elem) this } - def ++=(elems: Iterator[A]) = { + def ++=(elems: Iterator[A]) = { enqueue(elems.toList: _*) this } @@ -450,7 +450,7 @@ trait PersistentQueue[A] extends scala.collection.mutable.Queue[A] * Implements a template for a concrete persistent transactional sorted set based storage. *

* Sorting is done based on a zscore. But the computation of zscore has been kept - * outside the abstraction. + * outside the abstraction. *

* zscore can be implemented in a variety of ways by the calling class: *

@@ -467,7 +467,7 @@ trait PersistentQueue[A] extends scala.collection.mutable.Queue[A]
  * class Foo {
  *   //..
  * }
- * 
+ *
  * implicit def Foo2Scorable(foo: Foo): ZScorable = new ZScorable {
  *   def toZScore = {
  *     //..
@@ -526,7 +526,7 @@ trait PersistentSortedSet[A] extends Transactional with Committable with Abortab
       }
     }
   }
- 
+
   def size: Int = newElems.size + storage.zcard(uuid) - removedElems.size
 
   def zscore(elem: A): Float = {
@@ -541,9 +541,9 @@ trait PersistentSortedSet[A] extends Transactional with Committable with Abortab
   implicit def order(x: (A, Float)) = new Ordered[(A, Float)] {
     def compare(that: (A, Float)) = x._2 compare that._2
   }
-  
+
   implicit def ordering = new scala.math.Ordering[(A,Float)] {
-    def compare(x: (A, Float),y : (A,Float)) = x._2 compare y._2   
+    def compare(x: (A, Float),y : (A,Float)) = x._2 compare y._2
   }
 
 
@@ -556,7 +556,7 @@ trait PersistentSortedSet[A] extends Transactional with Committable with Abortab
 
     // -1 means the last element, -2 means the second last
     val s = if (start < 0) start + l else start
-    val e = 
+    val e =
       if (end < 0) end + l
       else if (end >= l) (l - 1)
       else end
diff --git a/akka-persistence/akka-persistence-common/src/main/scala/StorageBackend.scala b/akka-persistence/akka-persistence-common/src/main/scala/StorageBackend.scala
index ab0cfaf4d3..a5226eb1a4 100644
--- a/akka-persistence/akka-persistence-common/src/main/scala/StorageBackend.scala
+++ b/akka-persistence/akka-persistence-common/src/main/scala/StorageBackend.scala
@@ -26,7 +26,7 @@ trait VectorStorageBackend[T] extends StorageBackend {
   def updateVectorStorageEntryFor(name: String, index: Int, elem: T)
   def getVectorStorageEntryFor(name: String, index: Int): T
   def getVectorStorageRangeFor(name: String, start: Option[Int], finish: Option[Int], count: Int): List[T]
-  def getVectorStorageSizeFor(name: String): Int 
+  def getVectorStorageSizeFor(name: String): Int
 }
 
 // for Ref
@@ -47,17 +47,17 @@ trait RefStorageBackend[T] extends StorageBackend {
 trait QueueStorageBackend[T] extends StorageBackend {
   // add to the end of the queue
   def enqueue(name: String, item: T): Boolean
-  
+
   // pop from the front of the queue
   def dequeue(name: String): Option[T]
-  
+
   // get the size of the queue
   def size(name: String): Int
-  
+
   // return an array of items currently stored in the queue
   // start is the item to begin, count is how many items to return
   def peek(name: String, start: Int, count: Int): List[T]
-  
+
   // completely delete the queue
   def remove(name: String): Boolean
 }
@@ -65,19 +65,19 @@ trait QueueStorageBackend[T] extends StorageBackend {
 trait SortedSetStorageBackend[T] extends StorageBackend {
   // add item to sorted set identified by name
   def zadd(name: String, zscore: String, item: T): Boolean
-  
+
   // remove item from sorted set identified by name
   def zrem(name: String, item: T): Boolean
-  
+
   // cardinality of the set identified by name
   def zcard(name: String): Int
-  
+
   // zscore of the item from sorted set identified by name
   def zscore(name: String, item: T): Option[Float]
-  
+
   // zrange from the sorted set identified by name
   def zrange(name: String, start: Int, end: Int): List[T]
 
   // zrange with score from the sorted set identified by name
-  def zrangeWithScore(name: String, start: Int, end: Int): List[(T, Float)] 
+  def zrangeWithScore(name: String, start: Int, end: Int): List[(T, Float)]
 }
diff --git a/akka-persistence/akka-persistence-mongo/src/main/scala/MongoStorageBackend.scala b/akka-persistence/akka-persistence-mongo/src/main/scala/MongoStorageBackend.scala
index 49f46db134..d5581b373b 100644
--- a/akka-persistence/akka-persistence-mongo/src/main/scala/MongoStorageBackend.scala
+++ b/akka-persistence/akka-persistence-mongo/src/main/scala/MongoStorageBackend.scala
@@ -280,7 +280,7 @@ private[akka] object MongoStorageBackend extends
       }
     val currentList = dbobj.get(VALUE).asInstanceOf[JArrayList[AnyRef]]
     currentList.set(index, serializer.out(elem))
-    coll.update(q, 
+    coll.update(q,
       new BasicDBObject().append(KEY, name).append(VALUE, currentList))
   }
 
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 85757f25e8..05fe245b10 100644
--- a/akka-samples/akka-sample-ants/src/main/scala/Ants.scala
+++ b/akka-samples/akka-sample-ants/src/main/scala/Ants.scala
@@ -87,7 +87,7 @@ object World {
     pingEvery(evaporator, EvapMillis)
   }
 
-  private def pingEvery(actor: ActorRef, millis: Long) = 
+  private def pingEvery(actor: ActorRef, millis: Long) =
     Scheduler.schedule(actor, "ping", Config.StartDelay, millis, TimeUnit.MILLISECONDS)
 }
 
diff --git a/akka-samples/akka-sample-camel/src/main/scala/Application1.scala b/akka-samples/akka-sample-camel/src/main/scala/Application1.scala
index dfff0e0539..6dcb437992 100644
--- a/akka-samples/akka-sample-camel/src/main/scala/Application1.scala
+++ b/akka-samples/akka-sample-camel/src/main/scala/Application1.scala
@@ -26,4 +26,4 @@ object Application1 {
     println(actor2 !! Message("actor2"))
   }
 
-}
\ No newline at end of file
+}
diff --git a/akka-samples/akka-sample-camel/src/main/scala/Application2.scala b/akka-samples/akka-sample-camel/src/main/scala/Application2.scala
index e01b510a71..8a789d13bf 100644
--- a/akka-samples/akka-sample-camel/src/main/scala/Application2.scala
+++ b/akka-samples/akka-sample-camel/src/main/scala/Application2.scala
@@ -19,4 +19,4 @@ object Application2 {
     RemoteNode.start("localhost", 7777)
     RemoteNode.register("remote2", actorOf[RemoteActor2].start)
   }
-}
\ No newline at end of file
+}
diff --git a/akka-samples/akka-sample-camel/src/main/scala/Boot.scala b/akka-samples/akka-sample-camel/src/main/scala/Boot.scala
index 5b08e15a1a..206661c8fd 100644
--- a/akka-samples/akka-sample-camel/src/main/scala/Boot.scala
+++ b/akka-samples/akka-sample-camel/src/main/scala/Boot.scala
@@ -74,4 +74,4 @@ class CustomRouteBuilder extends RouteBuilder {
       }
     })
   }
-}
\ No newline at end of file
+}
diff --git a/akka-samples/akka-sample-chat/src/main/scala/ChatServer.scala b/akka-samples/akka-sample-chat/src/main/scala/ChatServer.scala
index f193efd217..f244f8eeef 100644
--- a/akka-samples/akka-sample-chat/src/main/scala/ChatServer.scala
+++ b/akka-samples/akka-sample-chat/src/main/scala/ChatServer.scala
@@ -27,17 +27,17 @@ First we need to download, build and start up Redis:
 4. Run: ‘./redis-server’.
 For details on how to set up Redis server have a look at http://code.google.com/p/redis/wiki/QuickStart.
 
-Then to run the sample: 
+Then to run the sample:
 
 1. Fire up two shells. For each of them:
   - Step down into to the root of the Akka distribution.
   - Set 'export AKKA_HOME=.
   - Run 'sbt console' to start up a REPL (interpreter).
-2. In the first REPL you get execute: 
+2. In the first REPL you get execute:
   - scala> import sample.chat._
   - scala> import se.scalablesolutions.akka.actor.Actor._
   - scala> val chatService = actorOf[ChatService].start
-3. In the second REPL you get execute: 
+3. In the second REPL you get execute:
     - scala> import sample.chat._
     - scala> Runner.run
 4. See the chat simulation run.
@@ -60,12 +60,12 @@ case class ChatMessage(from: String, message: String) extends Event
 /**
  * Chat client.
  */
-class ChatClient(val name: String) { 
+class ChatClient(val name: String) {
   val chat = RemoteClient.actorFor("chat:service", "localhost", 9999)
 
-  def login =                 chat ! Login(name) 
-  def logout =                chat ! Logout(name)  
-  def post(message: String) = chat ! ChatMessage(name, name + ": " + message)  
+  def login =                 chat ! Login(name)
+  def logout =                chat ! Logout(name)
+  def post(message: String) = chat ! ChatMessage(name, name + ": " + message)
   def chatLog: ChatLog =     (chat !! GetChatLog(name)).getOrElse(throw new Exception("Couldn't get the chat log from ChatServer"))
 }
 
@@ -75,15 +75,15 @@ class ChatClient(val name: String) {
 class Session(user: String, storage: ActorRef) extends Actor {
   private val loginTime = System.currentTimeMillis
   private var userLog: List[String] = Nil
-  
+
   log.info("New session for user [%s] has been created at [%s]", user, loginTime)
 
   def receive = {
-    case msg @ ChatMessage(from, message) => 
+    case msg @ ChatMessage(from, message) =>
       userLog ::= message
       storage ! msg
-      
-    case msg @ GetChatLog(_) => 
+
+    case msg @ GetChatLog(_) =>
       storage forward msg
   }
 }
@@ -97,24 +97,24 @@ trait ChatStorage extends Actor
  * Redis-backed chat storage implementation.
  */
 class RedisChatStorage extends ChatStorage {
-  self.lifeCycle = Some(LifeCycle(Permanent))    
+  self.lifeCycle = Some(LifeCycle(Permanent))
   val CHAT_LOG = "akka.chat.log"
-  
+
   private var chatLog = atomic { RedisStorage.getVector(CHAT_LOG) }
 
   log.info("Redis-based chat storage is starting up...")
 
   def receive = {
-    case msg @ ChatMessage(from, message) => 
+    case msg @ ChatMessage(from, message) =>
       log.debug("New chat message [%s]", message)
       atomic { chatLog + message.getBytes("UTF-8") }
 
-    case GetChatLog(_) => 
+    case GetChatLog(_) =>
       val messageList = atomic { chatLog.map(bytes => new String(bytes, "UTF-8")).toList }
       self.reply(ChatLog(messageList))
   }
-  
-  override def postRestart(reason: Throwable) = chatLog = RedisStorage.getVector(CHAT_LOG)  
+
+  override def postRestart(reason: Throwable) = chatLog = RedisStorage.getVector(CHAT_LOG)
 }
 
 /**
@@ -122,27 +122,27 @@ class RedisChatStorage extends ChatStorage {
  * 

* Uses self-type annotation (this: Actor =>) to declare that it needs to be mixed in with an Actor. */ -trait SessionManagement { this: Actor => - +trait SessionManagement { this: Actor => + val storage: ActorRef // needs someone to provide the ChatStorage val sessions = new HashMap[String, ActorRef] - + protected def sessionManagement: Receive = { - case Login(username) => + case Login(username) => log.info("User [%s] has logged in", username) val session = actorOf(new Session(username, storage)) session.start sessions += (username -> session) - - case Logout(username) => + + case Logout(username) => log.info("User [%s] has logged out", username) val session = sessions(username) session.stop - sessions -= username - } - - protected def shutdownSessions = - sessions.foreach { case (_, session) => session.stop } + sessions -= username + } + + protected def shutdownSessions = + sessions.foreach { case (_, session) => session.stop } } /** @@ -152,7 +152,7 @@ trait SessionManagement { this: Actor => */ trait ChatManagement { this: Actor => val sessions: HashMap[String, ActorRef] // needs someone to provide the Session map - + protected def chatManagement: Receive = { case msg @ ChatMessage(from, _) => sessions(from) ! msg case msg @ GetChatLog(from) => sessions(from) forward msg @@ -172,20 +172,20 @@ trait RedisChatStorageFactory { this: Actor => trait ChatServer extends Actor { self.faultHandler = Some(OneForOneStrategy(5, 5000)) self.trapExit = List(classOf[Exception]) - + val storage: ActorRef log.info("Chat server is starting up...") // actor message handler def receive = sessionManagement orElse chatManagement - + // abstract methods to be defined somewhere else protected def chatManagement: Receive - protected def sessionManagement: Receive + protected def sessionManagement: Receive protected def shutdownSessions: Unit - override def shutdown = { + override def shutdown = { log.info("Chat server is shutting down...") shutdownSessions self.unlink(storage) @@ -200,10 +200,10 @@ trait ChatServer extends Actor { * val chatService = Actor.actorOf[ChatService].start *

*/ -class ChatService extends - ChatServer with - SessionManagement with - ChatManagement with +class ChatService extends + ChatServer with + SessionManagement with + ChatManagement with RedisChatStorageFactory { override def init = { RemoteNode.start("localhost", 9999) @@ -217,7 +217,7 @@ class ChatService extends object Runner { def run = { val client = new ChatClient("jonas") - + client.login client.post("Hi there") @@ -228,4 +228,4 @@ object Runner { client.logout } -} \ No newline at end of file +} diff --git a/akka-samples/akka-sample-lift/src/main/scala/bootstrap/liftweb/Boot.scala b/akka-samples/akka-sample-lift/src/main/scala/bootstrap/liftweb/Boot.scala index f8e4f15bd9..0f4a0e9020 100644 --- a/akka-samples/akka-sample-lift/src/main/scala/bootstrap/liftweb/Boot.scala +++ b/akka-samples/akka-sample-lift/src/main/scala/bootstrap/liftweb/Boot.scala @@ -23,7 +23,7 @@ class Boot extends Logging { def boot { // where to search snippet LiftRules.addToPackages("sample.lift") - + LiftRules.httpAuthProtectedResource.prepend { case (Req("liftcount" :: Nil, _, _)) => Full(AuthRole("admin")) } @@ -35,9 +35,9 @@ class Boot extends Logging { true } } - + LiftRules.passNotFoundToChain = true - + val factory = SupervisorFactory( SupervisorConfig( RestartStrategy(OneForOne, 3, 100, List(classOf[Exception])), @@ -49,7 +49,7 @@ class Boot extends Logging { LifeCycle(Permanent)) :: Nil)) factory.newInstance.start - + // Build SiteMap // val entries = Menu(Loc("Home", List("index"), "Home")) :: Nil // LiftRules.setSiteMap(SiteMap(entries:_*)) diff --git a/akka-samples/akka-sample-lift/src/test/scala/LiftConsole.scala b/akka-samples/akka-sample-lift/src/test/scala/LiftConsole.scala index a5aa1698e8..43296bc1f4 100644 --- a/akka-samples/akka-sample-lift/src/test/scala/LiftConsole.scala +++ b/akka-samples/akka-sample-lift/src/test/scala/LiftConsole.scala @@ -13,4 +13,4 @@ object LiftConsole { exit(0) } } -*/ \ No newline at end of file +*/ diff --git a/akka-samples/akka-sample-pubsub/src/main/scala/RedisPubSub.scala b/akka-samples/akka-sample-pubsub/src/main/scala/RedisPubSub.scala index 44366d31a4..ca3148aab7 100644 --- a/akka-samples/akka-sample-pubsub/src/main/scala/RedisPubSub.scala +++ b/akka-samples/akka-sample-pubsub/src/main/scala/RedisPubSub.scala @@ -10,7 +10,7 @@ import se.scalablesolutions.akka.actor.Actor._ /** * Sample Akka application for Redis PubSub - * + * * Prerequisite: Need Redis Server running (the version that supports pubsub) *
  * 1. Download redis from http://github.com/antirez/redis
@@ -65,7 +65,7 @@ object Sub {
   val r = new RedisClient("localhost", 6379)
   val s = actorOf(new Subscriber(r))
   s.start
-  s ! Register(callback) 
+  s ! Register(callback)
 
   def sub(channels: String*) = {
     s ! Subscribe(channels.toArray)
@@ -78,29 +78,29 @@ object Sub {
   def callback(pubsub: PubSubMessage) = pubsub match {
     case S(channel, no) => println("subscribed to " + channel + " and count = " + no)
     case U(channel, no) => println("unsubscribed from " + channel + " and count = " + no)
-    case M(channel, msg) => 
+    case M(channel, msg) =>
       msg match {
         // exit will unsubscribe from all channels and stop subscription service
-        case "exit" => 
+        case "exit" =>
           println("unsubscribe all ..")
           r.unsubscribe
 
         // message "+x" will subscribe to channel x
-        case x if x startsWith "+" => 
+        case x if x startsWith "+" =>
           val s: Seq[Char] = x
           s match {
             case Seq('+', rest @ _*) => r.subscribe(rest.toString){ m => }
           }
 
         // message "-x" will unsubscribe from channel x
-        case x if x startsWith "-" => 
+        case x if x startsWith "-" =>
           val s: Seq[Char] = x
           s match {
             case Seq('-', rest @ _*) => r.unsubscribe(rest.toString)
           }
 
         // other message receive
-        case x => 
+        case x =>
           println("received message on channel " + channel + " as : " + x)
       }
   }
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 9070d4a7f8..24f81872f7 100644
--- a/akka-samples/akka-sample-remote/src/main/scala/ClientManagedRemoteActorSample.scala
+++ b/akka-samples/akka-sample-remote/src/main/scala/ClientManagedRemoteActorSample.scala
@@ -11,7 +11,7 @@ import se.scalablesolutions.akka.util.Logging
 
 class RemoteHelloWorldActor extends RemoteActor("localhost", 9999) {
   def receive = {
-    case "Hello" => 
+    case "Hello" =>
       log.info("Received 'Hello'")
       self.reply("World")
   }
@@ -27,7 +27,7 @@ object ClientManagedRemoteActorServer extends Logging {
 }
 
 object ClientManagedRemoteActorClient extends Logging {
-  
+
   def run = {
     val actor = actorOf[RemoteHelloWorldActor].start
     log.info("Remote actor created, moved to the server")
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 87253af24b..2671d9e25e 100644
--- a/akka-samples/akka-sample-remote/src/main/scala/ServerManagedRemoteActorSample.scala
+++ b/akka-samples/akka-sample-remote/src/main/scala/ServerManagedRemoteActorSample.scala
@@ -11,7 +11,7 @@ import se.scalablesolutions.akka.util.Logging
 
 class HelloWorldActor extends Actor {
   def receive = {
-    case "Hello" => 
+    case "Hello" =>
       log.info("Received 'Hello'")
       self.reply("World")
   }
@@ -30,7 +30,7 @@ object ServerManagedRemoteActorServer extends Logging {
 }
 
 object ServerManagedRemoteActorClient extends Logging {
-  
+
   def run = {
     val actor = RemoteClient.actorFor("hello-service", "localhost", 9999)
     log.info("Remote client created")
diff --git a/akka-samples/akka-sample-rest-scala/src/main/scala/SimpleService.scala b/akka-samples/akka-sample-rest-scala/src/main/scala/SimpleService.scala
index 18b8bda6e6..eb2d07340e 100644
--- a/akka-samples/akka-sample-rest-scala/src/main/scala/SimpleService.scala
+++ b/akka-samples/akka-sample-rest-scala/src/main/scala/SimpleService.scala
@@ -158,7 +158,7 @@ class Chat {
 }
 
 object ChatActor {
-  case class ChatMsg(val who: String, val what: String, val msg: String)        
+  case class ChatMsg(val who: String, val what: String, val msg: String)
 }
 
 class ChatActor extends Actor with Logging {
diff --git a/akka-samples/akka-sample-security/src/main/scala/SimpleService.scala b/akka-samples/akka-sample-security/src/main/scala/SimpleService.scala
index 800fdca7ff..e6892c7b62 100644
--- a/akka-samples/akka-sample-security/src/main/scala/SimpleService.scala
+++ b/akka-samples/akka-sample-security/src/main/scala/SimpleService.scala
@@ -147,4 +147,4 @@ class SecureTickActor extends Transactor with Logging {
       self.reply(new Integer(0))
     }
   }
-}
\ No newline at end of file
+}
diff --git a/config/akka-reference.conf b/config/akka-reference.conf
index 83c35d143f..81f2ee4580 100644
--- a/config/akka-reference.conf
+++ b/config/akka-reference.conf
@@ -1,10 +1,10 @@
 ####################
 # Akka Config File #
 ####################
- 
+
 # This file has all the default settings, so all these could be removed with no visible effect.
 # Modify as needed.
- 
+
 
   filename = "./logs/akka.log"
   roll = "daily"  # Options: never, hourly, daily, sunday/monday/...
@@ -13,14 +13,14 @@
   # syslog_host = ""
   # syslog_server_name = ""
 
- 
+
 
   version = "0.9"
- 
+
   # FQN (Fully Qualified Name) to the class doing initial active object/actor
   # supervisor bootstrap, should be defined in default constructor
   boot = ["sample.camel.Boot",
-          "sample.rest.java.Boot", 
+          "sample.rest.java.Boot",
           "sample.rest.scala.Boot",
           "sample.security.Boot"]
 
@@ -41,10 +41,10 @@
     jta-aware = off          # 'on' means that if there JTA Transaction Manager available then the STM will
                              # begin (or join), commit or rollback the JTA transaction. Default is 'off'.
   
-  
+
   
-    provider = "from-jndi"   # Options: "from-jndi" (means that Akka will try to detect a TransactionManager in the JNDI) 
-                             #          "atomikos" (means that Akka will use the Atomikos based JTA impl in 'akka-jta', 
+    provider = "from-jndi"   # Options: "from-jndi" (means that Akka will try to detect a TransactionManager in the JNDI)
+                             #          "atomikos" (means that Akka will use the Atomikos based JTA impl in 'akka-jta',
                              #          e.g. you need the akka-jta JARs on classpath).
     timeout = 60000
   
@@ -56,7 +56,7 @@
     filters = ["se.scalablesolutions.akka.security.AkkaSecurityFilterFactory"] # List with all jersey filters to use
     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 (uses sample now)
-    
+
     #IF you are using a KerberosAuthenticationActor
     #   
     #     servicePrincipal = "HTTP/localhost@EXAMPLE.COM"
@@ -75,8 +75,8 @@
       name = "default"                                                        # The name of the cluster
       serializer = "se.scalablesolutions.akka.serialization.Serializer$Java$" # FQN of the serializer class
     
-    
-      
+
+    
       service = on
       hostname = "localhost"
       port = 9999
@@ -88,14 +88,14 @@
       read-timeout = 10000      # in millis (10 sec default)
     
   
- 
+
   
     
       hostname = "127.0.0.1"        # IP address or hostname of one of the Cassandra cluster's seeds
       port = 9160
       consistency-level = "QUORUM"  # Options: ZERO, ONE, QUORUM, DCQUORUM, DCQUORUMSYNC, ALL, ANY
     
-    
+
     
       hostname = "127.0.0.1"        # IP address or hostname of the MongoDB DB instance
       port = 27017
diff --git a/config/log4j.properties b/config/log4j.properties
index 903ccd16af..76d3661163 100755
--- a/config/log4j.properties
+++ b/config/log4j.properties
@@ -1,20 +1,20 @@
-# for production, you should probably set the root to INFO
-# and the pattern to %c instead of %l.  (%l is slower.)
-
-# output messages into a rolling log file as well as stdout
-log4j.rootLogger=INFO,stdout,R
-
-# stdout
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
-
-# rolling log file ("system.log
-log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
-log4j.appender.R.DatePattern='.'yyyy-MM-dd-HH
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%5p [%t] %d{ISO8601} %F (line %L) %m%n
-
-# Edit the next line to point to your logs directory
-log4j.appender.R.File=./logs/akka.log
-
-log4j.logger.org.atmosphere=DEBUG
+# for production, you should probably set the root to INFO
+# and the pattern to %c instead of %l.  (%l is slower.)
+
+# output messages into a rolling log file as well as stdout
+log4j.rootLogger=INFO,stdout,R
+
+# stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
+
+# rolling log file ("system.log
+log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.R.DatePattern='.'yyyy-MM-dd-HH
+log4j.appender.R.layout=org.apache.log4j.PatternLayout
+log4j.appender.R.layout.ConversionPattern=%5p [%t] %d{ISO8601} %F (line %L) %m%n
+
+# Edit the next line to point to your logs directory
+log4j.appender.R.File=./logs/akka.log
+
+log4j.logger.org.atmosphere=DEBUG
diff --git a/config/storage-conf.xml b/config/storage-conf.xml
index 06ba8007a2..2647fdcd0e 100644
--- a/config/storage-conf.xml
+++ b/config/storage-conf.xml
@@ -21,15 +21,15 @@
   
   
 
-  
   akka
 
   
-      
       
-      
-      
 
       
       org.apache.cassandra.locator.EndPointSnitch
-        
+
     
   
 
@@ -158,7 +158,7 @@
    ~ Authenticator: any IAuthenticator may be used, including your own as long
    ~ as it is on the classpath.  Out of the box, Cassandra provides
    ~ org.apache.cassandra.auth.AllowAllAuthenticator and,
-   ~ org.apache.cassandra.auth.SimpleAuthenticator 
+   ~ org.apache.cassandra.auth.SimpleAuthenticator
    ~ (SimpleAuthenticator uses access.properties and passwd.properties by
    ~ default).
    ~
@@ -188,7 +188,7 @@
    ~ are sent to the node with the "closest" token, so distributing your
    ~ tokens equally along the key distribution space will spread keys
    ~ evenly across your cluster.)  This setting is only checked the first
-   ~ time a node is started. 
+   ~ time a node is started.
 
    ~ This can also be useful with RandomPartitioner to force equal spacing
    ~ of tokens around the hash space, especially for clusters with a small
@@ -227,9 +227,9 @@
 
   
 
-  
   9160
-  
   false
@@ -285,16 +285,16 @@
 
   
   64
 
   
@@ -314,7 +314,7 @@
 
   
-   
+  
 
   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
FJOC?m!Ri12

literal 0
HcmV?d00001

diff --git a/embedded-repo/org/atmosphere/atmosphere-jersey/0.6-20100604/atmosphere-jersey-0.6-20100604.pom b/embedded-repo/org/atmosphere/atmosphere-jersey/0.6-20100604/atmosphere-jersey-0.6-20100604.pom
new file mode 100755
index 0000000000..a78d593fa1
--- /dev/null
+++ b/embedded-repo/org/atmosphere/atmosphere-jersey/0.6-20100604/atmosphere-jersey-0.6-20100604.pom
@@ -0,0 +1,8 @@
+
+
+   4.0.0
+   org.atmosphere
+   atmosphere-jersey
+   0.6-20100604
+   jar
+
\ No newline at end of file
diff --git a/embedded-repo/org/atmosphere/atmosphere-runtime/0.6-20100604/atmosphere-runtime-0.6-20100604.jar b/embedded-repo/org/atmosphere/atmosphere-runtime/0.6-20100604/atmosphere-runtime-0.6-20100604.jar
new file mode 100644
index 0000000000000000000000000000000000000000..43994698650b9bfa6ca534c55b29948158befe58
GIT binary patch
literal 168585
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 zƫ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 IG|&=D0N4SeZvX%Q literal 0 HcmV?d00001 diff --git a/embedded-repo/org/atmosphere/atmosphere-runtime/0.6-20100604/atmosphere-runtime-0.6-20100604.pom b/embedded-repo/org/atmosphere/atmosphere-runtime/0.6-20100604/atmosphere-runtime-0.6-20100604.pom new file mode 100755 index 0000000000..729c6830df --- /dev/null +++ b/embedded-repo/org/atmosphere/atmosphere-runtime/0.6-20100604/atmosphere-runtime-0.6-20100604.pom @@ -0,0 +1,8 @@ + + + 4.0.0 + org.atmosphere + atmosphere-runtime + 0.6-20100604 + jar + \ No newline at end of file diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala index ca42082067..1f4b0cd669 100644 --- a/project/build/AkkaProject.scala +++ b/project/build/AkkaProject.scala @@ -15,7 +15,7 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) { // ------------------------------------------------------------ // project versions val JERSEY_VERSION = "1.2" - val ATMO_VERSION = "0.6-SNAPSHOT" + val ATMO_VERSION = "0.6-20100604" val CASSANDRA_VERSION = "0.6.1" val LIFT_VERSION = "2.0-scala280-SNAPSHOT" val SCALATEST_VERSION = "1.2-for-scala-2.8.0.RC3-SNAPSHOT" @@ -63,7 +63,7 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) { val jerseyModuleConfig = ModuleConfiguration("com.sun.jersey", javaNetRepo) val jerseyContrModuleConfig = ModuleConfiguration("com.sun.jersey.contribs", javaNetRepo) val grizzlyModuleConfig = ModuleConfiguration("com.sun.grizzly", javaNetRepo) - val atmosphereModuleConfig = ModuleConfiguration("org.atmosphere", sonatypeSnapshotRepo) + // val atmosphereModuleConfig = ModuleConfiguration("org.atmosphere", sonatypeSnapshotRepo) val liftModuleConfig = ModuleConfiguration("net.liftweb", ScalaToolsSnapshots) // ------------------------------------------------------------ @@ -216,6 +216,9 @@ class AkkaParent(info: ProjectInfo) extends DefaultProject(info) { val atmo = "org.atmosphere" % "atmosphere-annotations" % ATMO_VERSION % "compile" val atmo_jersey = "org.atmosphere" % "atmosphere-jersey" % ATMO_VERSION % "compile" val atmo_runtime = "org.atmosphere" % "atmosphere-runtime" % ATMO_VERSION % "compile" + val atmo_tomcat = "org.atmosphere" % "atmosphere-compat-tomcat" % ATMO_VERSION % "compile" + val atmo_weblogic = "org.atmosphere" % "atmosphere-compat-weblogic" % ATMO_VERSION % "compile" + val atmo_jbossweb = "org.atmosphere" % "atmosphere-compat-jbossweb" % ATMO_VERSION % "compile" val commons_logging = "commons-logging" % "commons-logging" % "1.1.1" % "compile" val annotation = "javax.annotation" % "jsr250-api" % "1.0" % "compile" val lift_common = "net.liftweb" % "lift-common" % LIFT_VERSION % "compile" From 6a5cdabd5dda2d1777c64d654958773006fc337e Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Sat, 5 Jun 2010 15:38:43 +0200 Subject: [PATCH 20/24] Fixing Jersey classpath resource scanning --- .../actor/BootableActorLoaderService.scala | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/akka-core/src/main/scala/actor/BootableActorLoaderService.scala b/akka-core/src/main/scala/actor/BootableActorLoaderService.scala index a44db8fd07..85bfdd4d9a 100644 --- a/akka-core/src/main/scala/actor/BootableActorLoaderService.scala +++ b/akka-core/src/main/scala/actor/BootableActorLoaderService.scala @@ -7,10 +7,45 @@ package se.scalablesolutions.akka.actor import java.io.File import java.net.{URL, URLClassLoader} import java.util.jar.JarFile +import java.util.Enumeration import se.scalablesolutions.akka.util.{Bootable, Logging} import se.scalablesolutions.akka.config.Config._ +class AkkaDeployClassLoader(urls : List[URL], parent : ClassLoader) extends URLClassLoader(urls.toArray.asInstanceOf[Array[URL]],parent) with Logging +{ + override def findResources(resource : String) = { + val normalResult = super.findResources(resource) + if(normalResult.hasMoreElements) normalResult else findDeployed(resource) + } + + def findDeployed(resource : String) = new Enumeration[URL]{ + private val classes = getURLs.flatMap( listClassesInPackage(_,resource) ) + log.debug("When looking for %s we found %s",resource,classes.mkString(", ")) + private val it = classes.iterator + def hasMoreElements = it.hasNext + def nextElement = it.next + } + + def listClassesInPackage(jar : URL, pkg : String) = { + val f = new File(jar.getFile) + val jf = new JarFile(f) + try { + val es = jf.entries + var result = List[URL]() + while(es.hasMoreElements) + { + val e = es.nextElement + if(!e.isDirectory && e.getName.startsWith(pkg) && e.getName.endsWith(".class")) + result ::= new URL("jar:" + f.toURI.toURL + "!/" + e) + } + result + } finally { + jf.close + } + } +} + /** * Handles all modules in the deploy directory (load and unload) */ @@ -46,10 +81,7 @@ trait BootableActorLoaderService extends Bootable with Logging { log.debug("Loading dependencies [%s]", dependencyJars) val allJars = toDeploy ::: dependencyJars - URLClassLoader.newInstance( - allJars.toArray.asInstanceOf[Array[URL]], - Thread.currentThread.getContextClassLoader) - //parentClassLoader) + new AkkaDeployClassLoader(allJars,Thread.currentThread.getContextClassLoader) } else Thread.currentThread.getContextClassLoader) } From c83f80a6827d18936766e01a304df1c764c707c7 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Sat, 5 Jun 2010 16:03:38 +0200 Subject: [PATCH 21/24] Tidying up debug statements --- .../src/main/scala/actor/BootableActorLoaderService.scala | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/akka-core/src/main/scala/actor/BootableActorLoaderService.scala b/akka-core/src/main/scala/actor/BootableActorLoaderService.scala index 85bfdd4d9a..47057b24a7 100644 --- a/akka-core/src/main/scala/actor/BootableActorLoaderService.scala +++ b/akka-core/src/main/scala/actor/BootableActorLoaderService.scala @@ -12,7 +12,7 @@ import java.util.Enumeration import se.scalablesolutions.akka.util.{Bootable, Logging} import se.scalablesolutions.akka.config.Config._ -class AkkaDeployClassLoader(urls : List[URL], parent : ClassLoader) extends URLClassLoader(urls.toArray.asInstanceOf[Array[URL]],parent) with Logging +class AkkaDeployClassLoader(urls : List[URL], parent : ClassLoader) extends URLClassLoader(urls.toArray.asInstanceOf[Array[URL]],parent) { override def findResources(resource : String) = { val normalResult = super.findResources(resource) @@ -20,9 +20,7 @@ class AkkaDeployClassLoader(urls : List[URL], parent : ClassLoader) extends URLC } def findDeployed(resource : String) = new Enumeration[URL]{ - private val classes = getURLs.flatMap( listClassesInPackage(_,resource) ) - log.debug("When looking for %s we found %s",resource,classes.mkString(", ")) - private val it = classes.iterator + private val it = getURLs.flatMap( listClassesInPackage(_,resource) ).iterator def hasMoreElements = it.hasNext def nextElement = it.next } From 3925993b14247f9ca9aa1d7f2b44b7f3c85658f0 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Sat, 5 Jun 2010 16:11:59 +0200 Subject: [PATCH 22/24] Tidying up more debug statements --- akka-core/src/main/scala/remote/RemoteProtocolBuilder.scala | 1 - 1 file changed, 1 deletion(-) diff --git a/akka-core/src/main/scala/remote/RemoteProtocolBuilder.scala b/akka-core/src/main/scala/remote/RemoteProtocolBuilder.scala index 3b321c8567..ef2657901c 100644 --- a/akka-core/src/main/scala/remote/RemoteProtocolBuilder.scala +++ b/akka-core/src/main/scala/remote/RemoteProtocolBuilder.scala @@ -97,7 +97,6 @@ object RemoteProtocolBuilder { } def setMessage(message: Any, builder: RemoteReplyProtocol.Builder) = { - (new Exception).printStackTrace if (message.isInstanceOf[Serializable.SBinary[_]]) { val serializable = message.asInstanceOf[Serializable.SBinary[_ <: Any]] builder.setProtocol(SerializationProtocol.SBINARY) From 906c12ad3b1570f7484cf3d43f61ea981eaa9e13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bon=C3=A9r?= Date: Sat, 5 Jun 2010 17:12:40 +0200 Subject: [PATCH 23/24] Added methods to retreive children from a Supervisor --- .../src/main/scala/actor/Supervisor.scala | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/akka-core/src/main/scala/actor/Supervisor.scala b/akka-core/src/main/scala/actor/Supervisor.scala index 5607c17e96..fb30485160 100644 --- a/akka-core/src/main/scala/actor/Supervisor.scala +++ b/akka-core/src/main/scala/actor/Supervisor.scala @@ -124,8 +124,9 @@ sealed class Supervisor private[akka] ( extends Configurator { import Supervisor._ - private val childActors = new ConcurrentHashMap[String, List[ActorRef]] - private val childSupervisors = new CopyOnWriteArrayList[Supervisor] + private val _childActors = new ConcurrentHashMap[String, List[ActorRef]] + private val _childSupervisors = new CopyOnWriteArrayList[Supervisor] + private[akka] val supervisor = actorOf(new SupervisorActor(handler, trapExceptions)).start def uuid = supervisor.uuid @@ -141,15 +142,21 @@ sealed class Supervisor private[akka] ( def unlink(child: ActorRef) = supervisor.unlink(child) - // FIXME recursive search + do not fix if we remove feature that Actors can be RESTful usin Jersey annotations - def getInstance[T](clazz: Class[T]): List[T] = childActors.get(clazz.getName).asInstanceOf[List[T]] + // FIXME is this method needed? + def getInstance[T](clazz: Class[T]): List[T] = _childActors.get(clazz.getName).asInstanceOf[List[T]] - // FIXME recursive search + do not fix if we remove feature that Actors can be RESTful usin Jersey annotations + // FIXME is this method needed? def getComponentInterfaces: List[Class[_]] = - childActors.values.toArray.toList.asInstanceOf[List[List[AnyRef]]].flatten.map(_.getClass) + _childActors.values.toArray.toList.asInstanceOf[List[List[AnyRef]]].flatten.map(_.getClass) + + def children: List[ActorRef] = + _childActors.values.toArray.toList.asInstanceOf[List[List[ActorRef]]].flatten + + def childSupervisors: List[Supervisor] = + _childActors.values.toArray.toList.asInstanceOf[List[Supervisor]] // FIXME recursive search + do not fix if we remove feature that Actors can be RESTful usin Jersey annotations - def isDefined(clazz: Class[_]): Boolean = childActors.containsKey(clazz.getName) + def isDefined(clazz: Class[_]): Boolean = _childActors.containsKey(clazz.getName) def configure(config: SupervisorConfig): Unit = config match { case SupervisorConfig(_, servers) => @@ -159,11 +166,11 @@ sealed class Supervisor private[akka] ( actorRef.start val className = actorRef.actor.getClass.getName val currentActors = { - val list = childActors.get(className) + val list = _childActors.get(className) if (list eq null) List[ActorRef]() else list } - childActors.put(className, actorRef :: currentActors) + _childActors.put(className, actorRef :: currentActors) actorRef.lifeCycle = Some(lifeCycle) supervisor.link(actorRef) remoteAddress.foreach(address => @@ -171,7 +178,7 @@ sealed class Supervisor private[akka] ( case supervisorConfig @ SupervisorConfig(_, _) => // recursive supervisor configuration val childSupervisor = Supervisor(supervisorConfig) supervisor.link(childSupervisor.supervisor) - childSupervisors.add(childSupervisor) + _childSupervisors.add(childSupervisor) }) } } From 28b54da7f9b6398fd9a5a374806431ab49755562 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Sun, 6 Jun 2010 17:51:56 +0200 Subject: [PATCH 24/24] Removed legacy code --- .../src/main/scala/actor/Supervisor.scala | 16 ++-------- .../ActiveObjectGuiceConfigurator.scala | 7 ++--- .../src/main/scala/config/Configurator.scala | 19 +----------- .../scala/config/ConfiguratorRepository.scala | 29 ------------------- 4 files changed, 6 insertions(+), 65 deletions(-) delete mode 100644 akka-core/src/main/scala/config/ConfiguratorRepository.scala diff --git a/akka-core/src/main/scala/actor/Supervisor.scala b/akka-core/src/main/scala/actor/Supervisor.scala index fb30485160..c13a345efc 100644 --- a/akka-core/src/main/scala/actor/Supervisor.scala +++ b/akka-core/src/main/scala/actor/Supervisor.scala @@ -5,7 +5,7 @@ package se.scalablesolutions.akka.actor import se.scalablesolutions.akka.config.ScalaConfig._ -import se.scalablesolutions.akka.config.{AllForOneStrategy, OneForOneStrategy, FaultHandlingStrategy, ConfiguratorRepository, Configurator} +import se.scalablesolutions.akka.config.{AllForOneStrategy, OneForOneStrategy, FaultHandlingStrategy} import se.scalablesolutions.akka.util.Logging import se.scalablesolutions.akka.remote.RemoteServer import Actor._ @@ -120,8 +120,7 @@ class SupervisorFactory private[akka] (val config: SupervisorConfig) extends Log * @author Jonas Bonér */ sealed class Supervisor private[akka] ( - handler: FaultHandlingStrategy, trapExceptions: List[Class[_ <: Throwable]]) - extends Configurator { + handler: FaultHandlingStrategy, trapExceptions: List[Class[_ <: Throwable]]) { import Supervisor._ private val _childActors = new ConcurrentHashMap[String, List[ActorRef]] @@ -132,7 +131,6 @@ sealed class Supervisor private[akka] ( def uuid = supervisor.uuid def start: Supervisor = { - ConfiguratorRepository.registerConfigurator(this) this } @@ -142,22 +140,12 @@ sealed class Supervisor private[akka] ( def unlink(child: ActorRef) = supervisor.unlink(child) - // FIXME is this method needed? - def getInstance[T](clazz: Class[T]): List[T] = _childActors.get(clazz.getName).asInstanceOf[List[T]] - - // FIXME is this method needed? - def getComponentInterfaces: List[Class[_]] = - _childActors.values.toArray.toList.asInstanceOf[List[List[AnyRef]]].flatten.map(_.getClass) - def children: List[ActorRef] = _childActors.values.toArray.toList.asInstanceOf[List[List[ActorRef]]].flatten def childSupervisors: List[Supervisor] = _childActors.values.toArray.toList.asInstanceOf[List[Supervisor]] - // FIXME recursive search + do not fix if we remove feature that Actors can be RESTful usin Jersey annotations - def isDefined(clazz: Class[_]): Boolean = _childActors.containsKey(clazz.getName) - def configure(config: SupervisorConfig): Unit = config match { case SupervisorConfig(_, servers) => servers.map(server => diff --git a/akka-core/src/main/scala/config/ActiveObjectGuiceConfigurator.scala b/akka-core/src/main/scala/config/ActiveObjectGuiceConfigurator.scala index 9785ea2082..8d3a089d26 100644 --- a/akka-core/src/main/scala/config/ActiveObjectGuiceConfigurator.scala +++ b/akka-core/src/main/scala/config/ActiveObjectGuiceConfigurator.scala @@ -40,7 +40,7 @@ private[akka] class ActiveObjectGuiceConfigurator extends ActiveObjectConfigurat * @param clazz the class for the active object * @return the active objects for the class */ - override def getInstance[T](clazz: Class[T]): List[T] = synchronized { + def getInstance[T](clazz: Class[T]): List[T] = synchronized { log.debug("Retrieving active object [%s]", clazz.getName) if (injector eq null) throw new IllegalStateException( "inject() and/or supervise() must be called before invoking getInstance(clazz)") @@ -52,7 +52,7 @@ private[akka] class ActiveObjectGuiceConfigurator extends ActiveObjectConfigurat List(proxy.asInstanceOf[T]) } - override def isDefined(clazz: Class[_]): Boolean = synchronized { + def isDefined(clazz: Class[_]): Boolean = synchronized { activeObjectRegistry.get(clazz).isDefined } @@ -60,7 +60,7 @@ private[akka] class ActiveObjectGuiceConfigurator extends ActiveObjectConfigurat injector.getInstance(clazz).asInstanceOf[T] } - override def getComponentInterfaces: List[Class[_]] = + def getComponentInterfaces: List[Class[_]] = for (c <- components) yield { if (c.intf.isDefined) c.intf.get else c.target @@ -122,7 +122,6 @@ private[akka] class ActiveObjectGuiceConfigurator extends ActiveObjectConfigurat override def supervise: ActiveObjectConfiguratorBase = synchronized { if (injector eq null) inject supervisor = Some(ActiveObject.supervise(restartStrategy, supervised)) - ConfiguratorRepository.registerConfigurator(this) this } diff --git a/akka-core/src/main/scala/config/Configurator.scala b/akka-core/src/main/scala/config/Configurator.scala index 58e37ce931..db92c5f35b 100644 --- a/akka-core/src/main/scala/config/Configurator.scala +++ b/akka-core/src/main/scala/config/Configurator.scala @@ -6,24 +6,7 @@ package se.scalablesolutions.akka.config import ScalaConfig.{RestartStrategy, Component} -/** - * Manages the active abject or actor that has been put under supervision for the class specified. - */ -private[akka] trait Configurator { - /** - * Returns the active abject or actor that has been put under supervision for the class specified. - * - * @param clazz the class for the active object - * @return the active object for the class - */ - def getInstance[T](clazz: Class[T]): List[T] - - def getComponentInterfaces: List[Class[_]] - - def isDefined(clazz: Class[_]): Boolean -} - -private[akka] trait ActiveObjectConfiguratorBase extends Configurator { +private[akka] trait ActiveObjectConfiguratorBase { def getExternalDependency[T](clazz: Class[T]): T def configure(restartStrategy: RestartStrategy, components: List[Component]): ActiveObjectConfiguratorBase diff --git a/akka-core/src/main/scala/config/ConfiguratorRepository.scala b/akka-core/src/main/scala/config/ConfiguratorRepository.scala deleted file mode 100644 index 8ddc16f9fe..0000000000 --- a/akka-core/src/main/scala/config/ConfiguratorRepository.scala +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright (C) 2009-2010 Scalable Solutions AB - */ - -package se.scalablesolutions.akka.config - -import scala.collection.mutable.HashSet - -import se.scalablesolutions.akka.util.Logging - -object ConfiguratorRepository extends Logging { - - private val configuration = new HashSet[Configurator] - - def registerConfigurator(conf: Configurator) = synchronized { - configuration += conf - } - - def getConfigurators: List[Configurator] = synchronized { - configuration.toList - //configurations.getOrElse(ctx, throw new IllegalArgumentException("No configuration for servlet context [" + ctx + "]")) - } -} - -class ConfiguratorRepository extends Logging { - def registerConfigurator(conf: Configurator) = ConfiguratorRepository.registerConfigurator(conf) - def getConfigurators: List[Configurator] = ConfiguratorRepository.getConfigurators -} -