Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe

Commits:

11 changed files:

Changes:

  • core/persistence/java/src/main/resources/META-INF/persistence/Observe/TopiaEntitySqlModel.json
    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",
    

  • pom.xml
    ... ... @@ -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>
    

  • toolkit/persistence/src/main/java/org/nuiton/topia/persistence/BeanTopiaConfiguration.java
    ... ... @@ -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."))
    

  • toolkit/persistence/src/main/java/org/nuiton/topia/persistence/HibernateTopiaMigrationService.java deleted
    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
    -}

  • toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java
    ... ... @@ -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
          */
    

  • toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaConfiguration.java
    ... ... @@ -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.
    

  • toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java
    ... ... @@ -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));
    

  • toolkit/persistence/src/main/java/org/nuiton/topia/service/sql/model/TopiaEntitySqlModel.java
    ... ... @@ -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() {
    

  • toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/GenerateTckArchive.java
    ... ... @@ -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);
    

  • toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java
    ... ... @@ -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));
    

  • toolkit/templates/src/main/java/org/nuiton/topia/templates/sql/EntitySqlDescriptorGenerator.java
    ... ... @@ -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.")) {