Pregunta

Estoy tratando de conectar un sistema AKKA remoto a un marco de juego y parece que estoy teniendo un problema con la configuración.

Tengo una clase de controlador marco de juego y un actor AKKA, ya que los objetos locales a continuación son los códigos:

Cuando ejecuto el siguiente mensaje se muestra en la página web

[ClassNotFoundException: akka.remote.RemoteActorRefProvider]
In C:\Users\FAISAL\workspace\Rakka\app\controllers\Application.java at line 21.
17  public static Result index() throws InterruptedException { 
18    
19    System.out.println(" Local Node Called0");
20    
21    ActorSystem csystem = ActorSystem.create("Application", ConfigFactory.load().getConfig("LocalNode"));
22    ActorRef localNode = csystem.actorOf(new Props(LocalNode.class));
23
24      System.out.println(" Local Node Called1");
25      localNode.tell("Hello");

Este es el controlador:

public class Application extends Controller {



  public static Result index() throws InterruptedException { 

      System.out.println(" Local Node Called0");

      ActorSystem csystem = ActorSystem.create("Application", ConfigFactory.load().getConfig("LocalNode"));
      ActorRef localNode = csystem.actorOf(new Props(LocalNode.class));

        System.out.println(" Local Node Called1");
        localNode.tell("Hello World");
        System.out.println(" Local Node Called2");

        Thread.sleep(5000);
        csystem.shutdown();
        return ok(index.render("I am OK"));
  }    
}

Este es el actor local AKKA

public class LocalNode extends UntypedActor {

    LoggingAdapter log = Logging.getLogger(getContext().system(), this);
    Timeout timeout = new Timeout(Duration.parse("5 seconds"));

    ActorRef master;

    public void preStart()
    {
        /* Get reference to Master Node*/
         master = getContext().actorFor("akka://MasterNode@127.0.0.1:2552/user/master");
    }

    @Override
    public void onReceive(Object message) throws Exception {
        System.out.println(" Future called  ");

         Future<Object> future = Patterns.ask(master , message.toString(), timeout);

            String result = (String) Await.result(future, timeout.duration());

            log.info("Messagefrom Server", result); 
    }

}

Este es el archivo de reproducción localf

#confige the remote connection

LocalNode {
    akka {
        actor {
            provider = "akka.remote.RemoteActorRefProvider"
        }
        remote {
            transport = "akka.remote.netty.NettyRemoteTransport"
            netty {
                hostname = "127.0.0.1"
                port = 0
            }
        }
    }
}

El código a continuación es del sistema AKKA remoto.

Este es el maestro remoto

public class MasterNode implements Bootable
{
     final ActorSystem system;

      public MasterNode() {
        system = ActorSystem.create("MasterNode", ConfigFactory.load()
            .getConfig("master"));
        ActorRef actor = system.actorOf(new Props(MasterActor.class),"master");
        System.out.println(" Master Node is called ");
      }

      public void startup() {

      }

          public void shutdown() {
            system.shutdown();
          }
}  

Este es el sistema remoto del actor AKKA

public class MasterActor extends UntypedActor {

    @Override
    public void onReceive(Object message) throws Exception {


         if (message instanceof String) {
                // Get reference to the message sender and reply back
                getSender().tell(message + " got something");       
    }
  }  
}

Esto es de la configuración remota AKKA

master {
akka {
  actor {
    provider = "akka.remote.RemoteActorRefProvider"
  }
  remote {
    transport = "akka.remote.netty.NettyRemoteTransport"
    netty {
      hostname = "127.0.0.1"
      port = 2552
    }
 }
}}

Para ejecutar el sistema, primero inicialero el sistema remoto AKKA y luego Comience la reproducción 2 Framework

Después de ejecutar el framewrk de reproducción, obtengo el siguiente error

[info] play - Application started (Dev)
 Local Node Called0
[error] application -

! @6bol84j48 - Internal server error, for request [GET /] ->

play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[ClassN
otFoundException: akka.remote.RemoteActorRefProvider]]
        at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:134) [
play_2.9.1.jar:2.0.2]
        at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:115) [
play_2.9.1.jar:2.0.2]
        at akka.actor.Actor$class.apply(Actor.scala:318) [akka-actor.jar:2.0.2]
        at play.core.ActionInvoker.apply(Invoker.scala:113) [play_2.9.1.jar:2.0.
2]
        at akka.actor.ActorCell.invoke(ActorCell.scala:626) [akka-actor.jar:2.0.
2]
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:197) [akka-actor.j
ar:2.0.2]
Caused by: java.lang.ClassNotFoundException: akka.remote.RemoteActorRefProvider
        at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.7.0_01]
        at java.net.URLClassLoader$1.run(Unknown Source) ~[na:1.7.0_01]
        at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0
_01]
        at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.7.0_01]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.7.0_01]
        at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.7.0_01]

Parece que no estoy obteniendo algo, por favor, cualquier sugerencia o ayuda será bienvenida.

¿Fue útil?

Solución

Tal vez se olvidó de agregar la dependencia al control remoto AKKA en su aplicación PLAY2.

Si está utilizando Play 2.0.3, agregue la siguiente dependencia en su archivo project/Build.scala:

val appDependencies = Seq(
      "com.typesafe.akka" % "akka-remote" % "2.0.2"
)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top