Squeryl和Play的问题! scala中的框架
发布时间:2020-12-16 08:46:56 所属栏目:安全 来源:网络整理
导读:在使用Squeryl和Play时,我有一个奇怪的问题. 正常使用和其他一切工作完全正常.但是,如果我在同一个请求中使用多个事务,则会出错. 这就是我设置Squeryl的方式: def initDB() { import org.squeryl._ import play.db.DB Class.forName("com.mysql.jdbc.Driver
在使用Squeryl和Play时,我有一个奇怪的问题.
正常使用和其他一切工作完全正常.但是,如果我在同一个请求中使用多个事务,则会出错. 这就是我设置Squeryl的方式: def initDB() { import org.squeryl._ import play.db.DB Class.forName("com.mysql.jdbc.Driver") SessionFactory.concreteFactory = Some(() => Session.create( DB.getConnection,new MySQLAdapter) ) } 示例事务,也是下面的堆栈跟踪中引用的事务: transaction { import models.Game Game.planets.insert(planetList) Game.moons.insert(moonList) } 堆栈跟踪: Internal Server Error (500) for request GET /generate-galaxy Execution exception (In /app/Generator.scala around line 330) SQLException occured : You can't operate on a closed Connection!!! play.exceptions.JavaExecutionException: You can't operate on a closed Connection!!! at play.mvc.ActionInvoker.invoke(ActionInvoker.java:228) at Invocation.HTTP Request(Play!) Caused by: java.sql.SQLException: You can't operate on a closed Connection!!! at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65) at org.squeryl.dsl.QueryDsl$class._executeTransactionWithin(QueryDsl.scala:95) at org.squeryl.dsl.QueryDsl$class.transaction(QueryDsl.scala:64) at org.squeryl.PrimitiveTypeMode$.transaction(PrimitiveTypeMode.scala:40) at generator.Generator$$anonfun$generatePlanets$2.apply(Generator.scala:330) at generator.Generator$$anonfun$generatePlanets$2.apply(Generator.scala:55) at generator.Generator$.generatePlanets(Generator.scala:55) at generator.Generator$.generateGalaxy(Generator.scala:36) at controllers.MainRouter$.generateGalaxy(MainRouter.scala:29) at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:543) at play.mvc.ActionInvoker.invoke(ActionInvoker.java:499) at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:493) at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:470) at play.mvc.ActionInvoker.invoke(ActionInvoker.java:158) ... 1 more Caused by: java.lang.NullPointerException ... 14 more 我知道问题不在我的查询中,因为它们在使用scalatra作为Web框架时工作正常.我可以把所有东西放到一个事务块中,但这不是很优雅,我也不确定它是否适用于这种情况 – planetList列表有大约300万个成员,这导致scala在我分裂之前耗尽内存数据库插入到50k元素的较小块中. 解决方法
你能否将你的问题重新发布到
Squeryl mailing list?我不熟悉Play!但我知道其他一些用户和通讯员都是.如果您可以将示例项目发布到GitHub并包含一个有用的链接.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |