From 3471f6d2066dfe1fd5d530e7f6e2b2ff2a64a5ff Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Thu, 5 Oct 2017 00:57:40 +1300 Subject: [PATCH] Refactor EbeanServerFactory internals - use SpiContainerShutdown interface for container shutdown mechanism --- src/main/java/io/ebean/EbeanServerFactory.java | 7 +++++-- .../io/ebean/service/SpiContainerShutdown.java | 12 ++++++++++++ .../server/lib/DContainerShutdown.java | 14 ++++++++++++++ .../services/io.ebean.service.SpiContainerShutdown | 1 + src/test/resources/extra-ddl.xml | 4 ++-- 5 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 src/main/java/io/ebean/service/SpiContainerShutdown.java create mode 100644 src/main/java/io/ebeaninternal/server/lib/DContainerShutdown.java create mode 100644 src/main/resources/META-INF/services/io.ebean.service.SpiContainerShutdown diff --git a/src/main/java/io/ebean/EbeanServerFactory.java b/src/main/java/io/ebean/EbeanServerFactory.java index a915b26f3..76bfc2dac 100644 --- a/src/main/java/io/ebean/EbeanServerFactory.java +++ b/src/main/java/io/ebean/EbeanServerFactory.java @@ -3,11 +3,12 @@ package io.ebean; import io.ebean.common.SpiContainer; import io.ebean.config.ContainerConfig; import io.ebean.config.ServerConfig; -import io.ebeaninternal.server.lib.ShutdownManager; +import io.ebean.service.SpiContainerShutdown; import javax.persistence.PersistenceException; import java.lang.reflect.Constructor; import java.util.Properties; +import java.util.ServiceLoader; /** * Creates EbeanServer instances. @@ -99,7 +100,9 @@ public class EbeanServerFactory { *

*/ public static synchronized void shutdown() { - ShutdownManager.shutdown(); + for (SpiContainerShutdown shutdown : ServiceLoader.load(SpiContainerShutdown.class)) { + shutdown.shutdown(); + } } diff --git a/src/main/java/io/ebean/service/SpiContainerShutdown.java b/src/main/java/io/ebean/service/SpiContainerShutdown.java new file mode 100644 index 000000000..1be722077 --- /dev/null +++ b/src/main/java/io/ebean/service/SpiContainerShutdown.java @@ -0,0 +1,12 @@ +package io.ebean.service; + +/** + * Provides shutdown of the entire container. + */ +public interface SpiContainerShutdown { + + /** + * Shutdown the entire container - all EbeanServer instances. + */ + void shutdown(); +} diff --git a/src/main/java/io/ebeaninternal/server/lib/DContainerShutdown.java b/src/main/java/io/ebeaninternal/server/lib/DContainerShutdown.java new file mode 100644 index 000000000..0b83469c9 --- /dev/null +++ b/src/main/java/io/ebeaninternal/server/lib/DContainerShutdown.java @@ -0,0 +1,14 @@ +package io.ebeaninternal.server.lib; + +import io.ebean.service.SpiContainerShutdown; + +/** + * Default container shutdown implementation. + */ +public class DContainerShutdown implements SpiContainerShutdown { + + @Override + public void shutdown() { + ShutdownManager.shutdown(); + } +} diff --git a/src/main/resources/META-INF/services/io.ebean.service.SpiContainerShutdown b/src/main/resources/META-INF/services/io.ebean.service.SpiContainerShutdown new file mode 100644 index 000000000..ffcbd2b22 --- /dev/null +++ b/src/main/resources/META-INF/services/io.ebean.service.SpiContainerShutdown @@ -0,0 +1 @@ +io.ebeaninternal.server.lib.DContainerShutdown diff --git a/src/test/resources/extra-ddl.xml b/src/test/resources/extra-ddl.xml index 555aacecc..d90265d34 100644 --- a/src/test/resources/extra-ddl.xml +++ b/src/test/resources/extra-ddl.xml @@ -18,7 +18,7 @@ from o_order_detail d group by d.order_id; - + drop view if exists order_agg_vw; create view order_agg_vw as @@ -28,7 +28,7 @@ group by d.order_id; - + IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'order_agg_vw') DROP VIEW order_agg_vw;