I have an interesting issue which I have not been able to resolve. I am using Play! 2.0.4 and using the integrated BoneCP connection pool to get the DB connections. However, for some reason, BoneCP keeps returning closed connections.
Database Server: Amazon RDS MySQL 5, default timeout settings (which should be 8 hours...)
My Play Datasource configuration looks as follows:
db.default.driver=com.mysql.jdbc.Driver db.default.url="jdbc:mysql://{server}/{schema}?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8" db.default.partitionCount=4 db.default.idleConnectionTestPeriod=2 minutes
I had assumed setting the idleConnectionTestPeriod to 2 minutes surely would have prevented BoneCP from returning closed connections, but it hasn't.
Every so often, I get the following stack trace in my logs:
Exception in thread "pool-6-thread-25" java.sql.SQLException: Connection is closed! at com.jolbox.bonecp.ConnectionHandle.checkClosed(ConnectionHandle.java:350) at com.jolbox.bonecp.ConnectionHandle.setReadOnly(ConnectionHandle.java:1089) at play.api.db.BoneCPApi$$anon$1.onCheckOut(DB.scala:328) at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:514) at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:114) at play.api.db.DBApi$class.getConnection(DB.scala:64) at play.api.db.BoneCPApi.getConnection(DB.scala:273) at play.api.db.DB$$anonfun$getConnection$1.apply(DB.scala:129) at play.api.db.DB$$anonfun$getConnection$1.apply(DB.scala:129) at scala.Option.map(Option.scala:133) at play.api.db.DB$.getConnection(DB.scala:129) at play.api.db.DB.getConnection(DB.scala) at play.db.DB.getConnection(DB.java:50) at play.db.DB.getConnection(DB.java:43) at play.db.DB.getConnection(DB.java:29) at com.edatasource.inboxtracker.tasks.TrackSiteEventActionTask.run(TrackSiteEventActionTask.java:23) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)
[many more lines...]
at play.core.ActionInvoker$$anonfun$receive$1$$anonfun$6.apply(Invoker.scala:126) ~[play.play_2.9.1-play_2.9.1-$
at play.utils.Threads$.withContextClassLoader(Threads.scala:17) ~[play.play_2.9.1-play_2.9.1-2.0.4.jar:2.0.4]
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:125) [play.play_2.9.1-play_2.9.1-2.0.4.jar:2.$
... 11 common frames omitted
Caused by: java.sql.SQLException: Timed out waiting for a free available connection.
at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:503) ~[com.jolbox.bonecp-bonecp-0.7.1.RELEASE.jar:0.7.1.R$
at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:114) ~[com.jolbox.bonecp-bonecp-0.7.1$
at play.db.ebean.EbeanPlugin$WrappingDatasource.getConnection(EbeanPlugin.java:146) ~[play.play_2.9.1-play_2.9.$
at com.avaje.ebeaninternal.server.transaction.TransactionManager.createQueryTransaction(TransactionManager.java$
... 25 common frames omitted
--
--