我试图在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.
我没有设法使用externalTransactionManagementAdapter,但concreteFactory效果很好 - 如下所述.
我是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中的哪个位置,以便将其作为默认包的一部分进行编译?
谢谢你的帮助...