I'm trying to get familiar with Slick 3.0 and Futures (using Scala 2.11.6). I use simple code based on Slick's Multi-DB Cake Pattern example. Why does the following code terminate with an exception and how to fix it?
import scala.concurrent.Await import scala.concurrent.duration._ import slick.jdbc.JdbcBackend.Database import scala.concurrent.ExecutionContext.Implicits.global class Dispatcher(db: Database, dal: DAL) { import dal.driver.api._ def init() = { db.run(dal.create) try db.run(dal.stuffTable += Stuff(23,"hi")) finally db.close val x = { try db.run(dal.stuffTable.filter(_.serial === 23).result) finally db.close } // This crashes: val result = Await.result(x, 2 seconds) } } Execution fails with:
java.util.concurrent.RejectedExecutionException: Task slick.backend.DatabaseComponent$DatabaseDef$$anon$2@5c73f637 rejected from java.util.concurrent.ThreadPoolExecutor@4129c44c[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 2] at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2048) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:821) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1372) at scala.concurrent.impl.ExecutionContextImpl$$anon$1.execute(ExecutionContextImpl.scala:136) at slick.backend.DatabaseComponent$DatabaseDef$class.runSynchronousDatabaseAction(DatabaseComponent.scala:224) at slick.jdbc.JdbcBackend$DatabaseDef.runSynchronousDatabaseAction(JdbcBackend.scala:38) at slick.backend.DatabaseComponent$DatabaseDef$class.runInContext(DatabaseComponent.scala:201) at slick.jdbc.JdbcBackend$DatabaseDef.runInContext(JdbcBackend.scala:38) at slick.backend.DatabaseComponent$DatabaseDef$class.runInternal(DatabaseComponent.scala:75) at slick.jdbc.JdbcBackend$DatabaseDef.runInternal(JdbcBackend.scala:38) at slick.backend.DatabaseComponent$DatabaseDef$class.run(DatabaseComponent.scala:72) at slick.jdbc.JdbcBackend$DatabaseDef.run(JdbcBackend.scala:38) at Dispatcher.init(Dispatcher.scala:15) at SlickDemo$.main(SlickDemo.scala:16) at SlickDemo.main(SlickDemo.scala) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606)