diff --git a/akka-actor/src/main/scala/actor/ActorRef.scala b/akka-actor/src/main/scala/actor/ActorRef.scala index 6f176461e7..09477e9c03 100644 --- a/akka-actor/src/main/scala/actor/ActorRef.scala +++ b/akka-actor/src/main/scala/actor/ActorRef.scala @@ -972,12 +972,11 @@ class LocalActorRef private[akka] ( if (future.isDefined) future.get else throw new IllegalActorStateException("Expected a future from remote call to actor " + toString) } else { - val future = if (senderFuture.isDefined) senderFuture.get - else new DefaultCompletableFuture[T](timeout) + val future = if (senderFuture.isDefined) senderFuture else Some(new DefaultCompletableFuture[T](timeout)) val invocation = new MessageInvocation( - this, message, senderOption, Some(future.asInstanceOf[CompletableFuture[Any]]), transactionSet.get) + this, message, senderOption, future.asInstanceOf[Some[CompletableFuture[Any]]], transactionSet.get) dispatcher dispatchMessage invocation - future + future.get } } @@ -1114,10 +1113,10 @@ class LocalActorRef private[akka] ( true //Done } - if (!success) - attemptRestart + if (success) + () //Alles gut else - () //Yay! + attemptRestart } attemptRestart() //Tailrecursion @@ -1147,12 +1146,9 @@ class LocalActorRef private[akka] ( // ========= PRIVATE FUNCTIONS ========= private[this] def newActor: Actor = { - Actor.actorRefInCreation.withValue(Some(this)) { - val actor = actorFactory() - if (actor eq null) throw new ActorInitializationException( - "Actor instance passed to ActorRef can not be 'null'") - actor - } + val a = Actor.actorRefInCreation.withValue(Some(this)) { actorFactory() } + if (a eq null) throw new ActorInitializationException("Actor instance passed to ActorRef can not be 'null'") + a } private def joinTransaction(message: Any) = if (isTransactionSetInScope) { @@ -1590,7 +1586,7 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => if (isRunning) { if (sender.get.senderFuture.isDefined) postMessageToMailboxAndCreateFutureResultWithTimeout( message, timeout, sender.get.sender, sender.get.senderFuture) - else if (sender.get.sender.isDefined) postMessageToMailbox(message, Some(sender.get.sender.get)) + else if (sender.get.sender.isDefined) postMessageToMailbox(message, sender.get.sender) else throw new IllegalActorStateException("Can't forward message when initial sender is not an actor") } else throw new ActorInitializationException("Actor has not been started, you need to invoke 'actor.start' before using it") } @@ -1619,7 +1615,8 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => senderFuture.get completeWithResult message true } else if (sender.isDefined) { - sender.get ! message + //TODO: optimize away this allocation, perhaps by having implicit self: Option[ActorRef] in signature + sender.get.!(message)(Some(this)) true } else false } @@ -1634,9 +1631,10 @@ trait ScalaActorRef extends ActorRefShared { ref: ActorRef => def !(msg: Any) = future completeWithResult msg } } else if (sender.isDefined) { + val someSelf = Some(this) new Channel[Any] { val client = sender.get - def !(msg: Any) = client ! msg + def !(msg: Any) = client.!(msg)(someSelf) } } else throw new IllegalActorStateException("No channel available") } diff --git a/project/build/AkkaProject.scala b/project/build/AkkaProject.scala index 960d1ac892..f7b261edb3 100644 --- a/project/build/AkkaProject.scala +++ b/project/build/AkkaProject.scala @@ -21,9 +21,10 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { "-Xmigration", "-Xcheckinit", "-Xstrict-warnings", + // "-optimise", //Uncomment this for release compile "-Xwarninit", "-encoding", "utf8") - .map(x => CompileOption(x)) + .map(CompileOption(_)) override def javaCompileOptions = JavaCompileOption("-Xlint:unchecked") :: super.javaCompileOptions.toList // ------------------------------------------------------------------------------------------------------------------- @@ -248,6 +249,8 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { lazy val hbase_core = "org.apache.hbase" % "hbase-core" % "0.20.6" % "compile" + lazy val google_coll = "com.google.collections" % "google-collections" % "1.0" % "compile" + //Riak PB Client lazy val riak_pb_client = "com.trifork" % "riak-java-pb-client" % "1.0-for-akka-by-ticktock" % "compile" @@ -256,8 +259,6 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { lazy val camel_spring = "org.apache.camel" % "camel-spring" % CAMEL_VERSION % "test" lazy val cassandra_clhm = "org.apache.cassandra" % "clhm-production" % CASSANDRA_VERSION % "test" lazy val commons_coll = "commons-collections" % "commons-collections" % "3.2.1" % "test" - lazy val google_coll = "com.google.collections" % "google-collections" % "1.0" % "test" - lazy val google_coll_compile = "com.google.collections" % "google-collections" % "1.0" % "compile" lazy val high_scale = "org.apache.cassandra" % "high-scale-lib" % CASSANDRA_VERSION % "test" lazy val testJetty = "org.eclipse.jetty" % "jetty-server" % JETTY_VERSION % "test" @@ -275,10 +276,10 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { lazy val jetty_mortbay = "org.mortbay.jetty" % "jetty" % "6.1.14" % "test" //voldemort testing - lazy val jdom = "org.jdom" % "jdom" % "1.1" % "test" - lazy val vold_jetty = "org.mortbay.jetty" % "jetty" % "6.1.18" % "test" - lazy val velocity = "org.apache.velocity" % "velocity" % "1.6.2" % "test" - lazy val dbcp = "commons-dbcp" % "commons-dbcp" % "1.2.2" % "test" + lazy val jdom = "org.jdom" % "jdom" % "1.1" % "test" + lazy val vold_jetty = "org.mortbay.jetty" % "jetty" % "6.1.18" % "test" + lazy val velocity = "org.apache.velocity" % "velocity" % "1.6.2" % "test" + lazy val dbcp = "commons-dbcp" % "commons-dbcp" % "1.2.2" % "test" } // ------------------------------------------------------------------------------------------------------------------- @@ -630,7 +631,7 @@ class AkkaParentProject(info: ProjectInfo) extends DefaultProject(info) { //testing val scalatest = Dependencies.scalatest - val google_coll_compile = Dependencies.google_coll_compile + val google_coll = Dependencies.google_coll val jdom = Dependencies.jdom val jetty = Dependencies.vold_jetty val velocity = Dependencies.velocity