diff --git a/ebean-api/src/main/java/io/ebean/plugin/Plugin.java b/ebean-api/src/main/java/io/ebean/plugin/Plugin.java
index 359adce38..3314f9353 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/Plugin.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/Plugin.java
@@ -14,6 +14,13 @@ public interface Plugin {
* Called just before the server starts indicating if it is coming up in online mode.
*/
void online(boolean online);
+
+ /**
+ * Called when server.start is invoked. This may be executed for each tenant.
+ */
+ default void start() {
+
+ };
/**
* Called when the server is shutting down.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiDdlGenerator.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiDdlGenerator.java
deleted file mode 100644
index 6c5d2f43c..000000000
--- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiDdlGenerator.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package io.ebeaninternal.api;
-
-/**
- * DDL generate and run for drop all/create all.
- */
-public interface SpiDdlGenerator {
-
- /**
- * Generate and run the DDL for drop-all and create-all scripts.
- *
- * Run based on on property settings for ebean.ddl.generate
- */
- void generateDdl();
-
- /**
- * Runs the created DDL files.
- *
- * Run based on on property settings for ebean.ddl.run etc.
- */
- void runDdl();
-}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiDdlGeneratorProvider.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiDdlGeneratorProvider.java
deleted file mode 100644
index d16267957..000000000
--- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiDdlGeneratorProvider.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package io.ebeaninternal.api;
-
-/**
- * Provides the DDL Generator for create-all/drop-all.
- */
-public interface SpiDdlGeneratorProvider {
-
- /**
- * Provide the DDL generator.
- */
- SpiDdlGenerator generator(SpiEbeanServer server);
-
-}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index 1f44e01b2..5981ef9bf 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -161,7 +161,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
private final ReadAuditLogger readAuditLogger;
private final CQueryEngine cqueryEngine;
private final List serverPlugins;
- private final SpiDdlGenerator ddlGenerator;
private final ScriptRunner scriptRunner;
private final ExpressionFactory expressionFactory;
private final SpiBackgroundExecutor backgroundExecutor;
@@ -224,7 +223,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
this.metaInfoManager = new DefaultMetaInfoManager(this);
this.serverPlugins = config.getPlugins();
this.tempFileProvider = config.getConfig().getTempFileProvider();
- this.ddlGenerator = config.initDdlGenerator(this);
this.scriptRunner = new DScriptRunner(this);
configureServerPlugins();
@@ -254,9 +252,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
* Execute all the plugins with an online flag indicating the DB is up or not.
*/
public void executePlugins(boolean online) {
- if (!config.isDocStoreOnly()) {
- ddlGenerator.generateDdl();
- }
for (Plugin plugin : serverPlugins) {
plugin.online(online);
}
@@ -386,8 +381,9 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
migrationRunner.setPlatform(config.getDatabasePlatform().getPlatform().base().name().toLowerCase());
migrationRunner.loadProperties(config.getProperties());
migrationRunner.run(config.getDataSource());
- } else if (config.isDdlRun()) {
- ddlGenerator.runDdl();
+ }
+ for (Plugin plugin : serverPlugins) {
+ plugin.start();
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
index 544e7b3fb..dc24cfdc4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
@@ -601,31 +601,4 @@ public final class InternalConfiguration {
return new QueryPlanLoggerExplain();
}
}
-
- /**
- * Return the DDL generator.
- */
- public SpiDdlGenerator initDdlGenerator(SpiEbeanServer server) {
- final SpiDdlGeneratorProvider service = service(SpiDdlGeneratorProvider.class);
- return service == null ? new NoopDdl(server.config().isDdlRun()) : service.generator(server);
- }
-
- private static class NoopDdl implements SpiDdlGenerator {
- private final boolean ddlRun;
- NoopDdl(boolean ddlRun) {
- this.ddlRun = ddlRun;
- }
-
- @Override
- public void generateDdl() {
- // do nothing
- }
-
- @Override
- public void runDdl() {
- if (ddlRun) {
- CoreLog.log.error("Configured to run DDL but ebean-ddl-generator is not in the classpath (or ebean-test in the test classpath?)");
- }
- }
- }
}
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlGeneratorProvider.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlGeneratorProvider.java
deleted file mode 100644
index b551fa6a0..000000000
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlGeneratorProvider.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package io.ebeaninternal.dbmigration;
-
-import io.ebeaninternal.api.SpiDdlGenerator;
-import io.ebeaninternal.api.SpiDdlGeneratorProvider;
-import io.ebeaninternal.api.SpiEbeanServer;
-
-public class DdlGeneratorProvider implements SpiDdlGeneratorProvider {
-
- @Override
- public SpiDdlGenerator generator(SpiEbeanServer server) {
- return new DdlGenerator(server);
- }
-}
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlPlugin.java
similarity index 84%
rename from ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java
rename to ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlPlugin.java
index 67211c973..b501162e5 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlPlugin.java
@@ -5,8 +5,9 @@ import io.ebean.config.DatabaseConfig;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.ddlrunner.DdlRunner;
import io.ebean.ddlrunner.ScriptTransform;
+import io.ebean.plugin.Plugin;
+import io.ebean.plugin.SpiServer;
import io.ebean.util.JdbcClose;
-import io.ebeaninternal.api.SpiDdlGenerator;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.dbmigration.model.CurrentModel;
import io.ebeaninternal.dbmigration.model.MTable;
@@ -33,46 +34,85 @@ import java.sql.SQLException;
* Typically the "Create All" DDL is executed for running tests etc and has nothing to do
* with DB Migration (diff based) DDL.
*/
-public class DdlGenerator implements SpiDdlGenerator {
+public class DdlPlugin implements Plugin {
- private static final Logger log = LoggerFactory.getLogger(DdlGenerator.class);
+ private static final Logger log = LoggerFactory.getLogger(DdlPlugin.class);
private static final String[] BUILD_DIRS = {"target", "build"};
- private final SpiEbeanServer server;
+ private SpiEbeanServer server;
- private final boolean generateDdl;
- private final boolean extraDdl;
- private final boolean createOnly;
- private final boolean jaxbPresent;
- private final boolean ddlAutoCommit;
- private final String dbSchema;
- private final ScriptTransform scriptTransform;
- private final Platform platform;
- private final String platformName;
- private final boolean useMigrationStoredProcedures;
+ private boolean generateDdl;
+ private boolean runDdl;
+ private boolean extraDdl;
+ private boolean createOnly;
+ private boolean jaxbPresent;
+ private boolean ddlAutoCommit;
+ private String dbSchema;
+ private ScriptTransform scriptTransform;
+ private Platform platform;
+ private String platformName;
+ private boolean useMigrationStoredProcedures;
private CurrentModel currentModel;
private String dropAllContent;
private String createAllContent;
- private final File baseDir;
-
- public DdlGenerator(SpiEbeanServer server) {
- this.server = server;
+ private File baseDir;
+
+ @Override
+ public void configure(SpiServer server) {
+ this.server = (SpiEbeanServer) server;
final DatabaseConfig config = server.config();
- this.jaxbPresent = Detect.isJAXBPresent(config);
this.generateDdl = config.isDdlGenerate();
- this.extraDdl = config.isDdlExtra();
- this.createOnly = config.isDdlCreateOnly();
- this.dbSchema = config.getDbSchema();
- final DatabasePlatform databasePlatform = server.databasePlatform();
- this.platform = databasePlatform.getPlatform();
- this.platformName = platform.base().name();
- this.ddlAutoCommit = databasePlatform.isDdlAutoCommit();
- this.useMigrationStoredProcedures = config.getDatabasePlatform().isUseMigrationStoredProcedures();
- this.scriptTransform = createScriptTransform(config);
- this.baseDir = initBaseDir();
+ this.runDdl = config.isDdlRun() && !config.isDocStoreOnly();
+ if (generateDdl || runDdl) {
+ this.jaxbPresent = Detect.isJAXBPresent(config);
+ this.extraDdl = config.isDdlExtra();
+ this.createOnly = config.isDdlCreateOnly();
+ this.dbSchema = config.getDbSchema();
+ final DatabasePlatform databasePlatform = server.databasePlatform();
+ this.platform = databasePlatform.getPlatform();
+ this.platformName = platform.base().name();
+ this.ddlAutoCommit = databasePlatform.isDdlAutoCommit();
+ this.useMigrationStoredProcedures = config.getDatabasePlatform().isUseMigrationStoredProcedures();
+ this.scriptTransform = createScriptTransform(config);
+ this.baseDir = initBaseDir();
+ }
}
+ /**
+ * Generate the DDL drop and create scripts if the properties have been set.
+ */
+ @Override
+ public void online(boolean online) {
+ if (generateDdl) {
+ if (!createOnly) {
+ writeDrop(getDropFileName());
+ }
+ writeCreate(getCreateFileName());
+ }
+ }
+
+ /**
+ * Run the DDL drop and DDL create scripts if properties have been set.
+ */
+ @Override
+ public void start() {
+ if (runDdl) {
+ Connection connection = null;
+ try {
+ connection = obtainConnection();
+ runDdlWith(connection);
+ } finally {
+ JdbcClose.rollback(connection);
+ JdbcClose.close(connection);
+ }
+ }
+ }
+
+ @Override
+ public void shutdown() {}
+
+
private File initBaseDir() {
for (String buildDir : BUILD_DIRS) {
File dir = new File(buildDir);
@@ -83,34 +123,6 @@ public class DdlGenerator implements SpiDdlGenerator {
return new File(".");
}
- /**
- * Generate the DDL drop and create scripts if the properties have been set.
- */
- @Override
- public void generateDdl() {
- if (generateDdl) {
- if (!createOnly) {
- writeDrop(getDropFileName());
- }
- writeCreate(getCreateFileName());
- }
- }
-
- /**
- * Run the DDL drop and DDL create scripts if properties have been set.
- */
- @Override
- public void runDdl() {
- Connection connection = null;
- try {
- connection = obtainConnection();
- runDdlWith(connection);
- } finally {
- JdbcClose.rollback(connection);
- JdbcClose.close(connection);
- }
- }
-
private void runDdlWith(Connection connection) {
try {
if (dbSchema != null) {
diff --git a/ebean-ddl-generator/src/main/resources/META-INF/services/io.ebean.plugin.Plugin b/ebean-ddl-generator/src/main/resources/META-INF/services/io.ebean.plugin.Plugin
new file mode 100644
index 000000000..03ceeb38e
--- /dev/null
+++ b/ebean-ddl-generator/src/main/resources/META-INF/services/io.ebean.plugin.Plugin
@@ -0,0 +1 @@
+io.ebeaninternal.dbmigration.DdlPlugin
diff --git a/ebean-ddl-generator/src/main/resources/META-INF/services/io.ebeaninternal.api.SpiDdlGeneratorProvider b/ebean-ddl-generator/src/main/resources/META-INF/services/io.ebeaninternal.api.SpiDdlGeneratorProvider
deleted file mode 100644
index bfef4384b..000000000
--- a/ebean-ddl-generator/src/main/resources/META-INF/services/io.ebeaninternal.api.SpiDdlGeneratorProvider
+++ /dev/null
@@ -1 +0,0 @@
-io.ebeaninternal.dbmigration.DdlGeneratorProvider