Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe
Commits:
-
bc8730be
by Tony Chemit at 2022-08-22T23:20:37+02:00
-
62581c1b
by Tony Chemit at 2022-08-22T23:20:37+02:00
-
5b66ab55
by Tony Chemit at 2022-08-22T23:20:37+02:00
-
177b65d0
by Tony Chemit at 2022-08-22T23:20:37+02:00
-
1696b931
by Tony Chemit at 2022-08-22T23:20:37+02:00
11 changed files:
- core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlModel.json
- pom.xml
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/BeanTopiaConfiguration.java
- − toolkit/persistence/src/main/java/org/nuiton/topia/persistence/HibernateTopiaMigrationService.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfiguration.java
- toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java
- toolkit/persistence/src/main/java/org/nuiton/topia/service/sql/model/TopiaEntitySqlModel.java
- toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/GenerateTckArchive.java
- toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java
- toolkit/templates/src/main/java/org/nuiton/topia/templates/sql/EntitySqlDescriptorGenerator.java
Changes:
| 1 | 1 | {
|
| 2 | + "schemaNames": [
|
|
| 3 | + "common",
|
|
| 4 | + "ll_common",
|
|
| 5 | + "ll_landing",
|
|
| 6 | + "ll_logbook",
|
|
| 7 | + "ll_observation",
|
|
| 8 | + "ps_common",
|
|
| 9 | + "ps_landing",
|
|
| 10 | + "ps_localmarket",
|
|
| 11 | + "ps_logbook",
|
|
| 12 | + "ps_observation"
|
|
| 13 | + ],
|
|
| 2 | 14 | "replicationOrderForStandalone": [
|
| 3 | 15 | "fr.ird.observe.entities.LastUpdateDate",
|
| 4 | 16 | "fr.ird.observe.entities.referential.common.Country",
|
| ... | ... | @@ -23,7 +23,7 @@ |
| 23 | 23 | <parent>
|
| 24 | 24 | <groupId>io.ultreia.maven</groupId>
|
| 25 | 25 | <artifactId>pom</artifactId>
|
| 26 | - <version>2022.80</version>
|
|
| 26 | + <version>2022.82</version>
|
|
| 27 | 27 | </parent>
|
| 28 | 28 | <groupId>fr.ird.observe</groupId>
|
| 29 | 29 | <artifactId>ird-observe</artifactId>
|
| ... | ... | @@ -96,6 +96,7 @@ |
| 96 | 96 | <persistence.model.version>9.0</persistence.model.version>
|
| 97 | 97 | <!--persistence previous model version used for tck migration-->
|
| 98 | 98 | <persistence.previous.model.version>8.0</persistence.previous.model.version>
|
| 99 | + <plugin.version.site>4.0.0-M1</plugin.version.site>
|
|
| 99 | 100 | <tck.filename>tck-v${persistence.model.version}.zip</tck.filename>
|
| 100 | 101 | <tck.updated.filename>updated-${tck.filename}</tck.updated.filename>
|
| 101 | 102 | <tck.remote.path>/var/www/html/private/ird-observe/tck</tck.remote.path>
|
| ... | ... | @@ -238,11 +238,6 @@ public class BeanTopiaConfiguration extends BeanJdbcConfiguration implements Top |
| 238 | 238 | throw new TopiaMisconfigurationException("you must provide JDBC connection driver", this);
|
| 239 | 239 | }
|
| 240 | 240 | Map<String, String> hibernateExtraConfiguration = getHibernateExtraConfiguration();
|
| 241 | - if (hibernateExtraConfiguration.containsKey(AvailableSettings.HBM2DDL_AUTO)) {
|
|
| 242 | - throw new TopiaMisconfigurationException("you must not use " + AvailableSettings.HBM2DDL_AUTO
|
|
| 243 | - + " configuration directive, if you want Hibernate to update the schema, use " +
|
|
| 244 | - HibernateTopiaMigrationService.class.getName(), this);
|
|
| 245 | - }
|
|
| 246 | 241 | for (Map.Entry<String, String> entry : hibernateExtraConfiguration.entrySet()) {
|
| 247 | 242 | String key = entry.getKey();
|
| 248 | 243 | boolean entryIsOk = (key.startsWith("hibernate.") || key.startsWith("javax.persistence."))
|
| 1 | -package org.nuiton.topia.persistence;
|
|
| 2 | - |
|
| 3 | -/*
|
|
| 4 | - * #%L
|
|
| 5 | - * ObServe Toolkit :: Persistence
|
|
| 6 | - * %%
|
|
| 7 | - * Copyright (C) 2008 - 2022 IRD, Ultreia.io
|
|
| 8 | - * %%
|
|
| 9 | - * This program is free software: you can redistribute it and/or modify
|
|
| 10 | - * it under the terms of the GNU General Public License as
|
|
| 11 | - * published by the Free Software Foundation, either version 3 of the
|
|
| 12 | - * License, or (at your option) any later version.
|
|
| 13 | - *
|
|
| 14 | - * This program is distributed in the hope that it will be useful,
|
|
| 15 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
| 16 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
| 17 | - * GNU General Public License for more details.
|
|
| 18 | - *
|
|
| 19 | - * You should have received a copy of the GNU General Public
|
|
| 20 | - * License along with this program. If not, see
|
|
| 21 | - * <http://www.gnu.org/licenses/gpl-3.0.html>.
|
|
| 22 | - * #L%
|
|
| 23 | - */
|
|
| 24 | - |
|
| 25 | - |
|
| 26 | -import java.util.Map;
|
|
| 27 | - |
|
| 28 | -public class HibernateTopiaMigrationService implements TopiaMigrationService {
|
|
| 29 | - |
|
| 30 | - protected TopiaApplicationContext topiaApplicationContext;
|
|
| 31 | - |
|
| 32 | - @Override
|
|
| 33 | - public void initTopiaService(TopiaApplicationContext<?> topiaApplicationContext, Map<String, String> serviceConfiguration) {
|
|
| 34 | - this.topiaApplicationContext = topiaApplicationContext;
|
|
| 35 | - }
|
|
| 36 | - |
|
| 37 | - @Override
|
|
| 38 | - public String getSchemaVersion() {
|
|
| 39 | - throw new UnsupportedOperationException();
|
|
| 40 | - }
|
|
| 41 | - |
|
| 42 | - @Override
|
|
| 43 | - public void initOnCreateSchema() {
|
|
| 44 | - // do nothing
|
|
| 45 | - }
|
|
| 46 | - |
|
| 47 | - @Override
|
|
| 48 | - public void runSchemaMigration() {
|
|
| 49 | - topiaApplicationContext.updateSchema();
|
|
| 50 | - }
|
|
| 51 | - |
|
| 52 | - @Override
|
|
| 53 | - public void close() {
|
|
| 54 | - |
|
| 55 | - }
|
|
| 56 | -} |
| ... | ... | @@ -25,13 +25,14 @@ package org.nuiton.topia.persistence; |
| 25 | 25 | import fr.ird.observe.entities.data.RootOpenableEntity;
|
| 26 | 26 | import fr.ird.observe.spi.referential.MissingReferentialRequest;
|
| 27 | 27 | import fr.ird.observe.spi.referential.MissingReferentialResult;
|
| 28 | +import fr.ird.observe.spi.referential.ReferentialIds;
|
|
| 28 | 29 | import fr.ird.observe.spi.service.ServiceContext;
|
| 29 | 30 | import io.ultreia.java4all.util.sql.SqlScript;
|
| 30 | -import io.ultreia.java4all.util.sql.SqlScriptConsumer;
|
|
| 31 | 31 | import org.nuiton.topia.persistence.internal.AbstractTopiaApplicationContext;
|
| 32 | 32 | import org.nuiton.topia.persistence.jdbc.JdbcHelper;
|
| 33 | 33 | import org.nuiton.topia.persistence.jdbc.JdbcHelperH2;
|
| 34 | 34 | import org.nuiton.topia.persistence.jdbc.JdbcHelperPostgres;
|
| 35 | +import org.nuiton.topia.persistence.security.SecurityScriptHelper;
|
|
| 35 | 36 | import org.nuiton.topia.persistence.support.TopiaServiceSupport;
|
| 36 | 37 | import org.nuiton.topia.service.sql.TopiaEntitySqlModelResource;
|
| 37 | 38 | import org.nuiton.topia.service.sql.TopiaSqlService;
|
| ... | ... | @@ -100,14 +101,20 @@ public interface TopiaApplicationContext<K extends TopiaPersistenceContext> exte |
| 100 | 101 | return getConfiguration().getTopiaIdFactory();
|
| 101 | 102 | }
|
| 102 | 103 | |
| 104 | + TopiaIdFactoryForBulkSupport newIdFactoryForBulk(long timestamp);
|
|
| 105 | + |
|
| 106 | + ReferentialIds getReferentialIds(Class<? extends TopiaEntity> dataType, String... ids);
|
|
| 107 | + |
|
| 108 | + default SecurityScriptHelper newSecurityScriptHelper() {
|
|
| 109 | + return new SecurityScriptHelper(this);
|
|
| 110 | + }
|
|
| 111 | + |
|
| 103 | 112 | TopiaSqlService getSqlService();
|
| 104 | 113 | |
| 105 | 114 | TopiaEntitySqlBlobIdsIterator newBlobIdsIterator(Path blobIdsPath);
|
| 106 | 115 | |
| 107 | 116 | void executeSqlStatements(SqlScript content);
|
| 108 | 117 | |
| 109 | - void executeSqlStatements(SqlScriptConsumer content);
|
|
| 110 | - |
|
| 111 | 118 | TopiaMigrationService getMigrationService();
|
| 112 | 119 | |
| 113 | 120 | default void migrate() {
|
| ... | ... | @@ -140,16 +147,10 @@ public interface TopiaApplicationContext<K extends TopiaPersistenceContext> exte |
| 140 | 147 | * @return all schema names used by persistent entities.
|
| 141 | 148 | * @since 3.0.1
|
| 142 | 149 | */
|
| 143 | - Set<String> getSchemaNames();
|
|
| 150 | + List<String> getSchemaNames();
|
|
| 144 | 151 | |
| 145 | 152 | void createSchema();
|
| 146 | 153 | |
| 147 | - void showCreateSchema();
|
|
| 148 | - |
|
| 149 | - void updateSchema();
|
|
| 150 | - |
|
| 151 | - void dropSchema();
|
|
| 152 | - |
|
| 153 | 154 | /**
|
| 154 | 155 | * @return true is the application context is opened (ie not yet {@link #isClosed()})
|
| 155 | 156 | */
|
| ... | ... | @@ -75,7 +75,7 @@ public interface TopiaConfiguration extends JdbcConfiguration { |
| 75 | 75 | * as keys of the map.
|
| 76 | 76 | * <p>
|
| 77 | 77 | * You <strong>MUST NOT</strong> pass {@link HibernateAvailableSettings#HBM2DDL_AUTO} since
|
| 78 | - * ToPIA will use validate. If you want use it, have a look at {@link HibernateTopiaMigrationService}
|
|
| 78 | + * ToPIA will use validate.
|
|
| 79 | 79 | *
|
| 80 | 80 | * @return a map containing hibernate configuration directives that ToPIA will use when it
|
| 81 | 81 | * will instantiate Hibernate.
|
| ... | ... | @@ -34,24 +34,17 @@ import fr.ird.observe.spi.referential.synchro.SynchronizeTaskType; |
| 34 | 34 | import fr.ird.observe.spi.service.ServiceContext;
|
| 35 | 35 | import io.ultreia.java4all.util.TimeLog;
|
| 36 | 36 | import io.ultreia.java4all.util.sql.SqlScript;
|
| 37 | -import io.ultreia.java4all.util.sql.SqlScriptConsumer;
|
|
| 38 | 37 | import io.ultreia.java4all.util.sql.SqlScriptReader;
|
| 39 | 38 | import org.apache.logging.log4j.LogManager;
|
| 40 | 39 | import org.apache.logging.log4j.Logger;
|
| 41 | -import org.hibernate.HibernateException;
|
|
| 42 | 40 | import org.hibernate.SessionFactory;
|
| 43 | 41 | import org.hibernate.boot.Metadata;
|
| 44 | 42 | import org.hibernate.cfg.AvailableSettings;
|
| 45 | 43 | import org.hibernate.cfg.Configuration;
|
| 46 | -import org.hibernate.tool.hbm2ddl.SchemaExport;
|
|
| 47 | -import org.hibernate.tool.hbm2ddl.SchemaUpdate;
|
|
| 48 | -import org.hibernate.tool.schema.TargetType;
|
|
| 49 | 44 | import org.nuiton.topia.persistence.TopiaApplicationContext;
|
| 50 | 45 | import org.nuiton.topia.persistence.TopiaConfiguration;
|
| 51 | 46 | import org.nuiton.topia.persistence.TopiaDao;
|
| 52 | -import org.nuiton.topia.persistence.TopiaEntity;
|
|
| 53 | 47 | import org.nuiton.topia.persistence.TopiaException;
|
| 54 | -import org.nuiton.topia.persistence.TopiaIdFactoryForBulkSupport;
|
|
| 55 | 48 | import org.nuiton.topia.persistence.TopiaMigrationService;
|
| 56 | 49 | import org.nuiton.topia.persistence.TopiaPersistenceContext;
|
| 57 | 50 | import org.nuiton.topia.persistence.TopiaService;
|
| ... | ... | @@ -59,7 +52,6 @@ import org.nuiton.topia.persistence.internal.support.TopiaServiceSupportImpl; |
| 59 | 52 | import org.nuiton.topia.persistence.jdbc.JdbcHelper;
|
| 60 | 53 | import org.nuiton.topia.persistence.jdbc.JdbcHelperH2;
|
| 61 | 54 | import org.nuiton.topia.persistence.jdbc.JdbcHelperPostgres;
|
| 62 | -import org.nuiton.topia.persistence.security.SecurityScriptHelper;
|
|
| 63 | 55 | import org.nuiton.topia.persistence.support.TopiaServiceSupport;
|
| 64 | 56 | import org.nuiton.topia.persistence.util.TopiaUtil;
|
| 65 | 57 | import org.nuiton.topia.service.sql.TopiaSqlService;
|
| ... | ... | @@ -69,7 +61,6 @@ import java.io.File; |
| 69 | 61 | import java.nio.file.Path;
|
| 70 | 62 | import java.util.Arrays;
|
| 71 | 63 | import java.util.Collections;
|
| 72 | -import java.util.EnumSet;
|
|
| 73 | 64 | import java.util.List;
|
| 74 | 65 | import java.util.Map;
|
| 75 | 66 | import java.util.Objects;
|
| ... | ... | @@ -136,17 +127,11 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence |
| 136 | 127 | |
| 137 | 128 | protected abstract Map<String, Supplier<TopiaDao<?>>> createDaoMapping();
|
| 138 | 129 | |
| 139 | - public abstract TopiaIdFactoryForBulkSupport newIdFactoryForBulk(long timestamp);
|
|
| 140 | - |
|
| 141 | 130 | @Override
|
| 142 | 131 | public final String getAuthenticationToken() {
|
| 143 | 132 | return authenticationToken;
|
| 144 | 133 | }
|
| 145 | 134 | |
| 146 | - public String getPackageName() {
|
|
| 147 | - return getClass().getPackageName();
|
|
| 148 | - }
|
|
| 149 | - |
|
| 150 | 135 | protected void init() {
|
| 151 | 136 | |
| 152 | 137 | configuration.check();
|
| ... | ... | @@ -218,12 +203,6 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence |
| 218 | 203 | }
|
| 219 | 204 | }
|
| 220 | 205 | |
| 221 | - public abstract ReferentialIds getReferentialIds(Class<? extends TopiaEntity> dataType, String... ids);
|
|
| 222 | - |
|
| 223 | - public final SecurityScriptHelper newSecurityScriptHelper() {
|
|
| 224 | - return new SecurityScriptHelper(this);
|
|
| 225 | - }
|
|
| 226 | - |
|
| 227 | 206 | @Override
|
| 228 | 207 | public final TopiaSqlService getSqlService() {
|
| 229 | 208 | return getServices(TopiaSqlService.class).get(SQL_SERVICE_NAME);
|
| ... | ... | @@ -296,42 +275,6 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence |
| 296 | 275 | }
|
| 297 | 276 | }
|
| 298 | 277 | |
| 299 | - @Override
|
|
| 300 | - public final void showCreateSchema() {
|
|
| 301 | - try {
|
|
| 302 | - new SchemaExport().execute(EnumSet.of(TargetType.DATABASE, TargetType.STDOUT), SchemaExport.Action.CREATE, getHibernateProvider().getMetaData());
|
|
| 303 | - } catch (HibernateException eee) {
|
|
| 304 | - throw new TopiaException(String.format("Could not show create schema for reason: %s", eee.getMessage()), eee);
|
|
| 305 | - }
|
|
| 306 | - |
|
| 307 | - }
|
|
| 308 | - |
|
| 309 | - @Override
|
|
| 310 | - public final void updateSchema() {
|
|
| 311 | - try {
|
|
| 312 | - EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.DATABASE);
|
|
| 313 | - if (log.isDebugEnabled()) {
|
|
| 314 | - targetTypes.add(TargetType.STDOUT);
|
|
| 315 | - }
|
|
| 316 | - new SchemaUpdate().execute(targetTypes, getHibernateProvider().getMetaData());
|
|
| 317 | - } catch (HibernateException eee) {
|
|
| 318 | - throw new TopiaException(String.format("Could not update schema for reason: %s", eee.getMessage()), eee);
|
|
| 319 | - }
|
|
| 320 | - }
|
|
| 321 | - |
|
| 322 | - @Override
|
|
| 323 | - public final void dropSchema() {
|
|
| 324 | - try {
|
|
| 325 | - EnumSet<TargetType> targetTypes = EnumSet.of(TargetType.DATABASE);
|
|
| 326 | - if (log.isDebugEnabled()) {
|
|
| 327 | - targetTypes.add(TargetType.STDOUT);
|
|
| 328 | - }
|
|
| 329 | - new SchemaExport().execute(targetTypes, SchemaExport.Action.DROP, getHibernateProvider().getMetaData());
|
|
| 330 | - } catch (HibernateException eee) {
|
|
| 331 | - throw new TopiaException(String.format("Could not drop schema for reason: %s", eee.getMessage()), eee);
|
|
| 332 | - }
|
|
| 333 | - }
|
|
| 334 | - |
|
| 335 | 278 | @Override
|
| 336 | 279 | public void close() {
|
| 337 | 280 | |
| ... | ... | @@ -379,7 +322,7 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence |
| 379 | 322 | }
|
| 380 | 323 | |
| 381 | 324 | @Override
|
| 382 | - public final Set<String> getSchemaNames() {
|
|
| 325 | + public final List<String> getSchemaNames() {
|
|
| 383 | 326 | return getSqlService().getModel().getSchemaNames();
|
| 384 | 327 | }
|
| 385 | 328 | |
| ... | ... | @@ -454,19 +397,7 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence |
| 454 | 397 | SqlScriptReader scriptLocation = content.getLocation();
|
| 455 | 398 | try (K persistenceContext = newPersistenceContext()) {
|
| 456 | 399 | persistenceContext.executeSqlScript(scriptLocation);
|
| 457 | - persistenceContext.commit();
|
|
| 458 | - }
|
|
| 459 | - } catch (RuntimeException e) {
|
|
| 460 | - throw e;
|
|
| 461 | - } catch (Exception e) {
|
|
| 462 | - throw new TopiaException(e);
|
|
| 463 | - }
|
|
| 464 | - }
|
|
| 465 | - |
|
| 466 | - public final void executeSqlStatements(SqlScriptConsumer content) {
|
|
| 467 | - try {
|
|
| 468 | - try (K persistenceContext = newPersistenceContext()) {
|
|
| 469 | - persistenceContext.executeSqlScript(content);
|
|
| 400 | + //FIXME-2022-08-22 this is a heart-break to force a commit, review this
|
|
| 470 | 401 | persistenceContext.commit();
|
| 471 | 402 | }
|
| 472 | 403 | } catch (RuntimeException e) {
|
| ... | ... | @@ -511,8 +442,7 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence |
| 511 | 442 | return null;
|
| 512 | 443 | }
|
| 513 | 444 | OneSideSqlRequest sqlRequest = OneSideSqlRequest.builder().addTasks(SynchronizeTaskType.ADD, missingIds).build();
|
| 514 | - OneSideSqlResult sqlResult = newOneSideSqlResultBuilder(context, context.now())
|
|
| 515 | - .build(sqlRequest);
|
|
| 445 | + OneSideSqlResult sqlResult = newOneSideSqlResultBuilder(context, context.now()).build(sqlRequest);
|
|
| 516 | 446 | |
| 517 | 447 | Path scriptPath = temporaryDirectoryRoot.resolve(String.format("%s-%d.sql", getClass().getSimpleName(), System.nanoTime()));
|
| 518 | 448 | log.info(String.format("Generate script at: %s", scriptPath));
|
| ... | ... | @@ -30,8 +30,6 @@ import java.util.LinkedList; |
| 30 | 30 | import java.util.List;
|
| 31 | 31 | import java.util.Map;
|
| 32 | 32 | import java.util.Objects;
|
| 33 | -import java.util.Set;
|
|
| 34 | -import java.util.TreeSet;
|
|
| 35 | 33 | |
| 36 | 34 | /**
|
| 37 | 35 | * Describes the sql metadata model.
|
| ... | ... | @@ -43,6 +41,10 @@ import java.util.TreeSet; |
| 43 | 41 | */
|
| 44 | 42 | public class TopiaEntitySqlModel {
|
| 45 | 43 | |
| 44 | + /**
|
|
| 45 | + * All schema names used.
|
|
| 46 | + */
|
|
| 47 | + private final List<String> schemaNames;
|
|
| 46 | 48 | /**
|
| 47 | 49 | * Replication order for all entities not managed by any entry point.
|
| 48 | 50 | */
|
| ... | ... | @@ -52,7 +54,8 @@ public class TopiaEntitySqlModel { |
| 52 | 54 | */
|
| 53 | 55 | private final Map<String, TopiaEntitySqlDescriptor> descriptors;
|
| 54 | 56 | |
| 55 | - public TopiaEntitySqlModel(List<String> replicationOrderForStandalone, Map<String, TopiaEntitySqlDescriptor> descriptors) {
|
|
| 57 | + public TopiaEntitySqlModel(List<String> schemaNames, List<String> replicationOrderForStandalone, Map<String, TopiaEntitySqlDescriptor> descriptors) {
|
|
| 58 | + this.schemaNames = Collections.unmodifiableList(Objects.requireNonNull(schemaNames));
|
|
| 56 | 59 | this.replicationOrderForStandalone = Objects.requireNonNull(replicationOrderForStandalone);
|
| 57 | 60 | this.descriptors = Objects.requireNonNull(descriptors);
|
| 58 | 61 | }
|
| ... | ... | @@ -81,13 +84,8 @@ public class TopiaEntitySqlModel { |
| 81 | 84 | return replicationOrderForStandalone;
|
| 82 | 85 | }
|
| 83 | 86 | |
| 84 | - public Set<String> getSchemaNames() {
|
|
| 85 | - Set<String> result = new TreeSet<>();
|
|
| 86 | - for (TopiaEntitySqlDescriptor entitySqlDescriptor : getDescriptors().values()) {
|
|
| 87 | - String schema = entitySqlDescriptor.getTable().getSchemaName();
|
|
| 88 | - result.add(schema);
|
|
| 89 | - }
|
|
| 90 | - return Collections.unmodifiableSet(result);
|
|
| 87 | + public List<String> getSchemaNames() {
|
|
| 88 | + return schemaNames;
|
|
| 91 | 89 | }
|
| 92 | 90 | |
| 93 | 91 | protected Map<String, TopiaEntitySqlDescriptor> getDescriptors() {
|
| ... | ... | @@ -30,7 +30,6 @@ import fr.ird.observe.toolkit.maven.plugin.PersistenceRunner; |
| 30 | 30 | import io.ultreia.java4all.util.Version;
|
| 31 | 31 | import io.ultreia.java4all.util.Zips;
|
| 32 | 32 | import io.ultreia.java4all.util.sql.SqlScript;
|
| 33 | -import io.ultreia.java4all.util.sql.SqlScriptConsumer;
|
|
| 34 | 33 | import io.ultreia.java4all.util.sql.SqlScriptWriter;
|
| 35 | 34 | import org.nuiton.topia.persistence.TopiaApplicationContext;
|
| 36 | 35 | import org.nuiton.topia.persistence.jdbc.JdbcHelperH2;
|
| ... | ... | @@ -123,14 +122,14 @@ public class GenerateTckArchive extends PersistenceRunner { |
| 123 | 122 | |
| 124 | 123 | log.info(String.format("Load referential database for version %s", previousModelVersion));
|
| 125 | 124 | |
| 126 | - applicationContext.executeSqlStatements(SqlScriptConsumer.of(SqlScript.of(sources.resolve(previousModelVersion.getVersion()).resolve(DatabaseName.referential.name() + ".sql.gz"))));
|
|
| 125 | + applicationContext.executeSqlStatements(SqlScript.of(sources.resolve(previousModelVersion.getVersion()).resolve(DatabaseName.referential.name() + ".sql.gz")));
|
|
| 127 | 126 | |
| 128 | 127 | log.info(String.format("Migrate from version %s to %s", previousModelVersion, modelVersion));
|
| 129 | 128 | applicationContext.migrate();
|
| 130 | 129 | |
| 131 | 130 | log.info(String.format("Load data script for version %s", modelVersion));
|
| 132 | 131 | Path dataPath = exploded.resolve(modelVersion.getVersion()).resolve(DatabaseName.data.name() + ".sql");
|
| 133 | - applicationContext.executeSqlStatements(SqlScriptConsumer.builder(dataPath).build());
|
|
| 132 | + applicationContext.executeSqlStatements(SqlScript.of(dataPath));
|
|
| 134 | 133 | |
| 135 | 134 | log.info(String.format("Do backup to %s", backupFile));
|
| 136 | 135 | backupSane(applicationContext, backupFile, false);
|
| ... | ... | @@ -27,7 +27,6 @@ import fr.ird.observe.test.DatabaseName; |
| 27 | 27 | import fr.ird.observe.toolkit.maven.plugin.PersistenceRunner;
|
| 28 | 28 | import io.ultreia.java4all.util.Version;
|
| 29 | 29 | import io.ultreia.java4all.util.sql.SqlScript;
|
| 30 | -import io.ultreia.java4all.util.sql.SqlScriptConsumer;
|
|
| 31 | 30 | import org.nuiton.topia.persistence.TopiaApplicationContext;
|
| 32 | 31 | |
| 33 | 32 | import java.nio.file.Path;
|
| ... | ... | @@ -81,7 +80,7 @@ public class MigrateTckDatabases extends PersistenceRunner { |
| 81 | 80 | try (TopiaApplicationContext<?> applicationContext = createTopiaApplicationContext(configuration)) {
|
| 82 | 81 | |
| 83 | 82 | log.info(String.format("[%S] migrate from version %s to %s", tckDbName, previousModelVersion, modelVersion));
|
| 84 | - applicationContext.executeSqlStatements(SqlScriptConsumer.of(SqlScript.of(dbPath.resolve(sqlFilename))));
|
|
| 83 | + applicationContext.executeSqlStatements(SqlScript.of(dbPath.resolve(sqlFilename)));
|
|
| 85 | 84 | applicationContext.migrate();
|
| 86 | 85 | |
| 87 | 86 | log.info(String.format("[%S] backup to %s", tckDbName, backupFile));
|
| ... | ... | @@ -97,7 +96,7 @@ public class MigrateTckDatabases extends PersistenceRunner { |
| 97 | 96 | |
| 98 | 97 | log.info(String.format("[%S] Check - loading new database with version %s", tckDbName, modelVersion));
|
| 99 | 98 | |
| 100 | - applicationContext.executeSqlStatements(SqlScriptConsumer.of(SqlScript.of(backupFile)));
|
|
| 99 | + applicationContext.executeSqlStatements(SqlScript.of(backupFile));
|
|
| 101 | 100 | Path checkBackupFile = getTemporaryPath().resolve("check-backup-" + backupFile.toFile().getName().replace(".sql.gz", "-check.sql"));
|
| 102 | 101 | applicationContext.backup(checkBackupFile.toFile(), false);
|
| 103 | 102 | log.info(String.format("[%S] Check - backup to %s", tckDbName, checkBackupFile));
|
| ... | ... | @@ -394,7 +394,12 @@ public class EntitySqlDescriptorGenerator extends TopiaMetadataModelGeneratorSup |
| 394 | 394 | modelCopyPlan = new TopiaEntitySqlCopyPlanModel(entryPointCopyPlans, standaloneCopyPlan);
|
| 395 | 395 | modelReplicatePlan = new TopiaEntitySqlReplicatePlanModel(replicatePlans);
|
| 396 | 396 | modelDeletePlan = new TopiaEntitySqlDeletePlanModel(typeDeletePlans);
|
| 397 | - sqlModel = new TopiaEntitySqlModel(replicationOrderWithStandalone, descriptors);
|
|
| 397 | + Set<String> schemaNames = new TreeSet<>();
|
|
| 398 | + for (TopiaEntitySqlDescriptor entitySqlDescriptor : descriptors.values()) {
|
|
| 399 | + String schema = entitySqlDescriptor.getTable().getSchemaName();
|
|
| 400 | + schemaNames.add(schema);
|
|
| 401 | + }
|
|
| 402 | + sqlModel = new TopiaEntitySqlModel(List.copyOf(schemaNames), replicationOrderWithStandalone, descriptors);
|
|
| 398 | 403 | LinkedHashMap<Class<? extends ReferentialDto>, List<String>> referentialBusinessProperties = new LinkedHashMap<>();
|
| 399 | 404 | for (String entityName : replicationOrderWithStandalone) {
|
| 400 | 405 | if (!entityName.contains(".referential.")) {
|