X-Git-Url: http://juplo.de/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fplugins%2Fhibernate%2FAbstractSchemaMojo.java;h=5f6b9bf5b8608371e6cc964f779038ec7337c8d3;hb=bb6069ff5e565f522a7699225d950321dde667d1;hp=9006f352d08ed9bb5384eb651a5b1d3968f32ddd;hpb=f92a01a5043d0ac2f6a8eaf5aeed6f724b102f34;p=hibernate4-maven-plugin
diff --git a/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java b/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java
index 9006f352..5f6b9bf5 100644
--- a/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java
+++ b/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java
@@ -8,10 +8,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
-import java.security.NoSuchAlgorithmException;
import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
@@ -47,7 +44,6 @@ import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
import org.hibernate.boot.registry.selector.spi.StrategySelector;
import org.hibernate.boot.spi.MetadataImplementor;
-import org.hibernate.cfg.AvailableSettings;
import static org.hibernate.cfg.AvailableSettings.DIALECT;
import static org.hibernate.cfg.AvailableSettings.DRIVER;
import static org.hibernate.cfg.AvailableSettings.FORMAT_SQL;
@@ -63,18 +59,11 @@ import static org.hibernate.cfg.AvailableSettings.PHYSICAL_NAMING_STRATEGY;
import static org.hibernate.cfg.AvailableSettings.SHOW_SQL;
import static org.hibernate.cfg.AvailableSettings.USER;
import static org.hibernate.cfg.AvailableSettings.URL;
-import org.hibernate.engine.config.spi.ConfigurationService;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
import org.hibernate.internal.util.config.ConfigurationException;
import org.hibernate.jpa.boot.internal.ParsedPersistenceXmlDescriptor;
import org.hibernate.jpa.boot.internal.PersistenceXmlParser;
-import org.hibernate.tool.schema.TargetType;
import org.hibernate.tool.schema.internal.ExceptionHandlerCollectingImpl;
-import org.hibernate.tool.schema.internal.exec.ScriptTargetOutputToFile;
-import org.hibernate.tool.schema.spi.ExecutionOptions;
-import org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator;
-import org.hibernate.tool.schema.spi.ScriptTargetOutput;
-import org.hibernate.tool.schema.spi.TargetDescriptor;
import org.scannotation.AnnotationDB;
@@ -87,13 +76,14 @@ import org.scannotation.AnnotationDB;
*/
public abstract class AbstractSchemaMojo extends AbstractMojo
{
- public final static String EXPORT = "hibernate.schema.export";
+ public final static String EXECUTE = "hibernate.schema.execute";
public final static String OUTPUTDIRECTORY = "project.build.outputDirectory";
public final static String SCAN_CLASSES = "hibernate.schema.scan.classes";
public final static String SCAN_DEPENDENCIES = "hibernate.schema.scan.dependencies";
public final static String SCAN_TESTCLASSES = "hibernate.schema.scan.test_classes";
public final static String TEST_OUTPUTDIRECTORY = "project.build.testOutputDirectory";
public final static String SKIPPED = "hibernate.schema.skipped";
+ public final static String SCRIPT = "hibernate.schema.script";
private final static Pattern SPLIT = Pattern.compile("[^,\\s]+");
@@ -120,13 +110,13 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
* @required
* @readonly
*/
- private String buildDirectory;
+ String buildDirectory;
/** Parameters to configure the genaration of the SQL *********************/
/**
- * Export the database-schma to the database.
+ * Excecute the generated SQL.
* If set to false
, only the SQL-script is created and the
* database is not touched.
*
@@ -136,10 +126,10 @@ public abstract class AbstractSchemaMojo extends AbstractMojo * it is not known by Hibernate nor JPA and, hence, not picked up from * their configuration! * - * @parameter property="hibernate.schema.export" default-value="true" + * @parameter property="hibernate.schema.execute" default-value="true" * @since 2.0 */ - private Boolean export; + private Boolean execute; /** * Skip execution @@ -164,10 +154,11 @@ public abstract class AbstractSchemaMojo extends AbstractMojo private boolean skip; /** - * Force execution + * Force generation/execution *
- * Force execution, even if no modified or newly added annotated classes - * where found and the dialect was not changed. + * Force the generation and (if configured) the execution of the SQL, even if + * no modified or newly added annotated classes where found and the + * configuration was not changed. *
* skip
takes precedence over force
.
*
@@ -434,7 +425,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
- public final void execute(String filename)
+ public final void execute(ModificationTracker tracker)
throws
MojoFailureException,
MojoExecutionException
@@ -446,16 +437,6 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
return;
}
- ModificationTracker tracker;
- try
- {
- tracker = new ModificationTracker(buildDirectory, filename, getLog());
- }
- catch (NoSuchAlgorithmException e)
- {
- throw new MojoFailureException("Digest-Algorithm MD5 is missing!", e);
- }
-
final SimpleConnectionProvider connectionProvider =
new SimpleConnectionProvider(getLog());
@@ -500,8 +481,18 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
else
getLog().debug("Configuration unchanged.");
- /** Check, that the outputfile is writable */
- final File output = getOutputFile(filename);
+ /** Check, if the outputfile is missing or was changed */
+ try
+ {
+ tracker.track();
+ }
+ catch (IOException e)
+ {
+ String error =
+ "Error while checking the generated script: " + e.getMessage();
+ getLog().error(error);
+ throw new MojoExecutionException(error);
+ }
/** Configure Hibernate */
final StandardServiceRegistry serviceRegistry =
@@ -626,11 +617,9 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
/** Skip execution, if mapping and configuration is unchanged */
if (!tracker.modified())
{
- getLog().info(
- "Mapping and configuration unchanged."
- );
+ getLog().info("Mapping and configuration unchanged.");
if (force)
- getLog().info("Schema generation is forced!");
+ getLog().info("Generation/execution is forced!");
else
{
getLog().info("Skipping schema generation!");
@@ -640,6 +629,20 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
}
+ /** Truncate output file */
+ try
+ {
+ tracker.turncat();
+ }
+ catch (IOException e)
+ {
+ String error =
+ "Error while truncating output file: " // TODO: Filename unknown here!
+ + e.getMessage();
+ getLog().warn(error);
+ throw new MojoExecutionException(error);
+ }
+
/** Create a connection, if sufficient configuration infromation is available */
connectionProvider.open(classLoaderService, properties);
@@ -668,42 +671,6 @@ public abstract class AbstractSchemaMojo extends AbstractMojo
);
}
- /** Prepare the generation of the SQL */
- Map settings = new HashMap();
- settings.putAll(
- serviceRegistry
- .getService(ConfigurationService.class)
- .getSettings()
- );
- ExceptionHandlerCollectingImpl handler =
- new ExceptionHandlerCollectingImpl();
- ExecutionOptions options =
- SchemaManagementToolCoordinator
- .buildExecutionOptions(settings, handler);
- final EnumSet