1

play 2.1.3 アプリケーションで play-slick を使用しています。
レコードを挿入するコードは次のとおりです

  def insert = DBAction { implicit rs =>
    recordForm.bindFromRequest.fold (
        formWithErrors => {
          Redirect(HomePage).flashing("alert-error" -> "Enter proper values")
        },
        record => {
          Records.insert(record)
          Redirect(HomePage).flashing("alert-success" -> "Record inserted successfully")
        }
    )            
  }

上記のコードは接続をリークしており、アプリケーションは 30 回以上のリクエストの後に以下のエラーをスローします。

java.sql.SQLException: Timed out waiting for a free available connection.
    at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:503) ~[bonecp.jar:0.7.1.RELEASE]
    at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:114) ~[bonecp.jar:0.7.1.RELEASE]
    at scala.slick.session.PlayDatabase.createConnection(PlayDatabase.scala:9) ~[na:na]
    at scala.slick.session.BaseSession.conn$lzycompute(Session.scala:207) ~[slick_2.10-1.0.1.jar:1.0.1]
    at scala.slick.session.BaseSession.conn(Session.scala:207) ~[slick_2.10-1.0.1.jar:1.0.1]
    at scala.slick.session.Session$class.prepareStatement(Session.scala:29) ~[slick_2.10-1.0.1.jar:1.0.1]

同様の問題が報告されていますが、このコードは少し異なります。
何か案が?

4

1 に答える 1

1

これはおそらくhttps://github.com/freekh/play-slick/issues/81に記載されているバグ「2)」のインスタンスです。これは play-slick master で修正されており、次のリリースで修正されます。play-slick のバグのあるコードはここで説明されていますPlay slick and Async - is a race condition? . このバグは、例外がスローされる代わりに、接続がリークされる Slick のフォローアップ バグを引き起こします: https://github.com/slick/slick/pull/107

于 2013-09-05T11:32:29.267 に答える