playframework squeryl

playframework - ¿Cómo integrar el Scala Squeryl ORB con el framework play 2.0?



(1)

El siguiente funciona para mí:

import play.db.DB import play.api.Application import play.api.GlobalSettings import org.squeryl._ import org.squeryl.adapters._

....

object Global extends GlobalSettings { override def onStart(app:Application):Unit = { SessionFactory.concreteFactory = Some( () => Session.create(DB.getDataSource().getConnection(), dbAdapter) ); } override def onStop(app:Application):Unit = { } val dbAdapter = new PostgreSqlAdapter(); }

Estoy intentando usar Squeryl ORB con el framework play 2.0, pero cuando llamo a DB.getConnection() durante la inicialización obtengo:

BadPath: parámetro de ruta: Ruta inválida ''- no se pudo encontrar fuente de datos para defaultdb'': Token no permitido en la expresión de ruta: ''-'' (puede hacer una cita doble de este token si realmente lo quiere aquí)

La configuración de la base de datos se ve así (conf / application.conf):

db.default.url="jdbc:postgresql://localhost/mydb?user=postgres&password=postgres" db.default.driver=org.postgresql.Driver db.default.jndiName=defaultdb

Y la inicialización:

object Global extends GlobalSettings { override def onStart(app: Application) { SessionFactory.externalTransactionManagementAdapter = Some(() => Some(new Session( DB.getConnection("defaultdb", true), new PostgreSqlAdapter))) ...

¿Esta es la manera correcta de hacerlo? ¿Es correcto usar el valor de configuración de db.default.jndiName como valor de parámetro para DB.getConnection() ?

¿O debería hacerse así ?:

SessionFactory.concreteFactory = Some(() => Session.create( java.sql.DriverManager.getConnection("jdbc:postgresql://..."), new PostgreSqlAdapter))

Esto funciona, pero luego no puedo usar los objetos de consulta squeryl en la plantilla para la iteración, que esperaba que fuera posible con externalTransactionManagementAdapter .

Actualizar:

DB.getConnection("default", true) siguiente: DB.getConnection("default", true) y db.default.jndiName configuración de db.default.jndiName . Con esto puedo obtener y usar una conexión, pero la segunda vez que se llama a getConnection() , lanza SQLException: Timed out waiting for a free available connection.

Actualización 2:

No he podido utilizar externalTransactionManagementAdapter , pero concreteFactory funciona bien, como se describe a continuación.