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.