From ee7f6da0225efc14d89fab58d88a45c98823399e Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Sun, 6 Nov 2016 12:05:05 +0100 Subject: [PATCH] Upgraded Hibernate * hibernate-core 5.0.2.Final -> 5.2.4.Final * hibernate-validator 5.2.2.Final -> 5.3.1.Final --- pom.xml | 4 +- src/it/h4mp-mod/schema.sql | 3 +- src/it/hib-test/h2.sql | 3 +- src/it/hib-test/oracle.sql | 3 +- src/it/hib-test/postgres.sql | 3 +- .../create-tables-hsqldb.sql | 6 +- .../drop-tables-hsqldb.sql | 4 +- src/it/ignored-dependency/schema.sql | 3 +- src/it/properties/h2.sql | 3 +- src/it/schemaexport-example/schema.sql | 3 +- src/it/tutorials/entitymanager/pom.xml | 2 + src/it/tutorials/envers/pom.xml | 2 + src/it/tutorials/osgi/managed-jpa/pom.xml | 1 + src/it/tutorials/schema-osgi-managed-jpa.sql | 7 + .../tutorials/schema-osgi-unmanaged-jpa.sql | 3 +- .../schema-osgi-unmanaged-native.sql | 3 +- .../plugins/hibernate/AbstractSchemaMojo.java | 233 +++++++++++++----- .../juplo/plugins/hibernate/CreateMojo.java | 58 +++-- .../de/juplo/plugins/hibernate/DropMojo.java | 58 +++-- 19 files changed, 251 insertions(+), 151 deletions(-) diff --git a/pom.xml b/pom.xml index 11f9e547..eaaa525b 100644 --- a/pom.xml +++ b/pom.xml @@ -131,8 +131,8 @@ UTF-8 - 5.0.2.Final - 5.2.2.Final + 5.2.4.Final + 5.3.1.Final 3.0.0 3.3.3 1.0.1 diff --git a/src/it/h4mp-mod/schema.sql b/src/it/h4mp-mod/schema.sql index 9376dd73..6b95ee2c 100644 --- a/src/it/h4mp-mod/schema.sql +++ b/src/it/h4mp-mod/schema.sql @@ -1,5 +1,4 @@ - - create sequence hibernate_sequence start 1 increment 1; +create sequence hibernate_sequence start 1 increment 1; create table MainEntity ( id int8 not null, diff --git a/src/it/hib-test/h2.sql b/src/it/hib-test/h2.sql index f4fff24a..fd15b3fa 100644 --- a/src/it/hib-test/h2.sql +++ b/src/it/hib-test/h2.sql @@ -7,5 +7,4 @@ sources varchar(255), primary key (uuid) ); - - create index idx_test_simple_tuple on test_simple (sources, uuid); +create index idx_test_simple_tuple on test_simple (sources, uuid); diff --git a/src/it/hib-test/oracle.sql b/src/it/hib-test/oracle.sql index 15df9419..38caf329 100644 --- a/src/it/hib-test/oracle.sql +++ b/src/it/hib-test/oracle.sql @@ -7,5 +7,4 @@ sources varchar2(255 char), primary key (uuid) ); - - create index idx_test_simple_tuple on test_simple (sources, uuid); +create index idx_test_simple_tuple on test_simple (sources, uuid); diff --git a/src/it/hib-test/postgres.sql b/src/it/hib-test/postgres.sql index 99bdf22f..7624731c 100644 --- a/src/it/hib-test/postgres.sql +++ b/src/it/hib-test/postgres.sql @@ -7,5 +7,4 @@ sources varchar(255), primary key (uuid) ); - - create index idx_test_simple_tuple on test_simple (sources, uuid); +create index idx_test_simple_tuple on test_simple (sources, uuid); diff --git a/src/it/hibernate4-maven-plugin-envers-sample/create-tables-hsqldb.sql b/src/it/hibernate4-maven-plugin-envers-sample/create-tables-hsqldb.sql index 180166f7..eee70612 100644 --- a/src/it/hibernate4-maven-plugin-envers-sample/create-tables-hsqldb.sql +++ b/src/it/hibernate4-maven-plugin-envers-sample/create-tables-hsqldb.sql @@ -1,7 +1,5 @@ - - create sequence TTL_AUDIT_REVISION_SEQ start with 1 increment by 10; - - create sequence TTL_EVENT_SEQ start with 1 increment by 10; +create sequence TTL_AUDIT_REVISION_SEQ start with 1 increment by 10; +create sequence TTL_EVENT_SEQ start with 1 increment by 10; create table TTL_AUDIT_REVISION ( ID bigint not null, diff --git a/src/it/hibernate4-maven-plugin-envers-sample/drop-tables-hsqldb.sql b/src/it/hibernate4-maven-plugin-envers-sample/drop-tables-hsqldb.sql index d1237677..b1387e80 100644 --- a/src/it/hibernate4-maven-plugin-envers-sample/drop-tables-hsqldb.sql +++ b/src/it/hibernate4-maven-plugin-envers-sample/drop-tables-hsqldb.sql @@ -8,6 +8,6 @@ drop table TTL_EVENT_AUD if exists; - drop sequence TTL_AUDIT_REVISION_SEQ; + drop sequence TTL_AUDIT_REVISION_SEQ if exists; - drop sequence TTL_EVENT_SEQ; + drop sequence TTL_EVENT_SEQ if exists; diff --git a/src/it/ignored-dependency/schema.sql b/src/it/ignored-dependency/schema.sql index d2a1838c..9b3970fe 100644 --- a/src/it/ignored-dependency/schema.sql +++ b/src/it/ignored-dependency/schema.sql @@ -1,5 +1,4 @@ - - create sequence hibernate_sequence start 1 increment 1; +create sequence hibernate_sequence start 1 increment 1; create table MainEntity ( id int8 not null, diff --git a/src/it/properties/h2.sql b/src/it/properties/h2.sql index 10d07285..7f75d95e 100644 --- a/src/it/properties/h2.sql +++ b/src/it/properties/h2.sql @@ -6,5 +6,4 @@ sources varchar(255), primary key (uuid) ); - - create index idx_test_simple_tuple on test_simple (sources, uuid); +create index idx_test_simple_tuple on test_simple (sources, uuid); diff --git a/src/it/schemaexport-example/schema.sql b/src/it/schemaexport-example/schema.sql index 5c57479e..f1729b9e 100644 --- a/src/it/schemaexport-example/schema.sql +++ b/src/it/schemaexport-example/schema.sql @@ -1,5 +1,4 @@ - - create sequence hibernate_sequence start with 1 increment by 1; +create sequence hibernate_sequence start with 1 increment by 1; create table ABTEILUNG ( OID bigint not null, diff --git a/src/it/tutorials/entitymanager/pom.xml b/src/it/tutorials/entitymanager/pom.xml index 9d740a5e..a68d7908 100644 --- a/src/it/tutorials/entitymanager/pom.xml +++ b/src/it/tutorials/entitymanager/pom.xml @@ -69,6 +69,8 @@ true org.hibernate.dialect.H2Dialect true + sa + diff --git a/src/it/tutorials/envers/pom.xml b/src/it/tutorials/envers/pom.xml index f5d87692..7aaac615 100644 --- a/src/it/tutorials/envers/pom.xml +++ b/src/it/tutorials/envers/pom.xml @@ -74,6 +74,8 @@ true org.hibernate.dialect.H2Dialect true + sa + diff --git a/src/it/tutorials/osgi/managed-jpa/pom.xml b/src/it/tutorials/osgi/managed-jpa/pom.xml index e26e99ed..6aa0cc30 100644 --- a/src/it/tutorials/osgi/managed-jpa/pom.xml +++ b/src/it/tutorials/osgi/managed-jpa/pom.xml @@ -82,6 +82,7 @@ jdbc:h2:mem:db1;MVCC=TRUE true + false diff --git a/src/it/tutorials/schema-osgi-managed-jpa.sql b/src/it/tutorials/schema-osgi-managed-jpa.sql index e69de29b..de92e463 100644 --- a/src/it/tutorials/schema-osgi-managed-jpa.sql +++ b/src/it/tutorials/schema-osgi-managed-jpa.sql @@ -0,0 +1,7 @@ +create sequence hibernate_sequence start with 1 increment by 1; + + create table DataPoint ( + id bigint not null, + name varchar(255), + primary key (id) + ); diff --git a/src/it/tutorials/schema-osgi-unmanaged-jpa.sql b/src/it/tutorials/schema-osgi-unmanaged-jpa.sql index e79470af..de92e463 100644 --- a/src/it/tutorials/schema-osgi-unmanaged-jpa.sql +++ b/src/it/tutorials/schema-osgi-unmanaged-jpa.sql @@ -1,5 +1,4 @@ - - create sequence hibernate_sequence start with 1 increment by 1; +create sequence hibernate_sequence start with 1 increment by 1; create table DataPoint ( id bigint not null, diff --git a/src/it/tutorials/schema-osgi-unmanaged-native.sql b/src/it/tutorials/schema-osgi-unmanaged-native.sql index 9f02ba42..d89e2801 100644 --- a/src/it/tutorials/schema-osgi-unmanaged-native.sql +++ b/src/it/tutorials/schema-osgi-unmanaged-native.sql @@ -1,5 +1,4 @@ - - create sequence hibernate_sequence start with 1 increment by 1; +create sequence hibernate_sequence start with 1 increment by 1; create table DataPoint ( id bigint not null, diff --git a/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java b/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java index e121f2a1..ff68ea73 100644 --- a/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java +++ b/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java @@ -10,6 +10,8 @@ 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; @@ -45,25 +47,34 @@ 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; +import static org.hibernate.cfg.AvailableSettings.HBM2DDL_DELIMITER; import static org.hibernate.cfg.AvailableSettings.HBM2DLL_CREATE_NAMESPACES; import static org.hibernate.cfg.AvailableSettings.IMPLICIT_NAMING_STRATEGY; +import static org.hibernate.cfg.AvailableSettings.JPA_JDBC_DRIVER; +import static org.hibernate.cfg.AvailableSettings.JPA_JDBC_PASSWORD; +import static org.hibernate.cfg.AvailableSettings.JPA_JDBC_URL; +import static org.hibernate.cfg.AvailableSettings.JPA_JDBC_USER; import static org.hibernate.cfg.AvailableSettings.PASS; 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 static org.hibernate.jpa.AvailableSettings.JDBC_DRIVER; -import static org.hibernate.jpa.AvailableSettings.JDBC_PASSWORD; -import static org.hibernate.jpa.AvailableSettings.JDBC_URL; -import static org.hibernate.jpa.AvailableSettings.JDBC_USER; import org.hibernate.jpa.boot.internal.ParsedPersistenceXmlDescriptor; import org.hibernate.jpa.boot.internal.PersistenceXmlParser; -import org.hibernate.jpa.boot.spi.ProviderChecker; +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; @@ -77,7 +88,6 @@ import org.scannotation.AnnotationDB; public abstract class AbstractSchemaMojo extends AbstractMojo { public final static String EXPORT = "hibernate.schema.export"; - public final static String DELIMITER = "hibernate.schema.delimiter"; 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"; @@ -89,6 +99,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo private final Set packages = new HashSet(); + /** * The maven project. *

@@ -109,7 +120,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo * @required * @readonly */ - String buildDirectory; + private String buildDirectory; /** Parameters to configure the genaration of the SQL *********************/ @@ -128,7 +139,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo * @parameter property="hibernate.schema.export" default-value="true" * @since 2.0 */ - Boolean export; + private Boolean export; /** * Skip execution @@ -188,10 +199,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.delimiter" default-value=";" + * @parameter property="hibernate.hbm2ddl.delimiter" default-value=";" * @since 1.0 */ - String delimiter; + private String delimiter; /** * Show the generated SQL in the command-line output. @@ -199,7 +210,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo * @parameter property="hibernate.show_sql" * @since 1.0 */ - Boolean show; + private Boolean show; /** * Format output-file. @@ -207,7 +218,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo * @parameter property="hibernate.format_sql" * @since 1.0 */ - Boolean format; + private Boolean format; /** * Specifies whether to automatically create also the database schema/catalog. @@ -215,7 +226,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo * @parameter property="hibernate.hbm2dll.create_namespaces" default-value="false" * @since 2.0 */ - Boolean createNamespaces; + private Boolean createNamespaces; /** * Implicit naming strategy @@ -445,7 +456,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo throw new MojoFailureException("Digest-Algorithm MD5 is missing!", e); } - SimpleConnectionProvider connectionProvider = + final SimpleConnectionProvider connectionProvider = new SimpleConnectionProvider(getLog()); try @@ -489,13 +500,16 @@ public abstract class AbstractSchemaMojo extends AbstractMojo else getLog().debug("Configuration unchanged."); + /** Check, that the outputfile is writable */ + final File output = getOutputFile(filename); + /** Configure Hibernate */ - StandardServiceRegistry serviceRegistry = + final StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder(bootstrapServiceRegitry) .applySettings(properties) .addService(ConnectionProvider.class, connectionProvider) .build(); - MetadataSources sources = new MetadataSources(serviceRegistry); + final MetadataSources sources = new MetadataSources(serviceRegistry); /** Add the remaining class-path-elements */ completeClassPath(classLoader); @@ -654,6 +668,42 @@ 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 targetTypes = EnumSet.of(TargetType.SCRIPT); + if (export) + targetTypes.add(TargetType.DATABASE); + TargetDescriptor target = new TargetDescriptor() + { + @Override + public EnumSet getTargetTypes() + { + return targetTypes; + } + + @Override + public ScriptTargetOutput getScriptTargetOutput() + { + String charset = + (String) + serviceRegistry + .getService(ConfigurationService.class) + .getSettings() + .get(AvailableSettings.HBM2DDL_CHARSET_NAME); + return new ScriptTargetOutputToFile(output, charset); + } + }; + /** * Change class-loader of current thread. * This is necessary, because still not all parts of Hibernate 5 use @@ -664,11 +714,13 @@ public abstract class AbstractSchemaMojo extends AbstractMojo try { thread.setContextClassLoader(classLoader); - build((MetadataImplementor)metadataBuilder.build()); + build((MetadataImplementor)metadataBuilder.build(), options, target); } finally { thread.setContextClassLoader(contextClassLoader); + for (Exception e : handler.getExceptions()) + getLog().error(e.getMessage()); } } catch (MojoExecutionException e) @@ -700,7 +752,11 @@ public abstract class AbstractSchemaMojo extends AbstractMojo } - abstract void build(MetadataImplementor metadata) + abstract void build( + MetadataImplementor metadata, + ExecutionOptions options, + TargetDescriptor target + ) throws MojoFailureException, MojoExecutionException; @@ -856,12 +912,12 @@ public abstract class AbstractSchemaMojo extends AbstractMojo * Overwrite values from properties-file if the configuration parameter is * known to Hibernate. */ - dialect = configure(properties, dialect, DIALECT); - tracker.track(DELIMITER, delimiter); // << not reflected in hibernate configuration! - format = configure(properties, format, FORMAT_SQL); - createNamespaces = configure(properties, createNamespaces, HBM2DLL_CREATE_NAMESPACES); - implicitNamingStrategy = configure(properties, implicitNamingStrategy, IMPLICIT_NAMING_STRATEGY); - physicalNamingStrategy = configure(properties, physicalNamingStrategy, PHYSICAL_NAMING_STRATEGY); + configure(properties, dialect, DIALECT); + configure(properties, delimiter, HBM2DDL_DELIMITER); + configure(properties, format, FORMAT_SQL); + configure(properties, createNamespaces, HBM2DLL_CREATE_NAMESPACES); + configure(properties, implicitNamingStrategy, IMPLICIT_NAMING_STRATEGY); + configure(properties, physicalNamingStrategy, PHYSICAL_NAMING_STRATEGY); tracker.track(OUTPUTDIRECTORY, outputDirectory); // << not reflected in hibernate configuration! tracker.track(SCAN_DEPENDENCIES, scanDependencies); // << not reflected in hibernate configuration! tracker.track(SCAN_TESTCLASSES, scanTestClasses.toString()); // << not reflected in hibernate configuration! @@ -881,10 +937,10 @@ public abstract class AbstractSchemaMojo extends AbstractMojo * Configure the connection parameters. * Overwrite values from properties-file. */ - driver = configure(properties, driver, DRIVER, JDBC_DRIVER); - url = configure(properties, url, URL, JDBC_URL); - username = configure(properties, username, USER, JDBC_USER); - password = configure(properties, password, PASS, JDBC_PASSWORD); + configure(properties, driver, DRIVER, JPA_JDBC_DRIVER); + configure(properties, url, URL, JPA_JDBC_URL); + configure(properties, username, USER, JPA_JDBC_USER); + configure(properties, password, PASS, JPA_JDBC_PASSWORD); if (properties.isEmpty()) { @@ -897,7 +953,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo getLog().info(" " + entry.getKey() + " = " + entry.getValue()); } - private String configure( + private void configure( Properties properties, String value, String key, @@ -906,7 +962,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo { value = configure(properties, value, key); if (value == null) - return properties.getProperty(alternativeKey); + return; if (properties.containsKey(alternativeKey)) { @@ -917,7 +973,6 @@ public abstract class AbstractSchemaMojo extends AbstractMojo ); properties.remove(alternativeKey); } - return properties.getProperty(alternativeKey); } private String configure(Properties properties, String value, String key) @@ -936,7 +991,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo return properties.getProperty(key); } - private boolean configure(Properties properties, Boolean value, String key) + private void configure(Properties properties, Boolean value, String key) { if (value != null) { @@ -949,7 +1004,62 @@ public abstract class AbstractSchemaMojo extends AbstractMojo getLog().debug("Using the value " + value + " for property " + key); properties.setProperty(key, value.toString()); } - return Boolean.valueOf(properties.getProperty(key)); + } + + private File getOutputFile(String filename) + throws + MojoExecutionException + { + File output = new File(filename); + + if (!output.isAbsolute()) + { + // Interpret relative file path relative to build directory + output = new File(buildDirectory, filename); + } + getLog().debug("Output file: " + output.getPath()); + + // Ensure that directory path for specified file exists + File outFileParentDir = output.getParentFile(); + if (null != outFileParentDir && !outFileParentDir.exists()) + { + try + { + getLog().info( + "Creating directory path for output file:" + + outFileParentDir.getPath() + ); + outFileParentDir.mkdirs(); + } + catch (Exception e) + { + String error = + "Error creating directory path for output file: " + e.getMessage(); + getLog().error(error); + throw new MojoExecutionException(error); + } + } + + try + { + output.createNewFile(); + } + catch (IOException e) + { + String error = "Error creating output file: " + e.getMessage(); + getLog().error(error); + throw new MojoExecutionException(error); + } + + if (!output.canWrite()) + { + String error = + "Output file " + output.getAbsolutePath() + " is not writable!"; + getLog().error(error); + throw new MojoExecutionException(error); + } + + return output; } private void addMappings(MetadataSources sources, ModificationTracker tracker) @@ -1172,48 +1282,41 @@ public abstract class AbstractSchemaMojo extends AbstractMojo PersistenceUnitTransactionType.RESOURCE_LOCAL ); - List units = parser.doResolve(properties); + Map units = + parser.doResolve(properties); if (persistenceUnit == null) { - switch (units.size()) + Iterator names = units.keySet().iterator(); + if (!names.hasNext()) { - case 0: - getLog().info("Found no META-INF/persistence.xml."); - return null; - case 1: - getLog().info("Using persistence-unit " + units.get(0).getName()); - return units.get(0); - default: - StringBuilder builder = new StringBuilder(); - builder.append("No name provided and multiple persistence units found: "); - Iterator it = units.iterator(); - builder.append(it.next().getName()); - while (it.hasNext()) - { - builder.append(", "); - builder.append(it.next().getName()); - } - builder.append('.'); - throw new MojoFailureException(builder.toString()); + getLog().info("Found no META-INF/persistence.xml."); + return null; } - } - for (ParsedPersistenceXmlDescriptor unit : units) - { - getLog().debug("Found persistence-unit " + unit.getName()); - if (!unit.getName().equals(persistenceUnit)) - continue; + String name = names.next(); + if (!names.hasNext()) + { + getLog().info("Using persistence-unit " + name); + return units.get(name); + } - // See if we (Hibernate) are the persistence provider - if (!ProviderChecker.isProvider(unit, properties)) + StringBuilder builder = new StringBuilder(); + builder.append("No name provided and multiple persistence units found: "); + builder.append(name); + while(names.hasNext()) { - getLog().debug("Wrong provider: " + unit.getProviderClassName()); - continue; + builder.append(", "); + builder.append(names.next()); } + builder.append('.'); + throw new MojoFailureException(builder.toString()); + } - getLog().info("Using persistence-unit " + unit.getName()); - return unit; + if (units.containsKey(persistenceUnit)) + { + getLog().info("Using configured persistence-unit " + persistenceUnit); + return units.get(persistenceUnit); } throw new MojoFailureException("Could not find persistence-unit " + persistenceUnit); diff --git a/src/main/java/de/juplo/plugins/hibernate/CreateMojo.java b/src/main/java/de/juplo/plugins/hibernate/CreateMojo.java index 5bafe14d..23f97a8f 100644 --- a/src/main/java/de/juplo/plugins/hibernate/CreateMojo.java +++ b/src/main/java/de/juplo/plugins/hibernate/CreateMojo.java @@ -16,11 +16,17 @@ package de.juplo.plugins.hibernate; * limitations under the License. */ -import java.io.File; +import java.util.Map; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.tool.hbm2ddl.SchemaExport; +import org.hibernate.service.ServiceRegistry; +import org.hibernate.tool.schema.SourceType; +import org.hibernate.tool.schema.spi.ExecutionOptions; +import org.hibernate.tool.schema.spi.SchemaManagementTool; +import org.hibernate.tool.schema.spi.ScriptSourceInput; +import org.hibernate.tool.schema.spi.SourceDescriptor; +import org.hibernate.tool.schema.spi.TargetDescriptor; /** @@ -41,7 +47,7 @@ public class CreateMojo extends AbstractSchemaMojo * relative to the project build directory * (project.build.directory). * - * @parameter property="hibernate.schema.export.create" default-value="create.sql" + * @parameter property="hibernate.schema.create" default-value="create.sql" * @since 1.0 */ private String outputFile; @@ -58,43 +64,35 @@ public class CreateMojo extends AbstractSchemaMojo @Override - void build(MetadataImplementor metadata) + void build( + MetadataImplementor metadata, + ExecutionOptions options, + TargetDescriptor target + ) throws MojoExecutionException, MojoFailureException { - SchemaExport schemaExport = new SchemaExport(metadata, createNamespaces); - schemaExport.setDelimiter(delimiter); - schemaExport.setFormat(format); + ServiceRegistry service = + metadata.getMetadataBuildingOptions().getServiceRegistry(); + SchemaManagementTool tool = service.getService(SchemaManagementTool.class); - File output = new File(outputFile); - - if (!output.isAbsolute()) - { - // Interpret relative file path relative to build directory - output = new File(buildDirectory, outputFile); - getLog().debug("Adjusted relative path, resulting path is " + output.getPath()); - } - - // Ensure that directory path for specified file exists - File outFileParentDir = output.getParentFile(); - if (null != outFileParentDir && !outFileParentDir.exists()) + Map config = options.getConfigurationValues(); + SourceDescriptor source = new SourceDescriptor() { - try + @Override + public SourceType getSourceType() { - getLog().info("Creating directory path for output file:" + outFileParentDir.getPath()); - outFileParentDir.mkdirs(); + return SourceType.METADATA; } - catch (Exception e) + + @Override + public ScriptSourceInput getScriptSourceInput() { - getLog().error("Error creating directory path for output file: " + e.getLocalizedMessage()); + return null; } - } - - schemaExport.setOutputFile(output.getPath()); - schemaExport.execute(false, this.export, false, true); + }; - for (Object exception : schemaExport.getExceptions()) - getLog().error(exception.toString()); + tool.getSchemaCreator(config).doCreation(metadata, options, source, target); } } diff --git a/src/main/java/de/juplo/plugins/hibernate/DropMojo.java b/src/main/java/de/juplo/plugins/hibernate/DropMojo.java index 969a2198..dd40387c 100644 --- a/src/main/java/de/juplo/plugins/hibernate/DropMojo.java +++ b/src/main/java/de/juplo/plugins/hibernate/DropMojo.java @@ -16,11 +16,17 @@ package de.juplo.plugins.hibernate; * limitations under the License. */ -import java.io.File; +import java.util.Map; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.tool.hbm2ddl.SchemaExport; +import org.hibernate.service.ServiceRegistry; +import org.hibernate.tool.schema.SourceType; +import org.hibernate.tool.schema.spi.ExecutionOptions; +import org.hibernate.tool.schema.spi.SchemaManagementTool; +import org.hibernate.tool.schema.spi.ScriptSourceInput; +import org.hibernate.tool.schema.spi.SourceDescriptor; +import org.hibernate.tool.schema.spi.TargetDescriptor; /** @@ -41,7 +47,7 @@ public class DropMojo extends AbstractSchemaMojo * relative to the project build directory * (project.build.directory). * - * @parameter property="hibernate.schema.export.drop" default-value="drop.sql" + * @parameter property="hibernate.schema.drop" default-value="drop.sql" * @since 1.0 */ private String outputFile; @@ -58,43 +64,35 @@ public class DropMojo extends AbstractSchemaMojo @Override - void build(MetadataImplementor metadata) + void build( + MetadataImplementor metadata, + ExecutionOptions options, + TargetDescriptor target + ) throws MojoExecutionException, MojoFailureException { - SchemaExport schemaExport = new SchemaExport(metadata, createNamespaces); - schemaExport.setDelimiter(delimiter); - schemaExport.setFormat(format); + ServiceRegistry service = + metadata.getMetadataBuildingOptions().getServiceRegistry(); + SchemaManagementTool tool = service.getService(SchemaManagementTool.class); - File output = new File(outputFile); - - if (!output.isAbsolute()) - { - // Interpret relative file path relative to build directory - output = new File(buildDirectory, outputFile); - getLog().debug("Adjusted relative path, resulting path is " + output.getPath()); - } - - // Ensure that directory path for specified file exists - File outFileParentDir = output.getParentFile(); - if (null != outFileParentDir && !outFileParentDir.exists()) + Map config = options.getConfigurationValues(); + SourceDescriptor source = new SourceDescriptor() { - try + @Override + public SourceType getSourceType() { - getLog().info("Creating directory path for output file:" + outFileParentDir.getPath()); - outFileParentDir.mkdirs(); + return SourceType.METADATA; } - catch (Exception e) + + @Override + public ScriptSourceInput getScriptSourceInput() { - getLog().error("Error creating directory path for output file: " + e.getLocalizedMessage()); + return null; } - } - - schemaExport.setOutputFile(output.getPath()); - schemaExport.execute(false, this.export, true, false); + }; - for (Object exception : schemaExport.getExceptions()) - getLog().error(exception.toString()); + tool.getSchemaDropper(config).doDrop(metadata, options, source, target); } } -- 2.20.1