diff --git a/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java b/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java index 5bef9300e..8a6449670 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java +++ b/src/main/java/com/avaje/ebean/dbmigration/DdlGenerator.java @@ -16,21 +16,24 @@ import java.io.LineNumberReader; import java.io.Reader; /** - * Controls the generation of DDL and potentially runs the resulting scripts. + * Controls the generation and execution of "Create All" and "Drop All" DDL scripts. + * + * 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 SpiEbeanPlugin { +public class DdlGenerator { - private SpiEbeanServer server; + private final SpiEbeanServer server; - private boolean generateDdl; - private boolean runDdl; - private boolean createOnly; + private final boolean generateDdl; + private final boolean runDdl; + private final boolean createOnly; private CurrentModel currentModel; private String dropContent; private String createContent; - public void setup(SpiEbeanServer server, ServerConfig serverConfig) { + public DdlGenerator(SpiEbeanServer server, ServerConfig serverConfig) { this.server = server; this.generateDdl = serverConfig.isDdlGenerate(); this.runDdl = serverConfig.isDdlRun(); @@ -51,7 +54,7 @@ public class DdlGenerator implements SpiEbeanPlugin { /** * Generate the DDL drop and create scripts if the properties have been set. */ - public void generateDdl() { + protected void generateDdl() { if (generateDdl) { if (!createOnly) { writeDrop(getDropFileName()); @@ -63,7 +66,7 @@ public class DdlGenerator implements SpiEbeanPlugin { /** * Run the DDL drop and DDL create scripts if properties have been set. */ - public void runDdl() { + protected void runDdl() { if (runDdl) { try { @@ -146,7 +149,7 @@ public class DdlGenerator implements SpiEbeanPlugin { } } - public String generateDropDdl() { + protected String generateDropDdl() { try { dropContent = currentModel().getDropDdl(); @@ -156,7 +159,7 @@ public class DdlGenerator implements SpiEbeanPlugin { } } - public String generateCreateDdl() { + protected String generateCreateDdl() { try { createContent = currentModel().getCreateDdl(); @@ -204,7 +207,7 @@ public class DdlGenerator implements SpiEbeanPlugin { return readContent(new FileReader(f)); } - private String readContent(Reader reader) throws IOException { + protected String readContent(Reader reader) throws IOException { StringBuilder buf = new StringBuilder(); 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 7c660add5..174d647a7 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java @@ -142,7 +142,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { private final List serverPlugins; - private DdlGenerator ddlGenerator; + private final DdlGenerator ddlGenerator; private final ExpressionFactory expressionFactory; @@ -235,6 +235,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { this.beanLoader = new DefaultBeanLoader(this); this.jsonContext = config.createJsonContext(this); this.serverPlugins = config.getPlugins(); + this.ddlGenerator = new DdlGenerator(this, serverConfig); // load normal plugins late and call setup on all loadAndInitializePlugins(config.getServerConfig()); @@ -261,18 +262,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { for (SpiEbeanPlugin plugin : ServiceLoader.load(SpiEbeanPlugin.class)) { spiPlugins.add(plugin); plugin.setup(this, config); - - if (plugin instanceof DdlGenerator) { - // backwards compatible - ddlGenerator = (DdlGenerator) plugin; - } - } - - if (ddlGenerator == null) { - // ServiceLoader not finding ddlGenerator (typically OSGi) - ddlGenerator = new DdlGenerator(); - spiPlugins.add(ddlGenerator); - ddlGenerator.setup(this, config); } ebeanPlugins = Collections.unmodifiableList(spiPlugins); @@ -289,6 +278,9 @@ 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) { + + ddlGenerator.execute(online); + for (SpiEbeanPlugin plugin : ebeanPlugins) { plugin.execute(online); } diff --git a/src/main/resources/META-INF/services/com.avaje.ebeaninternal.api.SpiEbeanPlugin b/src/main/resources/META-INF/services/com.avaje.ebeaninternal.api.SpiEbeanPlugin deleted file mode 100644 index e769e882b..000000000 --- a/src/main/resources/META-INF/services/com.avaje.ebeaninternal.api.SpiEbeanPlugin +++ /dev/null @@ -1 +0,0 @@ -com.avaje.ebean.dbmigration.DdlGenerator