質問

リモートのAKKAシステムをプレイフレームワークに接続しようとしていて、設定に問題があるように見えます。

Play Framework Controllerクラスと、以下のローカルオブジェクトがコード:の場合はAKKAアクター

次のメッセージを実行すると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");
.

これはコントローラです:

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

これは地元の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); 
    }

}
.

これはローカルプレイコンフェクトファイルです。

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

以下のコードはリモートAKKAシステムからのものです。

これはリモートマスタです

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

これはリモート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");       
    }
  }  
}
.

これはリモートAKKA config からです

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

システムを実行するには、まずAKKAリモートシステムを起動してから Play 2フレームワークを起動します

Play FramewRokを実行した後、次のエラーを取得します

[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]
.

は何か正しいことを受けていないように見えます提案や助けが歓迎されます。

役に立ちましたか?

解決

あなたはあなたのPlay2アプリケーションのAkkaリモートへの依存関係を追加するのを忘れました。

PLAY 2.0.3を使用している場合は、project/Build.scalaファイルに次の依存関係を追加します。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top