Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Play 2和远程Akka群集实现序列化_Java_Serialization_Playframework 2.0_Akka - Fatal编程技术网

Java 使用Play 2和远程Akka群集实现序列化

Java 使用Play 2和远程Akka群集实现序列化,java,serialization,playframework-2.0,akka,Java,Serialization,Playframework 2.0,Akka,我有一个play framework 2,它连接到一个远程Akka集群系统,这两个系统都是java的。 我有一个封装在类中的数据结构,并且实现了serializable 在包装器类上。 我想使用数据结构进行远程计算,但每当我试图将包装器类发送到远程Akka系统时,我都会收到一个错误 下面是代码片段 这是包装器类 package controllers; import java.io.Serializable; import java.util.ArrayList; import java.ut

我有一个play framework 2,它连接到一个远程Akka集群系统,这两个系统都是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;
             }          
}
这是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);}
  }  
}
这是来自EclipseIDE的错误消息

[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)

显然,您的主参与者在其类路径中没有控制器。另一个答案建议代码可重用性,但这不是根本原因;在某些情况下,这也没有意义(您可以在本地和主机中执行不同的操作)。你的男主角是如何塑造的?它的类路径是什么样子的?只需将类添加到主项目中,就可以了。

是第一个包含两个项目要实现的抽象类的模型。你能给我进一步解释一下吗?我对在play framework和akka java.Nope中编程有点生疏。在一个单独的模块或项目中,模型类只能有一个实现,其他两个项目都必须依赖于此实现(通过自定义Build.scala文件,)因此,这意味着在Play框架中,我必须向build.scala文件添加依赖项,在Akka中,我必须向POM.xml文件添加依赖项,因为远程Akka是一个Maven项目。这意味着您必须为您的models类创建一个独立的Maven项目,然后在Play(build.scala)中向其添加依赖项远程Akka(pom.xml)项目我是这里的新手。计划是使用Json将数据从play前端连接到contrller类。我已经完成了那部分。然后将数据放入数据结构中,例如Map。将该对象包装在一个类中,并将该类对象连接到远程Akka系统,该系统是一个maven项目。我必须从包装器项目创建一个jar文件吗。你能帮我一个简单的代码片段吗。我恳求你。因为项目要迟到了
module containing Coordinate class (Maven Project)
   |
   ---- Local Actor (Play project)
   |
   ---- Remote Actor (Maven Project)