11

Play 2.0 フレームワークで Squeryl ORB を使用しようとしていますが、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))

これは機能しますが、繰り返しのためにテンプレートで squeryl クエリ オブジェクトを使用することができませんexternalTransactionManagementAdapter

アップデート:

次のように修正し、構成DB.getConnection("default", true)を削除しましたdb.default.jndiName。これで接続を取得して使用できますが、2回目getConnection()に呼び出されるとスローされますSQLException: Timed out waiting for a free available connection.

更新 2:

を使用することはできませんでしたがexternalTransactionManagementAdapterconcreteFactory以下で説明するようにうまく機能します。

4

1 に答える 1

8

次は私のために働く:

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

}
于 2012-03-14T16:48:55.507 に答える