문제

원격 AKKA 클러스터 시스템에 연결된 Play 프레임 워크 2가 모두 Java에 있습니다. 나는 클래스에 싸여있는 데이터의 강렬을 가지고 있으며, 나는 serializable을 구현했다. 래퍼 클래스에서. 나는 원격 계산을 위해 데이터를 똑바로 사용하려고하지만 래퍼 클래스를 원격 AKKA 시스템으로 보내려고 할 때마다 오류가 발생합니다.

아래의 코드 스 니펫입니다.

이것은 래퍼 클래스 입니다

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;
             }          
}
.

이것은 객체를 보내는 액터 클래스입니다

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://MasterNode@127.0.0.1:2552/user/masterActor");
    }

}
.

이것은 AKKA 배우입니다 클래스를받습니다.

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);}
  }  
}
.

이 Eclipse IDE의 오류 메시지

[INFO] [10/02/2012 02:58:35.606] [main] [ActorSystem(MasterNode)] REMOTE: RemoteServerStarted@akka://MasterNode@127.0.0.1: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://LocalNode@127.0.0.1:63305
[ERROR] [10/02/2012 02:59:28.334] [MasterNode-7] [ActorSystem(MasterNode)] REMOTE: RemoteServerError@akka://MasterNode@127.0.0.1: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)
]
.

원격 AKKA 시스템에서도 좌표 클래스도 구현했습니다. 어떤 제안이나 도움을받을 것입니다. 감사합니다

도움이 되었습니까?

해결책

좌표 클래스를 두 번 구현할 필요가 없습니다.모든 모델 클래스 (좌표 등)가 포함 된 모듈이 있어야하고 다른 두 개의 AKKA 프로젝트를이 첫 번째 방법으로 만듭니다.

이런 종류의 프로젝트 / 모듈 의존성이 있어야합니다.

module containing Coordinate class (Maven Project)
   |
   ---- Local Actor (Play project)
   |
   ---- Remote Actor (Maven Project)
.

다른 팁

분명히 마스터 액터에는 컨트롤러가 없습니다. ClassPath의 Coordinates가 없습니다.또 다른 답변은 코드 재사용을 제안했지만 근본 원인이 아닙니다.경우에 따라 어떤 경우에는, 로컬 및 마스터에서 다른 작업을 가질 수 있음).마스터 배우는 어떻게 지어 졌습니까?클래스 경로는 어떻게 생겼습니까?클래스를 마스터 프로젝트에 추가하면 좋을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top