playframework / play-scala-isolated-slick-example

Example Play Slick Project
https://developer.lightbend.com/start/?group=play
Creative Commons Zero v1.0 Universal
154 stars 34 forks source link

Template change causing reload error #59

Open ghost opened 6 years ago

ghost commented 6 years ago

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?

wsargent commented 6 years ago

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

ghost commented 6 years ago

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.

wsargent commented 6 years ago

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.

jspalad commented 6 years ago

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