From d54eb18228a0bcb7fcbe3d68ff8bdd2eb16598ba Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Sat, 30 Oct 2010 00:23:16 +0200 Subject: [PATCH] Switched to server managed for Supervisor config --- akka-actor/src/main/scala/actor/Supervisor.scala | 5 ++++- .../src/main/scala/util/ReflectiveAccess.scala | 6 +++--- .../src/main/scala/remote/RemoteServer.scala | 16 +++++++++++++++- .../src/main/scala/actor/TypedActor.scala | 2 +- 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/akka-actor/src/main/scala/actor/Supervisor.scala b/akka-actor/src/main/scala/actor/Supervisor.scala index 548c0bd0fb..daa0bac6c9 100644 --- a/akka-actor/src/main/scala/actor/Supervisor.scala +++ b/akka-actor/src/main/scala/actor/Supervisor.scala @@ -131,7 +131,6 @@ sealed class Supervisor(handler: FaultHandlingStrategy) { servers.map(server => server match { case Supervise(actorRef, lifeCycle, remoteAddress) => - remoteAddress.foreach { address => actorRef.makeRemote(address.hostname, address.port) } actorRef.start val className = actorRef.actor.getClass.getName val currentActors = { @@ -142,6 +141,10 @@ sealed class Supervisor(handler: FaultHandlingStrategy) { _childActors.put(className, actorRef :: currentActors) actorRef.lifeCycle = lifeCycle supervisor.link(actorRef) + if (remoteAddress.isDefined) { + val address = remoteAddress.get + RemoteServerModule.registerActor(new InetSocketAddress(address.hostname, address.port), actorRef) + } case supervisorConfig @ SupervisorConfig(_, _) => // recursive supervisor configuration val childSupervisor = Supervisor(supervisorConfig) supervisor.link(childSupervisor.supervisor) diff --git a/akka-actor/src/main/scala/util/ReflectiveAccess.scala b/akka-actor/src/main/scala/util/ReflectiveAccess.scala index 9f9c644dd3..51c895728e 100644 --- a/akka-actor/src/main/scala/util/ReflectiveAccess.scala +++ b/akka-actor/src/main/scala/util/ReflectiveAccess.scala @@ -114,7 +114,7 @@ object ReflectiveAccess extends Logging { val PORT = Config.config.getInt("akka.remote.server.port", 2552) type RemoteServerObject = { - def registerActor(address: InetSocketAddress, uuid: Uuid, actor: ActorRef): Unit + def registerActor(address: InetSocketAddress, actor: ActorRef): Unit def registerTypedActor(address: InetSocketAddress, name: String, typedActor: AnyRef): Unit } @@ -128,9 +128,9 @@ object ReflectiveAccess extends Logging { val remoteNodeObjectInstance: Option[RemoteNodeObject] = getObjectFor("akka.remote.RemoteNode$") - def registerActor(address: InetSocketAddress, uuid: Uuid, actorRef: ActorRef) = { + def registerActor(address: InetSocketAddress, actorRef: ActorRef) = { ensureRemotingEnabled - remoteServerObjectInstance.get.registerActor(address, uuid, actorRef) + remoteServerObjectInstance.get.registerActor(address, actorRef) } def registerTypedActor(address: InetSocketAddress, implementationClassName: String, proxy: AnyRef) = { diff --git a/akka-remote/src/main/scala/remote/RemoteServer.scala b/akka-remote/src/main/scala/remote/RemoteServer.scala index 6d72a40a40..977d9e86ac 100644 --- a/akka-remote/src/main/scala/remote/RemoteServer.scala +++ b/akka-remote/src/main/scala/remote/RemoteServer.scala @@ -139,10 +139,24 @@ object RemoteServer { private[akka] def unregister(hostname: String, port: Int) = guard.withWriteGuard { remoteServers.remove(Address(hostname, port)) } + + /** + * Used in REflectiveAccess + */ + private[akka] def registerActor(address: InetSocketAddress, actorRef: ActorRef) { + serverFor(address) foreach { _.register(actorRef) } + } + + /** + * Used in Reflective + */ + private[akka] def registerTypedActor(address: InetSocketAddress, implementationClassName: String, proxy: AnyRef) { + serverFor(address) foreach { _.registerTypedActor(implementationClassName,proxy)} + } } /** - * Life-cycle events for RemoteServer. + * Life-cycle events for RemoteServer. */ sealed trait RemoteServerLifeCycleEvent case class RemoteServerError(@BeanProperty val cause: Throwable, @BeanProperty val server: RemoteServer) extends RemoteServerLifeCycleEvent diff --git a/akka-typed-actor/src/main/scala/actor/TypedActor.scala b/akka-typed-actor/src/main/scala/actor/TypedActor.scala index ac5516dfb2..98d9bcdea3 100644 --- a/akka-typed-actor/src/main/scala/actor/TypedActor.scala +++ b/akka-typed-actor/src/main/scala/actor/TypedActor.scala @@ -919,7 +919,7 @@ private[akka] object AspectInitRegistry extends ListenerManagement { * Unregisters initialization and stops its ActorRef. */ def unregister(proxy: AnyRef): AspectInit = { - val init = initializations.remove(proxy) + val init = if (proxy ne null) initializations.remove(proxy) else null if (init ne null) { notifyListeners(AspectInitUnregistered(proxy, init)) init.actorRef.stop