我正在尝试在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
配置。
这样我可以获取并使用连接,但第二次调用 getConnection()
时,会抛出 SQLException: Timed out waiting for a free available connection.
更新2:
我没有成功使用externalTransactionManagementAdapter
,但concreteFactory
效果很好——如下所述。