相关疑难解决方法(0)

如何将Scala Squeryl ORB与play 2.0框架集成?

我试图在Play 2.0框架中使用Squeryl ORB,但DB.getConnection()在初始化期间调用时我得到:

错误路径:路径参数:无效路径' - 无法找到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
Run Code Online (Sandbox Code Playgroud)

并初始化:

object Global extends GlobalSettings {
  override def onStart(app: Application) {

    SessionFactory.externalTransactionManagementAdapter = Some(() => 
        Some(new Session(
          DB.getConnection("defaultdb", true),
          new PostgreSqlAdapter)))
    ...
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?使用db.default.jndiName配置值作为参数值是否正确DB.getConnection()

或者应该这样做?:

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

这是有效的,但后来我无法在模板中使用squeryl查询对象进行迭代,我希望可以使用它externalTransactionManagementAdapter.

更新:

我更正了以下内容:DB.getConnection("default", true)并删除了db.default.jndiName配置.有了这个,我能够获得并使用一个连接,但第二次getConnection()被调用,它会抛出SQLException: Timed out waiting for a free available connection.

更新2:

我没有设法使用externalTransactionManagementAdapter,但concreteFactory效果很好 - 如下所述.

playframework squeryl

11
推荐指数
1
解决办法
2700
查看次数

将scala文件放在Play Framework 2.0中的哪个位置,以便将其编译为默认包的一部分?

我是Play和Scala的新手,我正在阅读Manning媒体的Play for Scala.我想使用说明来使用Squeryl而不是Anorm.

该书提到我需要在扩展GlobalSettings的类中初始化Squeryl.

import org.squeryl.adapters.H2Adapter
import org.squeryl.{Session, SessionFactory}
import play.api.db.DB import play.api.{Application, GlobalSettings}

object Global extends GlobalSettings {
    SessionFactory.concreteFactory = Some(() =>
    Session.create(DB.getConnection()(app), new H2Adapter) ) 
...
Run Code Online (Sandbox Code Playgroud)

由于这是一个早期版本(MEAP),目前尚不清楚这个代码的放置位置......所以我在游戏网站上进行了一些挖掘后发现了以下扩展GlobalSettings的示例

import play.api._

object Global extends GlobalSettings {

    override def onStart(app: Application) {
        Logger.info("Application has started")
    }  

    override def onStop(app: Application) {
        Logger.info("Application shutdown...")
    }  

}
Run Code Online (Sandbox Code Playgroud)

播放示例提供了更多帮助但我仍然无法遵循指示,其中说明:此对象必须在默认(空)包中定义.

这引出了我的问题:将Scala文件放在Play Framework 2.0中的哪个位置,以便将其作为默认包的一部分进行编译?

谢谢你的帮助...

scala playframework playframework-2.0

8
推荐指数
1
解决办法
1080
查看次数

标签 统计

playframework ×2

playframework-2.0 ×1

scala ×1

squeryl ×1