From ab2789dd08ab65ecc4a064f0967d994dbf53ad34 Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Fri, 25 Mar 2016 16:22:11 +1300 Subject: [PATCH] #621 - EbeanServer.shutdown(true, false) followed by EbeanServerFactory create() when using the same ServerConfig give SQLException: Trying to access the Connection Pool when it is shutting down --- .../avaje/ebeaninternal/server/core/DefaultServer.java | 8 ++++++-- .../ebean/EbeanServerFactory_ServerConfigStart_Test.java | 8 +++++++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java index 92b81664a..7f9605154 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java @@ -398,9 +398,9 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { */ private void shutdownInternal(boolean shutdownDataSource, boolean deregisterDriver) { - logger.debug("Shutting down EbeanServer " + getName()); + logger.debug("Shutting down EbeanServer {}", serverName); if (shutdown) { - // Already shutdown + // already shutdown return; } shutdownPlugins(); @@ -411,6 +411,10 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { // shutdown DataSource (if its an Ebean one) transactionManager.shutdown(shutdownDataSource, deregisterDriver); shutdown = true; + if (shutdownDataSource) { + // deregister the DataSource in case ServerConfig is re-used + serverConfig.setDataSource(null); + } } private void shutdownPlugins() { diff --git a/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java b/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java index b7cc89e42..119609cef 100644 --- a/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java +++ b/src/test/java/com/avaje/ebean/EbeanServerFactory_ServerConfigStart_Test.java @@ -10,7 +10,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class EbeanServerFactory_ServerConfigStart_Test { @Test - public void test() { + public void test() throws InterruptedException { ServerConfig config = new ServerConfig(); config.setName("h2"); @@ -34,6 +34,12 @@ public class EbeanServerFactory_ServerConfigStart_Test { assertThat(OnStartupViaClass.calledWithConfig).isSameAs(config); assertThat(ebeanServer).isNotNull(); + + // test server shutdown and restart using the same ServerConfig + ebeanServer.shutdown(true, false); + + EbeanServer restartedServer = EbeanServerFactory.create(config); + restartedServer.shutdown(true, false); } public static class OnStartup implements ServerConfigStartup {