Remote actors with non-uuid names doesnt work for req./reply-pattern
Two server-side remote actors (a and b) at different servers are registered with non-uuid names. Sending a message from a to b and then using reply(replyMsg) at b results in the stack trace below when the message is received back to a.
@a: Actor.remote.register("test", actor)
@b: Actor.remote.register("test", actor)
Using the actor uuid works fine. Stack trace:
akka.actor.ActorInitializationException: Could not instantiate Actor
Make sure Actor is NOT defined inside a class/trait,
if so put it outside the class/trait, f.e. in a companion object,
OR try to change: 'actorOf[MyActor]' to 'actorOf(new MyActor)'.
at akka.actor.Actor$$anonfun$actorOf$1$$anonfun$apply$1.apply(Actor.scala:162) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.Actor$$anonfun$actorOf$1$$anonfun$apply$1.apply(Actor.scala:162) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at scala.Option.getOrElse(Option.scala:104) ~[scala-library.jar:na]
at akka.actor.Actor$$anonfun$actorOf$1.apply(Actor.scala:161) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.Actor$$anonfun$actorOf$1.apply(Actor.scala:159) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.LocalActorRef$$anonfun$4.apply(ActorRef.scala:1001) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.LocalActorRef$$anonfun$4.apply(ActorRef.scala:1001) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:71) ~[scala-library.jar:na]
at akka.actor.LocalActorRef.akka$actor$LocalActorRef$$newActor(ActorRef.scala:1001) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.LocalActorRef$$anonfun$3.apply(ActorRef.scala:571) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.LocalActorRef$$anonfun$3.apply(ActorRef.scala:571) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.util.ReentrantGuard.withGuard(LockUtil.scala:19) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.LocalActorRef.<init>(ActorRef.scala:571) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.Actor$.actorOf(Actor.scala:159) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.createClientManagedActor(NettyRemoteSupport.scala:1106) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.createActor(NettyRemoteSupport.scala:1136) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.dispatchToActor(NettyRemoteSupport.scala:943) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.handleRemoteMessageProtocol(NettyRemoteSupport.scala:931) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.messageReceived(NettyRemoteSupport.scala:912) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.handleUpstream(NettyRemoteSupport.scala:905) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:317) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:299) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:350) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:281) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:201) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46) [netty-3.2.3.Final.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.6.0_20]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.6.0_20]
at java.lang.Thread.run(Thread.java:636) [na:1.6.0_20]
@a: Actor.remote.register("test", actor)
@b: Actor.remote.register("test", actor)
Using the actor uuid works fine. Stack trace:
akka.actor.ActorInitializationException: Could not instantiate Actor
Make sure Actor is NOT defined inside a class/trait,
if so put it outside the class/trait, f.e. in a companion object,
OR try to change: 'actorOf[MyActor]' to 'actorOf(new MyActor)'.
at akka.actor.Actor$$anonfun$actorOf$1$$anonfun$apply$1.apply(Actor.scala:162) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.Actor$$anonfun$actorOf$1$$anonfun$apply$1.apply(Actor.scala:162) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at scala.Option.getOrElse(Option.scala:104) ~[scala-library.jar:na]
at akka.actor.Actor$$anonfun$actorOf$1.apply(Actor.scala:161) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.Actor$$anonfun$actorOf$1.apply(Actor.scala:159) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.LocalActorRef$$anonfun$4.apply(ActorRef.scala:1001) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.LocalActorRef$$anonfun$4.apply(ActorRef.scala:1001) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:71) ~[scala-library.jar:na]
at akka.actor.LocalActorRef.akka$actor$LocalActorRef$$newActor(ActorRef.scala:1001) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.LocalActorRef$$anonfun$3.apply(ActorRef.scala:571) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.LocalActorRef$$anonfun$3.apply(ActorRef.scala:571) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.util.ReentrantGuard.withGuard(LockUtil.scala:19) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.LocalActorRef.<init>(ActorRef.scala:571) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.actor.Actor$.actorOf(Actor.scala:159) ~[akka-actor-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.createClientManagedActor(NettyRemoteSupport.scala:1106) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.createActor(NettyRemoteSupport.scala:1136) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.dispatchToActor(NettyRemoteSupport.scala:943) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.handleRemoteMessageProtocol(NettyRemoteSupport.scala:931) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.messageReceived(NettyRemoteSupport.scala:912) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at akka.remote.netty.RemoteServerHandler.handleUpstream(NettyRemoteSupport.scala:905) ~[akka-remote-1.1-SNAPSHOT.jar:na]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.handler.codec.frame.FrameDecoder.unfoldAndFireMessageReceived(FrameDecoder.java:317) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.handler.codec.frame.FrameDecoder.callDecode(FrameDecoder.java:299) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.handler.codec.frame.FrameDecoder.messageReceived(FrameDecoder.java:216) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:302) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:76) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:274) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:261) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:350) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioWorker.processSelectedKeys(NioWorker.java:281) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:201) ~[netty-3.2.3.Final.jar:na]
at org.jboss.netty.util.internal.IoWorkerRunnable.run(IoWorkerRunnable.java:46) [netty-3.2.3.Final.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.6.0_20]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.6.0_20]
at java.lang.Thread.run(Thread.java:636) [na:1.6.0_20]
Leave a comment
on 2011-03-09 02:46 *
By viktorklang
Assigned to set to viktorklang
Milestone changed from 1.2 to 1.1
Cannot reproduce, this works on my box, in two separate JVMs:
object Server {
Actor.remote.start("localhost", 5555)
Actor.remote.register("foo", actorOf(new Actor {
def receive = {
case x: AnyRef =>
println("Got '%s' from %s" format (x, self.sender))
self reply_? x
}
}))
}
object Client {
Actor.remote.start("localhost", 6666)
val sender = actorOf(new Actor {
def receive = {
case (m: AnyRef, t: ActorRef) =>
println("Forwarding '%s' to %s" format (m, t))
t ! m
}
}).start
Actor.remote.register("foo", sender)
val to = Actor.remote.actorFor("foo", "localhost", 5555)
sender ! (("pigdog", to))
}
object Server {
Actor.remote.start("localhost", 5555)
Actor.remote.register("foo", actorOf(new Actor {
def receive = {
case x: AnyRef =>
println("Got '%s' from %s" format (x, self.sender))
self reply_? x
}
}))
}
object Client {
Actor.remote.start("localhost", 6666)
val sender = actorOf(new Actor {
def receive = {
case (m: AnyRef, t: ActorRef) =>
println("Forwarding '%s' to %s" format (m, t))
t ! m
}
}).start
Actor.remote.register("foo", sender)
val to = Actor.remote.actorFor("foo", "localhost", 5555)
sender ! (("pigdog", to))
}