2

我有一个 Play 2.1.0 (Scala) 框架应用程序,我正在尝试使用 Salat 将我的案例类对象转换为 MongoDBObjects。当我启动游戏控制台时,实例化我的一个案例类,导入 salat._ 和 salat.global._ 我能够从我的案例类转换为 MongoDBObject。

当我在游戏中处于“运行”模式时,我调用一个调用 Actors 的页面,该 Actors 又执行相同的代码以从案例类转换为 MongoDBObject,我收到错误(data.Field 是我的案例类的全名) :

com.novus.salat.util.GraterGlitch:

  GRATER GLITCH - unable to find or instantiate a grater using supplied path

姓名

  REASON: Very strange!  Path='data.Field' from pickled ScalaSig causes Clas

sNotFoundException

  Context: 'global'
  Path from pickled Scala sig: 'data.Field'

为了回答这里的另一个问题,我将 scala-compiler 添加到我的项目的依赖项中,但这并没有帮助。

令我感到困惑的是,这在控制台手动实例化东西时工作正常,但在运行完整播放应用程序时失败。

在这里的任何帮助将不胜感激。

编辑:将 scala 编译器添加到依赖项并使用“播放开始”工作正常。如果我使用“play run”,它会因上述错误而惨遭失败。任何关于为什么的见解都会有所帮助。

4

1 回答 1

3

根据https://github.com/playframework/Play20/issues/822,这是由动态类加载器引起的。

就我而言,这段代码解决了这个问题。

implicit val ctx = new Context {
  val name = "Custom_Classloader"
}
ctx.registerClassLoader(Play.classloader(Play.current))

另请参阅 https://github.com/novus/salat/wiki/CustomContext

于 2013-07-09T07:33:08.783 回答