diff --git a/akka-actor/src/main/scala/akka/actor/Actor.scala b/akka-actor/src/main/scala/akka/actor/Actor.scala index e9d51703a8..3c44265013 100644 --- a/akka-actor/src/main/scala/akka/actor/Actor.scala +++ b/akka-actor/src/main/scala/akka/actor/Actor.scala @@ -313,6 +313,18 @@ object Actor extends ListenerManagement { createActor(address, () ⇒ new LocalActorRef(() ⇒ creator.create, address, Transient)) } + def localActorOf[T <: Actor: Manifest]: ActorRef = { + newLocalActorRef(manifest[T].erasure.asInstanceOf[Class[_ <: Actor]], new UUID().toString) + } + + def localActorOf[T <: Actor](clazz: Class[T]): ActorRef = { + newLocalActorRef(clazz, new UUID().toString) + } + + def localActorOf[T <: Actor](factory: ⇒ T): ActorRef = { + new LocalActorRef(() ⇒ factory, new UUID().toString, Transient) + } + /** * Use to spawn out a block of code in an event-driven actor. Will shut actor down when * the block has been executed. diff --git a/akka-actor/src/main/scala/akka/event/EventHandler.scala b/akka-actor/src/main/scala/akka/event/EventHandler.scala index 28adf4946d..39fcf0bb2a 100644 --- a/akka-actor/src/main/scala/akka/event/EventHandler.scala +++ b/akka-actor/src/main/scala/akka/event/EventHandler.scala @@ -17,7 +17,7 @@ import akka.AkkaException *

* Create, add and remove a listener: *

- * val eventHandlerListener = Actor.actorOf(new Actor {
+ * val eventHandlerListener = Actor.localActorOf(new Actor {
  *   self.dispatcher = EventHandler.EventHandlerDispatcher
  *
  *   def receive = {
@@ -111,7 +111,7 @@ object EventHandler extends ListenerManagement {
       defaultListeners foreach { listenerName ⇒
         try {
           ReflectiveAccess.getClassFor[Actor](listenerName) match {
-            case r: Right[_, Class[Actor]] ⇒ addListener(Actor.actorOf(r.b, listenerName).start())
+            case r: Right[_, Class[Actor]] ⇒ addListener(Actor.localActorOf(r.b).start())
             case l: Left[Exception, _]     ⇒ throw l.a
           }
         } catch {
diff --git a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala
index 0fec08d25a..dafd191f55 100644
--- a/akka-cluster/src/main/scala/akka/cluster/Cluster.scala
+++ b/akka-cluster/src/main/scala/akka/cluster/Cluster.scala
@@ -1281,7 +1281,7 @@ class DefaultClusterNode private[akka] (
   }
 
   private[cluster] def joinMembershipNode() {
-    nodeNameToAddress.put(nodeAddress.nodeName, remoteServerAddress)
+    nodeNameToAddress += (nodeAddress.nodeName -> remoteServerAddress)
     try {
       EventHandler.info(this,
         "Joining cluster as membership node [%s] on [%s]".format(nodeAddress, membershipNodePath))
@@ -1350,7 +1350,7 @@ class DefaultClusterNode private[akka] (
         }
 
         // notify all available nodes that they should fail-over all connections from 'from' to 'to'
-        val from = nodeNameToAddress.get(failedNodeName)
+        val from = nodeNameToAddress(failedNodeName)
         val to = remoteServerAddress
         Serialization.serialize((from, to)) match {
           case Left(error) ⇒ throw error
@@ -1527,12 +1527,12 @@ class MembershipChildListener(self: ClusterNode) extends IZkChildListener with E
           "MembershipChildListener at [%s] has children [%s]"
             .format(self.nodeAddress.nodeName, childList.mkString(" ")))
         self.findNewlyConnectedMembershipNodes(childList) foreach { name ⇒
-          self.nodeNameToAddress.put(name, self.addressForNode(name)) // update 'nodename-address' map
+          self.addressForNode(name) foreach (address ⇒ self.nodeNameToAddress += (name -> address)) // update 'nodename-address' map
           self.publish(NodeConnected(name))
         }
 
         self.findNewlyDisconnectedMembershipNodes(childList) foreach { name ⇒
-          self.nodeNameToAddress.remove(name) // update 'nodename-address' map
+          self.nodeNameToAddress - name // update 'nodename-address' map
           self.publish(NodeDisconnected(name))
         }
 
diff --git a/akka-cluster/src/main/scala/akka/cluster/ClusterDeployer.scala b/akka-cluster/src/main/scala/akka/cluster/ClusterDeployer.scala
index 070a52d96b..e24fb43367 100644
--- a/akka-cluster/src/main/scala/akka/cluster/ClusterDeployer.scala
+++ b/akka-cluster/src/main/scala/akka/cluster/ClusterDeployer.scala
@@ -21,7 +21,7 @@ import scala.collection.JavaConversions.collectionAsScalaIterable
 
 import com.eaio.uuid.UUID
 
-import java.util.concurrent.CountDownLatch
+import java.util.concurrent.{ CountDownLatch, TimeUnit }
 import java.util.concurrent.atomic.AtomicReference
 
 /**
@@ -154,7 +154,7 @@ object ClusterDeployer {
           deploymentInProgressLock.unlock() // signal deployment complete
 
         } else {
-          deploymentCompleted.await() // wait until deployment is completed by other "master" node
+          deploymentCompleted.await(30, TimeUnit.SECONDS) // wait until deployment is completed by other "master" node
         }
       }