tutorial play framework for development scala playframework-2.0 scalaquery
Play2.1RC1

play - scala for web development



Play framework+SLICK(Scalaquery) tutorial (3)

Compartí este enlace como tutorial http://www.jroller.com/ouertani/entry/getting_started_with_play_2

¿Alguien sabe de un buen tutorial o un proyecto de muestra (github) sobre el uso de Play framework con SLICK (ScalaQuery)? Estoy luchando para hacer que trabajen juntos.

Estoy recibiendo este error:

[info] play - Application started (Dev) [error] application - ! @6b13oi41c - Internal server error, for request [GET /listBooks] -> play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[NoClassDefFoundError: Could not initialize class scala.slick.ast.opt.Relational$]] at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:134) [play_2.9.1-2.0.2.jar:2.0.2] at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:115) [play_2.9.1-2.0.2.jar:2.0.2] at akka.actor.Actor$class.apply(Actor.scala:318) [akka-actor-2.0.2.jar:2.0.2] at play.core.ActionInvoker.apply(Invoker.scala:113) [play_2.9.1-2.0.2.jar:2.0.2] at akka.actor.ActorCell.invoke(ActorCell.scala:626) [akka-actor-2.0.2.jar:2.0.2] at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:197) [akka-actor-2.0.2.jar:2.0.2] Caused by: java.lang.NoClassDefFoundError: Could not initialize class scala.slick.ast.opt.Relational$ at scala.slick.driver.BasicProfile$class.processAST(BasicProfile.scala:18) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2] at scala.slick.driver.PostgresDriver$.processAST(PostgresDriver.scala:69) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2] at scala.slick.driver.BasicProfile$class.createQueryBuilder(BasicProfile.scala:22) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2] at scala.slick.driver.PostgresDriver$.createQueryBuilder(PostgresDriver.scala:69) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2] at scala.slick.driver.BasicProfile$class.buildSelectStatement(BasicProfile.scala:23) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2] at scala.slick.driver.PostgresDriver$.buildSelectStatement(PostgresDriver.scala:69) ~[slick_2.10.0-M4-0.10.0-M2.jar:0.10.0-M2] [error] application -

Aquí está mi modelo de libro:

package models import play.api.db._ import play.api.Play.current import scala.slick.driver.PostgresDriver.simple._ import scala.slick.ql.{MappedTypeMapper} import scala.slick.session.{Session, Database} case class Book(name: String, filename: String) object Book extends Table[(Long, String, String)]("book") { lazy val database = Database.forDataSource(DB.getDataSource()) def id = column[Long]("id", O PrimaryKey, O AutoInc) def name = column[String]("name", O NotNull) def filename = column[String]("filename", O NotNull) def * = id ~ name ~ filename def findAll() : Seq[Book] = database.withSession { implicit db:Session => (for(t <- this) yield t.name ~ t.filename).list.map(attrs => Book(attrs._1, attrs._2)) } def create(book: Book): Unit = database.withSession { implicit db:Session => this.name ~ this.filename insert(book.name, book.filename) } }

EDITAR:
Este es mi Build.scala

import sbt._ import Keys._ import PlayProject._ object ApplicationBuild extends Build { val appName = "PlayWithScala" val appVersion = "1.0-SNAPSHOT" val appDependencies = Seq( // Add your project dependencies here, "postgresql" % "postgresql" % "9.1-902.jdbc4", "com.typesafe" % "slick_2.10.0-M4" % "0.10.0-M2" ) val main = PlayProject(appName, appVersion, appDependencies, mainLang = SCALA).settings( // Add your own project settings here ) }


Usando Play 2.1, con la última versión de Slick (1.0.1-RC1), usarías:

val appDependencies = Seq( "com.typesafe.slick" %% "slick" % "1.0.1-RC1", ... }


Editar Ahora que Play2.1 ha entrado en su proceso RC, podemos usar Slick. Esto se debe a que Play2.1 está utilizando Scala2.10 (RC también) bajo el mar y porque Slick será la biblioteca de acceso a DB predeterminada en la pila de Typesafe.

Para recordar, Slick ahora puede acceder a RDBMS, y también apuntará pronto a MongoDB. Está utilizando una DSL interna (^^) para consultar los backends. Este DSL es administrado por Macros, por eso se requiere Scala 2.10.

Sin embargo, tenga en cuenta que el sistema de macros está en estado experimental (incluso cuando se lanzará Scala2.10). No sé todavía las posibles advertencias de tal estado en la Liberación Slick en un futuro próximo.

Para disfrutar de este RC, vaya a Play2.1RC1 y navegue por el documento ... hay muchos cambios, como la API de Json

Hmmmm No estoy seguro de que Slick funcione fuera de la caja con Play tan fácil.

Debido a que PLay 2.0 se basa en Scala 2.9.x, donde slick requiere 2.10 (para Macro).

Entonces, al principio hay una discrepancia entre los deps que estás declarando ( slick_2.10.0-M4 está diciendo que estoy usando Scala 2.10.0-M4) y la versión de Scala que se usará.

Por cierto, de acuerdo con este sitio de ejemplo (para Slick), sus representantes de SBT parecen estar bien. Pero puede surgir el problema de que el controlador requiera otros deps (AST probablemente) y deje que SBT descubra la versión correcta utilizando la versión actual de scala que está utilizando (esto se hace declarando la dependencia sin la versión de scala en el "nombre de artículo") = > En este caso, no se encontrará el AST porque no existe para pre-2.10.

Lo que se podría intentar es definir otra versión de scala para todo el proyecto ...

Mi 2c