This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit b30c8d07f63445475f906faf613461e785fb9eb6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Dec 15 14:07:49 2016 +0100 Use Topia 3.2 and Hibernate 5.1.3 (fixes #8889) --- .../observe/ObserveTopiaApplicationContext.java | 10 ++++-- .../entities/migration/ObserveMigrationEngine.java | 4 +-- .../sql/batch/actions/AbstractSchemaAction.java | 38 ++++++++++++++++++++ .../sql/batch/actions/CreateSchemaAction.java | 29 +++------------ .../sql/batch/actions/DropSchemaAction.java | 42 ++++++---------------- 5 files changed, 62 insertions(+), 61 deletions(-) diff --git a/entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java b/entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java index 4debf52..86832ba 100644 --- a/entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java +++ b/entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java @@ -30,8 +30,8 @@ import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; -import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; +import org.hibernate.tool.schema.TargetType; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.internal.support.TopiaMetadataModelSupportImpl; import org.nuiton.topia.persistence.jdbc.JdbcH2Helper; @@ -48,6 +48,7 @@ import org.nuiton.util.StringUtil; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.EnumSet; import java.util.LinkedHashSet; import java.util.Objects; import java.util.Set; @@ -135,8 +136,11 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat topiaPersistenceContext.commit(); } - Configuration hibernateConfiguration = getHibernateProvider().getHibernateConfiguration(); - new SchemaExport(hibernateConfiguration).execute(showSchema, true, false, true); + EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.DATABASE); + if (showSchema) { + targetTypes.add(TargetType.STDOUT); + } + new SchemaExport().execute(targetTypes, SchemaExport.Action.CREATE, getHibernateProvider().getMetaData()); topiaFiresSupport.firePostCreateSchema(this); } catch (HibernateException eee) { diff --git a/entities/src/main/java/fr/ird/observe/entities/migration/ObserveMigrationEngine.java b/entities/src/main/java/fr/ird/observe/entities/migration/ObserveMigrationEngine.java index ed23e06..adb25a2 100644 --- a/entities/src/main/java/fr/ird/observe/entities/migration/ObserveMigrationEngine.java +++ b/entities/src/main/java/fr/ird/observe/entities/migration/ObserveMigrationEngine.java @@ -34,8 +34,8 @@ import org.nuiton.topia.persistence.util.TopiaUtil; public class ObserveMigrationEngine extends TopiaMigrationEngine { public void createSchemaIfNotExist() { - if (TopiaUtil.isSchemaEmpty(versionConfiguration)) { - TMSVersionHibernateDao.createTMSSchema(versionConfiguration); + if (TopiaUtil.isSchemaEmpty(versionConfiguration, metaData)) { + TMSVersionHibernateDao.createTMSSchema(metaData); } } diff --git a/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractSchemaAction.java b/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractSchemaAction.java index 9d3772e..47737ef 100644 --- a/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractSchemaAction.java +++ b/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/AbstractSchemaAction.java @@ -22,11 +22,23 @@ package org.nuiton.topia.service.sql.batch.actions; * #L% */ +import org.hibernate.boot.Metadata; +import org.hibernate.boot.registry.BootstrapServiceRegistry; +import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; +import org.hibernate.boot.registry.StandardServiceRegistry; +import org.hibernate.boot.registry.StandardServiceRegistryBuilder; +import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.dialect.Dialect; +import org.hibernate.engine.config.spi.ConfigurationService; +import org.hibernate.tool.hbm2ddl.SchemaExport; +import org.hibernate.tool.schema.TargetType; +import org.nuiton.topia.persistence.HibernateAvailableSettings; import java.io.IOException; import java.nio.file.Path; import java.sql.SQLException; +import java.util.EnumSet; +import java.util.Properties; /** * Created on 01/01/16. @@ -57,4 +69,30 @@ public abstract class AbstractSchemaAction<R extends AbstractSchemaRequest> exte } + + protected void generateSqlInFile(Class<? extends Dialect> dialectType, Path sqlScriptFile, SchemaExport.Action action) { + + Metadata hibernateMetadata = getSourcePersistenceContext().getHibernateSupport().getHibernateMetadata(); + + StandardServiceRegistry serviceRegistry = ((MetadataImplementor) hibernateMetadata).getMetadataBuildingOptions().getServiceRegistry(); + + Properties properties = new Properties(); + properties.putAll(serviceRegistry.getService(ConfigurationService.class).getSettings()); + properties.put(HibernateAvailableSettings.DIALECT, dialectType.getName()); + + BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder().build(); + StandardServiceRegistryBuilder ssrBuilder = new StandardServiceRegistryBuilder(bsr); + ssrBuilder.applySettings(properties); + StandardServiceRegistry registry = ssrBuilder.build(); + + try { + new SchemaExport() + .setOutputFile(sqlScriptFile.toFile().getAbsolutePath()) + .setDelimiter(";") + .execute(EnumSet.of(TargetType.SCRIPT), action, hibernateMetadata, registry); + } finally { + StandardServiceRegistryBuilder.destroy(registry); + } + } + } diff --git a/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/CreateSchemaAction.java b/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/CreateSchemaAction.java index 5f87059..c8da770 100644 --- a/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/CreateSchemaAction.java +++ b/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/CreateSchemaAction.java @@ -4,7 +4,7 @@ package org.nuiton.topia.service.sql.batch.actions; * #%L * ObServe :: ToPIA Extension * %% - * Copyright (C) 2008 - 2016 IRD, Code Lutin, Tony Chemit + * Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -22,21 +22,15 @@ package org.nuiton.topia.service.sql.batch.actions; * #L% */ -import com.google.common.collect.ImmutableSet; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; -import org.hibernate.cfg.Configuration; -import org.hibernate.cfg.Environment; import org.hibernate.dialect.Dialect; import org.hibernate.tool.hbm2ddl.SchemaExport; -import org.hibernate.tool.hbm2ddl.Target; import org.nuiton.topia.persistence.TopiaException; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Properties; /** * Created on 01/01/16. @@ -46,9 +40,6 @@ import java.util.Properties; */ public class CreateSchemaAction extends AbstractSchemaAction<CreateSchemaRequest> { - /** Logger */ - private static final Log log = LogFactory.getLog(CreateSchemaAction.class); - public static final String CREATE_SCHEMA_STATEMENT = "CREATE SCHEMA %s;\n"; public CreateSchemaAction(CreateSchemaRequest request, boolean showSql) { @@ -61,25 +52,13 @@ public class CreateSchemaAction extends AbstractSchemaAction<CreateSchemaRequest Path sqlScriptFile = temporaryDirectory.resolve("replicateSchema_" + System.nanoTime() + ".sql"); - Configuration hibernateConfiguration = getSourcePersistenceContext().getHibernateSupport().getHibernateConfiguration(); - - Properties properties = new Properties(); - - properties.put(Environment.DIALECT, dialectType.getName()); - - new SchemaExport(hibernateConfiguration, properties) - .setOutputFile(sqlScriptFile.toFile().getAbsolutePath()) - .setDelimiter(";") - .execute(Target.NONE, SchemaExport.Type.CREATE); + generateSqlInFile(dialectType, sqlScriptFile, SchemaExport.Action.CREATE); String sqlStatements = ""; if (request.isAddSchema()) { - - ImmutableSet<String> schemaNames = getSchemaNames(); - for (String schemaName : schemaNames) { + for (String schemaName : getSchemaNames()) { sqlStatements += String.format(CREATE_SCHEMA_STATEMENT, schemaName); } - } sqlStatements += new String(Files.readAllBytes(sqlScriptFile)); diff --git a/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/DropSchemaAction.java b/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/DropSchemaAction.java index 8153c6e..0ee1dbb 100644 --- a/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/DropSchemaAction.java +++ b/topia-extension/src/main/java/org/nuiton/topia/service/sql/batch/actions/DropSchemaAction.java @@ -4,7 +4,7 @@ package org.nuiton.topia.service.sql.batch.actions; * #%L * ObServe :: ToPIA Extension * %% - * Copyright (C) 2008 - 2016 IRD, Code Lutin, Tony Chemit + * Copyright (C) 2008 - 2016 IRD, Codelutin, Tony Chemit * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as @@ -22,21 +22,15 @@ package org.nuiton.topia.service.sql.batch.actions; * #L% */ -import com.google.common.collect.ImmutableSet; -import org.apache.commons.io.output.WriterOutputStream; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.hibernate.HibernateException; -import org.hibernate.cfg.Configuration; -import org.hibernate.cfg.Environment; import org.hibernate.dialect.Dialect; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.nuiton.topia.persistence.TopiaException; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Properties; /** * Created on 01/01/16. @@ -60,43 +54,29 @@ public class DropSchemaAction extends AbstractSchemaAction<DropSchemaRequest> { try { - Path sqlScriptFile = temporaryDirectory.resolve("replicateSchema_" + System.nanoTime() + ".sql"); + Path sqlScriptFile = temporaryDirectory.resolve("dropSchema_" + System.nanoTime() + ".sql"); - Configuration hibernateConfiguration = getSourcePersistenceContext().getHibernateSupport().getHibernateConfiguration(); + generateSqlInFile(dialectType, sqlScriptFile, SchemaExport.Action.DROP); - Properties properties = new Properties(); - - properties.put(Environment.DIALECT, dialectType.getName()); - - new SchemaExport(hibernateConfiguration, properties) - .setOutputFile(sqlScriptFile.toFile().getAbsolutePath()) - .setDelimiter(";") - .drop(false, false); - - WriterOutputStream out = new WriterOutputStream(writer); - Files.copy(sqlScriptFile, out); - out.flush(); - - String sqlContent = new String(Files.readAllBytes(sqlScriptFile)); + String sqlStatements = new String(Files.readAllBytes(sqlScriptFile), StandardCharsets.UTF_8); Files.delete(sqlScriptFile); if (request.isDropSchema()) { - - ImmutableSet<String> schemaNames = getSchemaNames(); - for (String schemaName : schemaNames) { - sqlContent += String.format(DROP_SCHEMA_STATEMENT, schemaName); + for (String schemaName : getSchemaNames()) { + sqlStatements += String.format(DROP_SCHEMA_STATEMENT, schemaName); } } if (showSql) { if (log.isInfoEnabled()) { - log.info(sqlContent); + log.info(sqlStatements); } } - return sqlContent; + return sqlStatements; } catch (HibernateException eee) { - throw new TopiaException(String.format("Could not create schema for reason: %s", eee.getMessage()), eee); + throw new TopiaException(String.format("Could not drop schema for reason: %s", eee.getMessage()), eee); } } + } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.