Mam platformę zabaw 2, która jest podłączona do zdalnego systemu klastrów Akka, oba systemy są w Javie. Mam strukturę danych opakowaną w klasę i zaimplementowałem możliwość serializacji w klasie opakowania. Chcę użyć struktury danych do obliczeń zdalnych, ale za każdym razem, gdy próbuję wysłać klasę opakowania do zdalnego systemu Akka, pojawia się błąd.
Poniżej znajdują się fragmenty kodu.
to jest klasa opakowania
package controllers;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Map;
public class Coordinates implements Serializable{
String className = null;
Map <String,ArrayList<Object>> jMap = null;
boolean train = false;
public Coordinates() { train = true;}
public Coordinates (String className)
{
this.className = className;
}
public Coordinates (Map <String,ArrayList<Object>> jMap , boolean b)
{
this.jsonMap = jMap;
train = b;
}
}
jest to klasa aktora, która wysyła obiekt
package controllers;
import akka.actor.ActorRef;
import akka.actor.UntypedActor;
public class LocalActor extends UntypedActor {
ActorRef masterActor;
@Override
public void onReceive(Object arg) throws Exception {
if(arg instanceof Coordinates)
{ Coordinates msg = (Coordinates) arg ;
masterActor.tell(msg , getSelf());
}
}
public void preStart()
{
masterActor = getContext().actorFor("akka://[email protected]:2552/user/masterActor");
}
}
to jest aktor Akka, który otrzymuje zajęcia
package Rubine_Cluster;
import java.io.Serializable;
import akka.actor.*;
public class MasterActor extends UntypedActor implements Serializable{
public MasterActor(){System.out.println(" the masteractor has been started ");}
@Override
public void onReceive(Object message) throws Exception {
System.out.print(" this is from before me to you "+message.toString());
if(message instanceof Coordinates)
{ Coordinates msg = (Coordinates) message;
try { System.out.print(" this is from message " + msg.jsonMap.toString());
getSender().tell( 1234 , getSelf());
} catch (Exception e) {
getSender().tell(new akka.actor.Status.Failure(e), getSelf());
throw e;
}
}
else{ unhandled(message);}
}
}
to jest komunikat o błędzie z mojego IDE Eclipse
[INFO] [10/02/2012 02:58:35.606] [main] [ActorSystem(MasterNode)] REMOTE: RemoteServerStarted@akka://[email protected]:2552
Master Node is called
the masteractor has been started
[INFO] [10/02/2012 02:59:28.223] [MasterNode-7] [ActorSystem(MasterNode)] REMOTE: RemoteClientStarted@akka://[email protected]:63305
[ERROR] [10/02/2012 02:59:28.334] [MasterNode-7] [ActorSystem(MasterNode)] REMOTE: RemoteServerError@akka://[email protected]:2552] Error[java.lang.ClassNotFoundException:controllers.Coordinates
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at akka.util.ClassLoaderObjectInputStream.resolveClass(ClassLoaderObjectInputStream.scala:12)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at akka.serialization.JavaSerializer$$anonfun$1.apply(Serializer.scala:121)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
at akka.serialization.JavaSerializer.fromBinary(Serializer.scala:121)
at akka.serialization.Serialization.deserialize(Serialization.scala:73)
at akka.remote.MessageSerializer$.deserialize(MessageSerializer.scala:22)
at akka.remote.RemoteMessage.payload(RemoteTransport.scala:210)
at akka.remote.RemoteMarshallingOps$class.receiveMessage(RemoteTransport.scala:276)
at akka.remote.netty.NettyRemoteTransport.receiveMessage(NettyRemoteSupport.scala:30)
at akka.remote.netty.RemoteServerHandler.messageReceived(Server.scala:182)
at org.jboss.netty.channel.SimpleChannelUpstreamHandler.handleUpstream(SimpleChannelUpstreamHandler.java:75)
at akka.remote.netty.RemoteServerHandler.handleUpstream(Server.scala:154)
at org.jboss.netty.channel.StaticChannelPipeline.sendUpstream(StaticChannelPipeline.java:366)
at org.jboss.netty.channel.StaticChannelPipeline$StaticChannelHandlerContext.sendUpstream(StaticChannelPipeline.java:528)
at org.jboss.netty.handler.execution.ChannelUpstreamEventRunnable.run(ChannelUpstreamEventRunnable.java:44)
at org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor$ChildExecutor.run(OrderedMemoryAwareThreadPoolExecutor.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
]
Zaimplementowałem także klasę Cooperative w systemie Remote Akka. Każda sugestia lub pomoc zostanie doceniona. Dzięki