Как интегрировать Scala Squeryl ORB с картой воспроизведения 2.0?
Я пытаюсь использовать Squeryl ORB с фреймворком play 2.0, но при вызове DB.getConnection()
во время инициализации я получаю:
BadPath: параметр path: Invalid path '- не удалось найти источник данных для defaultdb': токен не разрешен в выражении пути: '-' (вы можете дважды указать этот токен, если вы действительно этого хотите)
Конфигурация базы данных выглядит следующим образом (conf/application.conf):
db.default.url="jdbc:postgresql://localhost/mydb?user=postgres&password=postgres"
db.default.driver=org.postgresql.Driver
db.default.jndiName=defaultdb
И инициализация:
object Global extends GlobalSettings {
override def onStart(app: Application) {
SessionFactory.externalTransactionManagementAdapter = Some(() =>
Some(new Session(
DB.getConnection("defaultdb", true),
new PostgreSqlAdapter)))
...
Правильно ли это сделать? Правильно ли использовать значение конфигурации db.default.jndiName
как значение параметра для DB.getConnection()
?
Или это должно быть сделано следующим образом:
SessionFactory.concreteFactory = Some(() =>
Session.create(
java.sql.DriverManager.getConnection("jdbc:postgresql://..."),
new PostgreSqlAdapter))
Это работает, но тогда я не могу использовать объекты запроса squeryl в шаблоне для итерации, и я надеялся, что это возможно с помощью externalTransactionManagementAdapter
.
Обновление:
Я исправил следующее: DB.getConnection("default", true)
и удалил конфигурацию db.default.jndiName
.
С этим я могу получить и использовать соединение, но второй раз getConnection()
вызывается, он бросает SQLException: Timed out waiting for a free available connection.
Обновление 2:
Мне не удалось использовать externalTransactionManagementAdapter
, но concreteFactory
работает хорошо - как описано ниже.
Ответы
Ответ 1
Далее работает для меня:
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();
}