From 7e8ed72b7bd59ed03be94ebb6ea513ae60024c91 Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Tue, 12 Sep 2017 22:44:37 +1200 Subject: [PATCH] #1125 - ENH: Add a SpiContainerBootup API ... to enable automatic startup of docker containers (for testing usually) --- .../ebeaninternal/api/SpiContainerBootup.java | 18 ++++++++++++++++++ .../server/core/DefaultContainer.java | 10 ++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/main/java/io/ebeaninternal/api/SpiContainerBootup.java diff --git a/src/main/java/io/ebeaninternal/api/SpiContainerBootup.java b/src/main/java/io/ebeaninternal/api/SpiContainerBootup.java new file mode 100644 index 000000000..324da0e60 --- /dev/null +++ b/src/main/java/io/ebeaninternal/api/SpiContainerBootup.java @@ -0,0 +1,18 @@ +package io.ebeaninternal.api; + +/** + * Plugin API available to invoke something prior to container bootup. + *

+ * The initial intent is to provide a hook for 'docker-run' such that we can automatically ensure + * we have a test DB docker container running and setup ready to go. + *

+ */ +public interface SpiContainerBootup { + + /** + * Run something at bootup prior to the container starting. + * + * For example, start DB docker container(s). + */ + void bootup(); +} diff --git a/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java b/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java index 149c1189a..280054f27 100644 --- a/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java +++ b/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java @@ -14,6 +14,7 @@ import io.ebean.config.dbplatform.DatabasePlatform; import io.ebean.config.dbplatform.h2.H2Platform; import io.ebean.dbmigration.DbOffline; import io.ebeaninternal.api.SpiBackgroundExecutor; +import io.ebeaninternal.api.SpiContainerBootup; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.server.cache.DefaultServerCacheManager; import io.ebeaninternal.server.cache.DefaultServerCachePlugin; @@ -51,6 +52,8 @@ public class DefaultContainer implements SpiContainer { public DefaultContainer(ContainerConfig containerConfig) { + invokeBootupPlugin(); + this.clusterManager = new ClusterManager(containerConfig); this.jndiDataSourceFactory = new JndiDataSourceLookup(); @@ -59,6 +62,13 @@ public class DefaultContainer implements SpiContainer { ShutdownManager.registerContainer(this); } + private void invokeBootupPlugin() { + Iterator it = ServiceLoader.load(SpiContainerBootup.class).iterator(); + while (it.hasNext()) { + it.next().bootup(); + } + } + @Override public void shutdown() { clusterManager.shutdown();