0

akka を使用して Java play2 でジョブを作成しようとしています。

私はいつも同じエラーが発生しますerror: cannot find symbol

そして、system.actorOf()Intellij と Eclipse がエラー メッセージを表示しないことを示しています。

しかし、私はこの方法を見つけることができません。次のインポートを使用しました

import play.libs.Akka;
import akka.actor.ActorSystem;
import akka.actor.ActorRef;
import akka.actor.UntypedActorFactory;
import akka.actor.UntypedActor;
import akka.actor.Props;
import akka.actor.ActorRefFactory;

たぶん、ドキュメントは時代遅れで、system.actorOf()?を削除しました。

public class Global extends GlobalSettings {

    ActorRef tickActor = system.actorOf(new Props().withCreator(new UntypedActorFactory() {
          public UntypedActor create() {
            return new UntypedActor() {
              public void onReceive(Object message) {
                if (message.equals("Log")) {
                  controllers.Application.log();
                } else {
                  unhandled(message);
                }
              }
            };
          }
        }));

    @Override
    public void onStart(Application app) {
        Cancellable cancellable = system.scheduler().schedule(Duration.Zero(), Duration.create(10, TimeUnit.SECONDS),
                tickActor, "Log");

    }
}

編集:

.

ああ... Googleは私を古いドキュメントにリダイレクトしました。今Akka.System()だ..

  • up2date コードで tickActor を作成する方法の例を教えてください。

http://www.playframework.org/documentation/2.0.2/JavaAkka

4

2 に答える 2

1

アクタースケジューラーに関するAkkaのドキュメントをご覧になることを強くお勧めします。

この質問もご覧ください。PlayFramework2.0は、サーバーの起動時にAkkaアクターをスケジュールします。

于 2012-08-24T11:59:09.413 に答える
1

それを解決しました。

ところで、ドキュメントにはいくつかのタイプミスがあります。

import java.util.concurrent.TimeUnit;

import play.*;
import play.mvc.*;
import play.mvc.Http.RequestHeader;

import static play.mvc.Results.*;
import play.libs.Akka;
import akka.actor.ActorSystem;
import akka.actor.ActorRef;
import akka.actor.UntypedActorFactory;
import akka.actor.UntypedActor;
import akka.actor.Props;
import akka.actor.ActorRefFactory;

import akka.util.*;
public class Global extends GlobalSettings {

    ActorRef tickActor;

    @Override
    public void onStart(Application app) {
        Logger.info("D");
        tickActor = Akka.system().actorOf((new Props().withCreator(new UntypedActorFactory() {
              public UntypedActor create() {
                    return new UntypedActor() {
                      public void onReceive(Object message) {
                        if (message.equals("Log")) {
                                 //Do something
                         // controllers.Application.log();
                        } else {
                          unhandled(message);
                        }
                      }
                    };
                  }
                })));
        Akka.system().scheduler().schedule(
                  Duration.create(0, TimeUnit.MILLISECONDS),
                  Duration.create(30, TimeUnit.MINUTES),
                  tickActor, 
                  "Log"
                );

    }



}
于 2012-08-24T12:02:59.983 に答える