play-scala-isolated-slick-example icon indicating copy to clipboard operation
play-scala-isolated-slick-example copied to clipboard

Template change causing reload error

Open ghost opened this issue 7 years ago • 4 comments

Environment:

mac:play-scala-isolated-slick-example tony$ java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
mac:play-scala-isolated-slick-example tony$ 

Issue Description

After firing up the server in dev mode with sbt flyway/flywayMigrate slickCodegen run a subsequent change to the template index.scala.html will cause the following error after attempting to reload the web page:

[error] java.lang.RuntimeException: Failed to run slick-codegen: Database may be already in use: null. Possible solutions: close all other connection(s); use the server mode [90020-196]

How do we ensure the shutdown hook for closing the DB connection is called after a template is recompiled?

ghost avatar Mar 19 '18 21:03 ghost

You call ApplicationLifecycle.addShutdownHook, since recompilation usually means the server is going to be bounced:

https://www.playframework.com/documentation/2.6.x/ScalaDependencyInjection#Stopping/cleaning-up

wsargent avatar Mar 20 '18 01:03 wsargent

I thought it was already done properly here: https://github.com/playframework/play-scala-isolated-slick-example/blob/2.6.x/app/Module.scala#L33

Does it need to be changed? It calls the shutdown hook when I stop the server by hitting enter but it is not calling the hook after a template recompilation / server reload.

ghost avatar Mar 20 '18 12:03 ghost

That certainly looks right. Can you attach a debugger and set a breakpoint? You can use https://www.playframework.com/documentation/2.6.x/PlayConsole#debugging to set up the JDPA port and then attach to local process from IntelliJ IDEA.

wsargent avatar Mar 21 '18 19:03 wsargent

Seems to be an issue with the connection pool not getting restarted/closed on the reload. Work around for this issue is to use connectionPool=disabled for the DatabaseConfig

jspalad avatar Jun 22 '18 17:06 jspalad