Как интегрировать Scala Squeryl ORB с платформой play 2.0? - PullRequest
11 голосов
/ 14 марта 2012

Я пытаюсь использовать Squeryl ORB с платформой play 2.0, но при вызове DB.getConnection() во время инициализации я получаю:

BadPath: параметр пути: Неверный путь '- не удалось найти источник данных для 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))

Это работает, но тогда я не могу использовать объекты запроса в шаблоне для итерации, что, как я надеялся, будетвозможно с externalTransactionManagementAdapter.

Обновление:

Я исправил следующее: DB.getConnection("default", true) и удалил конфигурацию db.default.jndiName.При этом я могу получить и использовать соединение, но при втором вызове getConnection() вызывается SQLException: Timed out waiting for a free available connection.

Обновление 2:

Мне не удалось использовать externalTransactionManagementAdapter, но concreteFactory работает хорошо - как описано ниже.

1 Ответ

8 голосов
/ 14 марта 2012

Следующие работы для меня:

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();

}
...