From c79231c8465b4eda8fac6907065d00616eb8172f Mon Sep 17 00:00:00 2001 From: Robin Bygrave Date: Tue, 25 Aug 2015 11:52:58 +1200 Subject: [PATCH] #394 - ENH: Add plugin API SpiServer - add shutdown() method to SpiServerPlugin. --- .../com/avaje/ebean/plugin/SpiServerPlugin.java | 8 ++++++++ .../ebeaninternal/server/core/DefaultServer.java | 14 +++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/avaje/ebean/plugin/SpiServerPlugin.java b/src/main/java/com/avaje/ebean/plugin/SpiServerPlugin.java index a622f89d9..8c874f1c6 100644 --- a/src/main/java/com/avaje/ebean/plugin/SpiServerPlugin.java +++ b/src/main/java/com/avaje/ebean/plugin/SpiServerPlugin.java @@ -14,4 +14,12 @@ public interface SpiServerPlugin { * Called just before the server starts indicating if it is coming up in online mode. */ void online(boolean online); + + /** + * Called when the server is shutting down. + *

+ * Plugins should shutdown any resources they are using cleanly. + *

+ */ + void shutdown(); } 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 d081ec385..e38a555de 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java @@ -438,6 +438,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { // Already shutdown return; } + shutdownPlugins(); try { if (mbeanServer != null) { mbeanServer.unregisterMBean(new ObjectName(mbeanName + ",key=AutoFetch")); @@ -454,7 +455,18 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { transactionManager.shutdown(shutdownDataSource, deregisterDriver); shutdown = true; } - + + private void shutdownPlugins() { + + for (SpiServerPlugin plugin : serverPlugins) { + try { + plugin.shutdown(); + } catch (Throwable e) { + logger.error("Error when shutting down plugin", e); + } + } + } + /** * Return the server name. */