Seb*_*ber 3 akka playframework playframework-2.0
我试图在app/Global.scala中创建一个Global对象来运行Akka调度程序,就像其他一些SO帖子所说的那样.
我的代码几乎是Global对象教程的复制/粘贴,但在启动时我收到以下错误:
Oops, cannot start the server.
PlayException: Cannot init the Global object [Global cannot be cast to play.GlobalSettings]
at play.api.PlayException$.apply(Exceptions.scala:122)
at play.api.Application$$anonfun$3.apply(Application.scala:71)
at play.api.Application$$anonfun$3.apply(Application.scala:67)
at play.utils.Threads$.withContextClassLoader(Threads.scala:17)
at play.api.Application.<init>(Application.scala:66)
at play.core.StaticApplication.<init>(ApplicationProvider.scala:49)
at play.core.server.NettyServer$.createServer(NettyServer.scala:132)
at play.core.server.NettyServer$$anonfun$main$5.apply(NettyServer.scala:153)
at play.core.server.NettyServer$$anonfun$main$5.apply(NettyServer.scala:152)
at scala.Option.map(Option.scala:133)
at play.core.server.NettyServer$.main(NettyServer.scala:152)
at play.core.server.NettyServer.main(NettyServer.scala)
Caused by: java.lang.ClassCastException: Global cannot be cast to play.GlobalSettings
at play.api.Application.liftedTree1$1(Application.scala:44)
at play.api.Application.play$api$Application$$javaGlobal(Application.scala:43)
at play.api.Application$$anonfun$3.apply(Application.scala:68)
... 10 more
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
import play.api._
import play.api.Play.current
import akka.util.duration._
import play.api.libs.concurrent._
/**
* @author Sebastien Lorber (<i>lorber.sebastien@gmail.com</i>)
* Date: 21/11/12 - Time: 21:55
*/
class Global extends GlobalSettings {
override def onStart(app: Application) {
Logger.info("Application has started")
startElasticSearchIndexationScheduling
}
override def onStop(app: Application) {
Logger.info("Application shutdown...")
}
def startElasticSearchIndexationScheduling = {
Akka.system.scheduler.schedule(5 seconds, 15 seconds) {
Logger.info("Doing ElasticSearch reindexation (TODO: just testing scheduler")
}
}
}
Run Code Online (Sandbox Code Playgroud)
没有像你看到的那样幻想......
顺便说一下,我不明白为什么经常有2个不同的包用于同名的对象play.GlobalSettings/ play.api.GlobalSettings等等.一个对象似乎是用于Java的,另一个用于Scala,但是包名称使得这个不是很明显.我正在使用Scala和一个导入"play.api.GlobalSettings"的Scala全局对象,所以为什么它需要尝试转换为play.GlobalSettings更加面向Java的(我尝试扩展这个并且它也不起作用,并且它是不是教程所说的)
谢谢
nde*_*rge 10
您必须使用对象,而不是使用Scala Global对象的类:
...
object Global extends GlobalSettings {
...
}
Run Code Online (Sandbox Code Playgroud)
关于play.*反对play.api.*,可以肯定的是,产生差异并不明显.让我们说Play的核心是Scala(api),而Java部分只是它的一个包装器.
| 归档时间: |
|
| 查看次数: |
3218 次 |
| 最近记录: |