2013-12-04 1 views
-1

я работаю над этим вопросом довольно долгого время, и теперь я не могу найти решение ...Play 2.1 Scala SQLException Время ожидание подключения истекло время ожидания свободного доступного соединения

веба-приложение, построенное с каркасом игры 2.2. 1, используя h2 db (для dev) и простой пакет модели. Я пытаюсь реализовать конечную точку REST JSON, и код работает ... но только один раз на экземпляр сервера.

def createOtherModel() = Action(parse.json) { 
    request => 
    request.body \ "name" match { 
     case _: JsUndefined => BadRequest(Json.obj("error" -> true, 
     "message" -> "Could not match name =(")).as("application/json") 
     case name: JsValue => 
      request.body \ "value" match { 
      case _: JsUndefined => BadRequest(Json.obj("error" -> true, 
       "message" -> "Could not match value =(")).as("application/json") 
      case value: JsValue => 
       // this breaks the secod time 
       val session = ThinkingSession.dummy 
       val json = Json.obj(
        "content" -> value, 
        "thinkingSession" -> session.id, 
       ) 
      ) 
       Ok(Json.obj("content" -> json)).as("application/json") 
      } 
     } else { 
      BadRequest(Json.obj("error" -> true, 
      "message" -> "Name was not content =(")).as("application/json") 
     } 
    } 
} 

так что в основном я читал JSON, эхо значение «значение», создавал модель obj и отправлял ее id.

функция ThinkingSession.dummy делает это:

def all(): List[ThinkingSession] = { 

// Tried explicitly closing connection, no difference 
//val conn = DB.getConnection() 
//try { 
// DB.withConnection { implicit conn => 
// SQL("select * from thinking_session").as(ThinkingSession.DBParser *) 
// } 
//} finally { 
// conn.close() 
//} 
    DB.withConnection { implicit conn => 
    SQL("select * from thinking_session").as(ThinkingSession.DBParser *) 
    } 
} 

def dummy: ThinkingSession = { 
    (all() head) 
} 

Так что это должно сделать SELECT * FROM thinking_session, создать список модель OBJ из результата и вернуть первый из списка.

Это прекрасно работает в первый раз после запуска сервера, но второй раз я получаю

play.api.Application$$anon$1: Execution exception[[SQLException: Timed out waiting for a free available connection.]] 
    at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10.jar:2.2.1] 
    at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10.jar:2.2.1] 
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1] 
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1] 
    at scala.Option.map(Option.scala:145) [scala-library.jar:na] 
    at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2.applyOrElse(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1] 
    Caused by: java.sql.SQLException: Timed out waiting for a free available connection. 
    at com.jolbox.bonecp.DefaultConnectionStrategy.getConnectionInternal(DefaultConnectionStrategy.java:88) ~[bonecp.jar:na] 
    at com.jolbox.bonecp.AbstractConnectionStrategy.getConnection(AbstractConnectionStrategy.java:90) ~[bonecp.jar:na] 
    at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:553) ~[bonecp.jar:na] 
    at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:131) ~[bonecp.jar:na] 
    at play.api.db.DBApi$class.getConnection(DB.scala:67) ~[play-jdbc_2.10.jar:2.2.1] 
    at play.api.db.BoneCPApi.getConnection(DB.scala:276) ~[play-jdbc_2.10.jar:2.2.1] 

Мой application.conf (дб раздел)

db.default.driver=org.h2.Driver 
db.default.url="jdbc:h2:file:database/[my_db]" 
db.default.logStatements=true 
db.default.idleConnectionTestPeriod=5 minutes 
db.default.connectionTestStatement="SELECT 1" 
db.default.maxConnectionAge=0 
db.default.connectionTimeout=10000 

Первоначально единственным установить в моей конфигурации было соединение и произошла ошибка. Я добавил все остальное, прочитав эту проблему в Интернете.

Интересно, что, когда я использую h2 в памяти db, он работает один раз после запуска сервера и после этого он терпит неудачу. когда я использую файловую систему h2, она работает только один раз, независимо от экземпляров сервера.

Может ли кто-нибудь дать мне некоторое представление по этому вопросу? Обнаружил некоторые вещи по проблеме bonecp и попытался обновление до 0.8.0-rc1, но ничего не изменилось ... Я в растерянности = (

ответ

-2

оказывается ошибка была совсем где-то еще ... это было хорошее переполнение стека ... не видели одного за долгое время. Я попытался опросить свой вопрос, но это невозможно.^

+0

Hi NemoOudeis. можете ли вы рассказать мне, как вы решили проблему. Даже я столкнулся с той же проблемой – Incpetor

+0

, разместив комментарий в качестве ответа и приняв его ??? – vumaasha

0

Try установить maxConnectionAge и тайм-аут простоя

+0

попытался с maxConnectionAge = 0 и 5 секунд и с idleTimeout = 0 и больше, но он не меняет вещь = ( – NemoOudeis

Смежные вопросы