【发布时间】:2016-12-10 13:59:46
【问题描述】:
我正在尝试在 Java Play Framework (2.5.10) 中创建一个演员来运行定期任务。但是,当我的应用程序运行时,我收到错误 No implementation for akka.actor.ActorRef was bound(本文后面提供了详细的错误消息)。我确信这个错误是非常基本的,但我对整个演员这件事还是新手,我很难弄清楚。
这是绑定调度程序类和参与者的类(根级Module.java):
public class Module extends AbstractModule implements AkkaGuiceSupport {
@Override
public void configure() {
// Use the system clock as the default implementation of Clock
bind(Clock.class).toInstance(Clock.systemDefaultZone());
// Ask Guice to create an instance of ApplicationTimer when the
// application starts.
bind(ApplicationTimer.class).asEagerSingleton();
// Set AtomicCounter as the implementation for Counter.
bind(Counter.class).to(AtomicCounter.class);
// bind the ECWID data importer
bind(ImportScheduler.class).asEagerSingleton();
bindActor(UserImportActor.class, UserImportActor.ACTOR_NAME);
}
}
调度器类:
@Singleton
public class ImportScheduler {
@Inject
public ImportScheduler(final ActorSystem actorSystem, final ActorRef UserImportActor) {
actorSystem.scheduler().schedule(
Duration.create(1, TimeUnit.SECONDS),
Duration.create(1, TimeUnit.SECONDS),
UserImportActor,
0,
actorSystem.dispatcher(),
UserImportActor
);
}
}
最后是actor类:
public class UserImportActor extends UntypedActor {
public static final String ACTOR_NAME = "user_import_actor";
@Override
public void onReceive(Object message){
Logger.info("The user import actor was called!");
}
}
当应用程序运行时,这是我看到的错误(完整的错误太长 - 我认为前几行就足够了):
! @72bagdfd4 - Internal server error, for (GET) [/] ->
play.api.UnexpectedException: Unexpected exception[CreationException: Unable to create injector, see the following errors:
1) No implementation for akka.actor.ActorRef was bound.
while locating akka.actor.ActorRef
for parameter 1 at services.ecwid.db.ImportScheduler.<init>(ImportScheduler.java:12)
at Module.configure(Module.java:34) (via modules: com.google.inject.util.Modules$OverrideModule -> Module)
知道我错过了什么吗?
【问题讨论】:
标签: java playframework akka