This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 22aa205b2ad54e7bb850844a48c5dcdc2d0a1097 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Jan 9 08:41:46 2016 +0100 Ne plus utiliser l'ancien moteur de réplication de topia --- .../fr/ird/observe/db/ObserveSwingDataSource.java | 5 + .../fr/ird/observe/ui/admin/AdminTabUIHandler.java | 6 +- .../observe/ui/admin/save/SaveLocalUIHandler.java | 6 +- .../ird/observe/ui/storage/StorageUIHandler.java | 13 +- .../fr/ird/observe/ui/storage/StorageUIModel.java | 5 +- .../DataSourceDumpProducerServiceController.java | 29 --- observe-entities/pom.xml | 4 - .../observe/ObserveTopiaApplicationContext.java | 52 ++-- .../observe/ObserveTopiaConfigurationFactory.java | 2 - .../service/DataSourceDumpProducerService.java | 41 ---- .../services/service/SqlScriptProducerService.java | 6 + observe-services-topia/pom.xml | 4 - .../ird/observe/services/ObserveServiceTopia.java | 261 ++++++++------------- .../DataSourceDumpProducerServiceTopia.java | 150 ------------ .../services/service/DataSourceServiceTopia.java | 88 +++---- .../service/SqlScriptProducerServiceTopia.java | 18 ++ .../DataSourceDumpProducerServiceTopiaTest.java | 74 ------ .../services/service/MigrateTestsDatabases.java | 2 +- pom.xml | 6 - 19 files changed, 203 insertions(+), 569 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java index 738ede9..d8bdc53 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/db/ObserveSwingDataSource.java @@ -32,6 +32,7 @@ import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; import fr.ird.observe.services.service.ObserveReferentialCache; import fr.ird.observe.services.service.ReferentialService; +import fr.ird.observe.services.service.SqlScriptProducerService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractSerializableBean; @@ -284,6 +285,10 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements return connection != null; } + public SqlScriptProducerService newSqlScriptProducerService() { + return newService(SqlScriptProducerService.class); + } + public <S extends ObserveService> S newService(Class<S> serviceType) { ObserveServiceInitializer observeServiceInitializer = getObserveServiceInitializer(); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java index ac8bd12..9c2a7fa 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/AdminTabUIHandler.java @@ -27,10 +27,10 @@ import fr.ird.observe.ObserveSwingApplicationContext; import fr.ird.observe.db.ObserveSwingDataSource; import fr.ird.observe.services.dto.ImportDataDto; import fr.ird.observe.services.service.BabModelVersionException; -import fr.ird.observe.services.service.DataSourceDumpProducerService; import fr.ird.observe.services.service.DataSourceService; import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; +import fr.ird.observe.services.service.SqlScriptProducerService; import fr.ird.observe.ui.DecoratorService; import fr.ird.observe.ui.admin.config.SelectDataUI; import fr.ird.observe.ui.admin.resume.ShowResumeUI; @@ -124,12 +124,12 @@ public class AdminTabUIHandler { openSource(source); - DataSourceDumpProducerService dataSourceDumpProducerService = source.newService(DataSourceDumpProducerService.class); + SqlScriptProducerService sqlScriptProducerService = source.newSqlScriptProducerService(); // on replique les données specifiees ImmutableSet<String> dataIds = ImmutableSet.<String>copyOf(tripIds); - byte[] dataDump = dataSourceDumpProducerService.getDataDump(dataIds); + byte[] dataDump = sqlScriptProducerService.getDataDump(dataIds); source.close(); diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/save/SaveLocalUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/save/SaveLocalUIHandler.java index 68944d6..6bef01e 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/save/SaveLocalUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/save/SaveLocalUIHandler.java @@ -22,7 +22,8 @@ package fr.ird.observe.ui.admin.save; import fr.ird.observe.db.ObserveSwingDataSource; -import fr.ird.observe.services.service.DataSourceDumpProducerService; +import fr.ird.observe.services.service.SqlScriptProducerRequest; +import fr.ird.observe.services.service.SqlScriptProducerService; import fr.ird.observe.ui.UIHelper; import fr.ird.observe.ui.admin.AdminStep; import fr.ird.observe.ui.admin.AdminTabUIHandler; @@ -160,8 +161,7 @@ public class SaveLocalUIHandler extends AdminTabUIHandler { // on effectue une sauvegarde de la base locale File backupFile = stepModel.getBackupFile(); - DataSourceDumpProducerService dumpService = source.newService(DataSourceDumpProducerService.class); - + SqlScriptProducerService dumpService = source.newSqlScriptProducerService(); byte[] dump = dumpService.getAllDataDump(); try (FileOutputStream outputStream = new FileOutputStream(backupFile)) { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java index 8f253a7..1c8769d 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIHandler.java @@ -44,9 +44,10 @@ import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.ObserveDbUserDto; import fr.ird.observe.services.service.BabModelVersionException; -import fr.ird.observe.services.service.DataSourceDumpProducerService; import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; +import fr.ird.observe.services.service.SqlScriptProducerRequest; +import fr.ird.observe.services.service.SqlScriptProducerService; import fr.ird.observe.ui.DecoratorService; import fr.ird.observe.ui.ObserveMainUI; import fr.ird.observe.ui.UIHelper; @@ -422,7 +423,7 @@ public class StorageUIHandler { log.debug(">>> do backup with " + localDataSource + " in " + f); } try { - DataSourceDumpProducerService dumpProducerService = localDataSource.newService(DataSourceDumpProducerService.class); + SqlScriptProducerService dumpProducerService = localDataSource.newSqlScriptProducerService(); backupLocalDatabase(dumpProducerService, f); } catch (Exception e) { ErrorDialogUI.showError(e); @@ -528,7 +529,7 @@ public class StorageUIHandler { " in " + f); } try { - DataSourceDumpProducerService dumpProducerService = observeContext.newService(DataSourceDumpProducerService.class); + SqlScriptProducerService dumpProducerService = observeContext.newService(SqlScriptProducerService.class); backupLocalDatabase(dumpProducerService, f); config.setInitialDumpExist(true); } catch (Exception e) { @@ -599,10 +600,10 @@ public class StorageUIHandler { /** * Effectue une sauvegarde de la base locale vers le fichier choisi. - * @param dumpProducerService le service de dump + * @param dumpProducerService le service de dump * @param dst le fichier de sauvegarde */ - public void backupLocalDatabase(DataSourceDumpProducerService dumpProducerService, File dst) { + public void backupLocalDatabase(SqlScriptProducerService dumpProducerService, File dst) { if (dst == null) { throw new IllegalArgumentException( "file where to backup can not be null"); @@ -640,7 +641,7 @@ public class StorageUIHandler { File dst, Set<DataReference> trips) { - DataSourceDumpProducerService dumpService = dataSource.newService(DataSourceDumpProducerService.class); + SqlScriptProducerService dumpService = dataSource.newService(SqlScriptProducerService.class); if (trips == null) { diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java index 8b5b53c..1a11126 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/StorageUIModel.java @@ -45,10 +45,10 @@ import fr.ird.observe.services.security.UnknownObserveWebUserForDatabaseExceptio import fr.ird.observe.services.security.UserLoginNotFoundException; import fr.ird.observe.services.security.UserPasswordNotFoundException; import fr.ird.observe.services.service.BabModelVersionException; -import fr.ird.observe.services.service.DataSourceDumpProducerService; import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; import fr.ird.observe.services.service.PingService; +import fr.ird.observe.services.service.SqlScriptProducerService; import fr.ird.observe.ui.storage.tabs.DataSelectionModel; import fr.ird.observe.ui.storage.tabs.SecurityModel; import jaxx.runtime.JAXXContext; @@ -1589,7 +1589,8 @@ public class StorageUIModel extends WizardModel<StorageStep> { source.open(); - DataSourceDumpProducerService dumpService = source.newService(DataSourceDumpProducerService.class); + SqlScriptProducerService dumpService = source.newService(SqlScriptProducerService.class); + byte[] dump = dumpService.getReferentialDump(); result.setImportDatabase(dump); } diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceDumpProducerServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceDumpProducerServiceController.java deleted file mode 100644 index d93f13d..0000000 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceDumpProducerServiceController.java +++ /dev/null @@ -1,29 +0,0 @@ -package fr.ird.observe.application.web.controller.v1; - -import com.google.common.collect.ImmutableSet; -import fr.ird.observe.services.service.DataSourceDumpProducerService; - -/** - * @author Sylvain Bavencoff - bavencoff@codelutin.com - */ -public class DataSourceDumpProducerServiceController extends ObserveAuthenticatedServiceControllerSupport<DataSourceDumpProducerService> implements DataSourceDumpProducerService{ - - public DataSourceDumpProducerServiceController() { - super(DataSourceDumpProducerService.class); - } - - @Override - public byte[] getReferentialDump() { - return service.getReferentialDump(); - } - - @Override - public byte[] getAllDataDump() { - return service.getAllDataDump(); - } - - @Override - public byte[] getDataDump(ImmutableSet<String> importDataIds) { - return service.getDataDump(importDataIds); - } -} diff --git a/observe-entities/pom.xml b/observe-entities/pom.xml index 48faece..4068b05 100644 --- a/observe-entities/pom.xml +++ b/observe-entities/pom.xml @@ -99,10 +99,6 @@ </dependency> <dependency> <groupId>org.nuiton.topia</groupId> - <artifactId>topia-service-replication</artifactId> - </dependency> - <dependency> - <groupId>org.nuiton.topia</groupId> <artifactId>topia-service-sql-batch</artifactId> <scope>compile</scope> </dependency> diff --git a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java index 0b87c42..8484845 100644 --- a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java +++ b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaApplicationContext.java @@ -25,16 +25,15 @@ package fr.ird.observe; import com.google.common.collect.ImmutableSet; import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.migration.ObserveMigrationEngine; +import org.apache.commons.io.IOUtils; 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.nuiton.topia.persistence.TopiaException; -import org.nuiton.topia.persistence.jdbc.JdbcH2Helper; import org.nuiton.topia.persistence.jdbc.JdbcHelper; import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; -import org.nuiton.topia.replication.TopiaReplicationService; import org.nuiton.topia.service.sql.batch.TopiaSqlBatchService; import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTables; import org.nuiton.topia.service.sql.batch.tables.TopiaSqlTablesFactory; @@ -42,11 +41,9 @@ import org.nuiton.util.GZUtil; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; -import java.io.File; import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; +import java.io.InputStreamReader; +import java.io.StringWriter; import java.util.LinkedHashSet; import java.util.Objects; import java.util.Set; @@ -62,8 +59,6 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat public static final String MIGRATION_SERVICE_NAME = "migration"; - public static final String REPLICATION_SERVICE_NAME = "replication"; - public static final String SQL_BATCH_SERVICE_NAME = "sqlBatch"; public static final String DB_VERSION = "db.version"; @@ -112,10 +107,6 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat return getServices(ObserveMigrationEngine.class).get(MIGRATION_SERVICE_NAME); } - public TopiaReplicationService getReplicationService() { - return getServices(TopiaReplicationService.class).get(REPLICATION_SERVICE_NAME); - } - public TopiaSqlBatchService getSqlBatchService() { return getServices(TopiaSqlBatchService.class).get(SQL_BATCH_SERVICE_NAME); } @@ -140,41 +131,30 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat } } - public void executeSqlStatements(File temporaryDirectory, byte... content) throws IOException { + public void executeSqlStatements(byte... content) throws IOException { - Path sqlScriptFile = new File(temporaryDirectory, "script_" + System.nanoTime() + ".sql").toPath(); - - if (log.isInfoEnabled()) { - log.info("script: " + sqlScriptFile); - } boolean gzip; try (ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(content)) { gzip = GZUtil.isGzipStream(byteArrayInputStream); } - if (gzip) { - try (InputStream inputSream = new BufferedInputStream(new GZIPInputStream(new ByteArrayInputStream(content)))) { - Files.copy(inputSream, sqlScriptFile); - } - } else { - try (InputStream inputSream = new BufferedInputStream(new ByteArrayInputStream(content))) { - Files.copy(inputSream, sqlScriptFile); - } - } - - ObserveTopiaConfiguration topiaConfiguration = getConfiguration(); - if (topiaConfiguration.isH2Configuration()) { - - JdbcH2Helper jdbcH2Helper = new JdbcH2Helper(topiaConfiguration); - jdbcH2Helper.restore(sqlScriptFile.toFile()); - - } else { + try (StringWriter writer = new StringWriter()) { + if (gzip) { + try (InputStreamReader inputSream = new InputStreamReader(new BufferedInputStream(new GZIPInputStream(new ByteArrayInputStream(content))))) { + IOUtils.copyLarge(inputSream, writer); + } + } else { + try (InputStreamReader inputSream = new InputStreamReader(new BufferedInputStream(new ByteArrayInputStream(content)))) { + IOUtils.copyLarge(inputSream, writer); + } + } - String sqlScript = new String(Files.readAllBytes(sqlScriptFile)); + String sqlScript = writer.toString(); try (ObserveTopiaPersistenceContext persistenceContext = newPersistenceContext()) { persistenceContext.getSqlSupport().executeSql(sqlScript); + persistenceContext.commit(); } } diff --git a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaConfigurationFactory.java b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaConfigurationFactory.java index 19ec009..33f8796 100644 --- a/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaConfigurationFactory.java +++ b/observe-entities/src/main/java/fr/ird/observe/ObserveTopiaConfigurationFactory.java @@ -29,7 +29,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; import org.nuiton.topia.persistence.jdbc.JdbcConfigurationBuilder; -import org.nuiton.topia.replication.TopiaReplicationServiceImpl; import org.nuiton.topia.service.sql.batch.TopiaSqlBatchServiceImpl; import java.io.File; @@ -152,7 +151,6 @@ public class ObserveTopiaConfigurationFactory { ObserveMigrationEngine.MIGRATION_SHOW_SQL, String.valueOf(showMigrationSql) ); topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.MIGRATION_SERVICE_NAME, ObserveMigrationEngine.class, migrationServiceConfiguration); - topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.REPLICATION_SERVICE_NAME, TopiaReplicationServiceImpl.class); topiaConfiguration.addDeclaredService(ObserveTopiaApplicationContext.SQL_BATCH_SERVICE_NAME, TopiaSqlBatchServiceImpl.class); return topiaConfiguration; diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerService.java deleted file mode 100644 index d214a7c..0000000 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerService.java +++ /dev/null @@ -1,41 +0,0 @@ -package fr.ird.observe.services.service; - -/* - * #%L - * ObServe :: Services API - * %% - * Copyright (C) 2008 - 2015 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 - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.ImmutableSet; -import fr.ird.observe.services.ObserveService; - -/** - * Created on 23/08/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public interface DataSourceDumpProducerService extends ObserveService { - - byte[] getReferentialDump(); - - byte[] getAllDataDump(); - - byte[] getDataDump(ImmutableSet<String> importDataIds); - -} diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerService.java index cf37249..a010d62 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/SqlScriptProducerService.java @@ -1,5 +1,6 @@ package fr.ird.observe.services.service; +import com.google.common.collect.ImmutableSet; import fr.ird.observe.services.ObserveService; /** @@ -10,4 +11,9 @@ public interface SqlScriptProducerService extends ObserveService { byte[] produceSqlScript(SqlScriptProducerRequest request); + byte[] getReferentialDump(); + + byte[] getDataDump(ImmutableSet<String> dataIds); + + byte[] getAllDataDump(); } diff --git a/observe-services-topia/pom.xml b/observe-services-topia/pom.xml index b0d84d5..0c1fb99 100644 --- a/observe-services-topia/pom.xml +++ b/observe-services-topia/pom.xml @@ -107,10 +107,6 @@ </dependency> <dependency> <groupId>org.nuiton.topia</groupId> - <artifactId>topia-service-replication</artifactId> - </dependency> - <dependency> - <groupId>org.nuiton.topia</groupId> <artifactId>topia-service-sql-batch</artifactId> </dependency> diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java index 91cf69a..d7cddef 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/ObserveServiceTopia.java @@ -25,26 +25,18 @@ package fr.ird.observe.services; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Multimap; -import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.ObserveTopiaPersistenceContext; -import fr.ird.observe.entities.Entities; import fr.ird.observe.entities.ObserveDataEntity; import fr.ird.observe.entities.ObserveEntity; -import fr.ird.observe.entities.longline.TripLongline; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; import fr.ird.observe.services.binder.BinderEngine; import fr.ird.observe.services.binder.data.DataBinderSupport; import fr.ird.observe.services.binder.referential.ReferentialBinderSupport; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.dto.DataDto; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataReferenceSet; -import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; -import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.IdDto; -import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.services.dto.reference.request.ReferenceSetRequestDefinitions; import fr.ird.observe.services.dto.referential.ReferentialDto; @@ -54,31 +46,27 @@ import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.result.SaveResultDtos; import fr.ird.observe.services.service.ConcurrentModificationException; import fr.ird.observe.services.service.DataNotFoundException; -import fr.ird.observe.services.service.DataSourceService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaDao; import org.nuiton.topia.persistence.TopiaNoResultException; -import org.nuiton.topia.replication.TopiaReplicationService; -import org.nuiton.topia.replication.model.ReplicationModel; -import org.nuiton.util.StringUtil; -import java.io.File; import java.util.Date; import java.util.List; import java.util.Locale; -import java.util.Set; /** * Support pour toute implantation d'un service ToPIA. - * + * <p> * Created on 16/08/15. * * @author Tony Chemit - chemit@codelutin.com */ public abstract class ObserveServiceTopia implements ObserveService { - /** Logger. */ + /** + * Logger. + */ private static final Log log = LogFactory.getLog(ObserveServiceTopia.class); protected static final BinderEngine BINDER_ENGINE = BinderEngine.get(); @@ -191,13 +179,13 @@ public abstract class ObserveServiceTopia implements ObserveService { } protected <E extends ObserveDataEntity, D extends DataDto> Form<D> dataEntityToForm(Class<D> dtoType, - E entity, - ReferenceSetRequestDefinitions referentialRequestDefinition) { + E entity, + ReferenceSetRequestDefinitions referentialRequestDefinition) { D dto = BINDER_ENGINE.transformEntityToDataDto(serviceContext.getReferentialLocale(), dtoType, entity); Form<D> form = Form.newFormDto(dtoType, dto, referentialRequestDefinition == null ? null : - referentialRequestDefinition.name(), null); + referentialRequestDefinition.name(), null); return form; } @@ -209,7 +197,7 @@ public abstract class ObserveServiceTopia implements ObserveService { D dto = BINDER_ENGINE.transformEntityToReferentialDto(serviceContext.getReferentialLocale(), entity); Form<D> form = Form.newFormDto(dtoType, dto, referentialRequestDefinition == null ? null : - referentialRequestDefinition.name(), null); + referentialRequestDefinition.name(), null); return form; } @@ -284,150 +272,95 @@ public abstract class ObserveServiceTopia implements ObserveService { return serviceContext.now(); } - protected ObserveDataSourceConfigurationTopiaH2 createTemporaryDatabaseFromDump(String prefix, byte... importContent) { - ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = new ObserveDataSourceConfigurationTopiaH2(); - temporaryDataSourceConfiguration.setDbName("obstuna"); - temporaryDataSourceConfiguration.setLabel(prefix); - temporaryDataSourceConfiguration.setUsername("sa"); - temporaryDataSourceConfiguration.setPassword('s', 'a'); - File temporaryDataSourceDirectory = serviceContext.createTemporaryDirectory(prefix); - temporaryDataSourceConfiguration.setDirectory(temporaryDataSourceDirectory); - - DataSourceService dataSourceService = serviceContext.newService(temporaryDataSourceConfiguration, DataSourceService.class); - - try { - DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); - dataSourceCreateConfiguration.setImportDatabase(importContent); - dataSourceService.create(temporaryDataSourceConfiguration, dataSourceCreateConfiguration); - } catch (IncompatibleDataSourceCreateConfigurationException | DataSourceCreateWithNoReferentialImportException e) { - //FIXME Avoir une exception plus concrete - throw new RuntimeException("Could not create temporary database: " + prefix, e); - } - - return temporaryDataSourceConfiguration; - } - - protected ObserveDataSourceConfigurationTopiaH2 createTemporaryDatabase(String prefix) { - - ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = new ObserveDataSourceConfigurationTopiaH2(); - temporaryDataSourceConfiguration.setDbName("obstuna"); - temporaryDataSourceConfiguration.setLabel(prefix); - temporaryDataSourceConfiguration.setUsername("sa"); - temporaryDataSourceConfiguration.setPassword('s', 'a'); - File temporaryDataSourceDirectory = serviceContext.createTemporaryDirectory(prefix); - temporaryDataSourceConfiguration.setDirectory(temporaryDataSourceDirectory); - - DataSourceService dataSourceService = serviceContext.newService(temporaryDataSourceConfiguration, DataSourceService.class); - - try { - DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); - dataSourceCreateConfiguration.setCanCreateEmptyDatabase(true); - dataSourceService.create(temporaryDataSourceConfiguration, dataSourceCreateConfiguration); - } catch (IncompatibleDataSourceCreateConfigurationException | DataSourceCreateWithNoReferentialImportException e) { - //FIXME Avoir une exception plus concrete - throw new RuntimeException("Could not create temporary database: " + prefix, e); - } - - return temporaryDataSourceConfiguration; - - } - - protected void replicateReferential(ObserveTopiaApplicationContext sourceTopiaApplicationContext, ObserveTopiaApplicationContext temporaryTopiaApplicationContext) { - - long t0 = System.nanoTime(); - - TopiaReplicationService service = sourceTopiaApplicationContext.getReplicationService(); - ReplicationModel model = service.prepareForAll(Entities.REFERENCE_ENTITIES); - - try { - service.doReplicate(model, temporaryTopiaApplicationContext); - } catch (Exception e) { - //TODO Avoir une exception concrete - throw new RuntimeException("Could not replicate referantial", e); - } - - - if (log.isInfoEnabled()) { - log.info(String.format("Referential replication done in %s", StringUtil.convertTime(t0, System.nanoTime()))); - } - - } - - protected void replicateData(ObserveTopiaApplicationContext sourceTopiaApplicationContext, - ObserveTopiaApplicationContext temporaryTopiaApplicationContext, - Set<String> ids) { - try { - - - for (String id : ids) { - long t1 = System.nanoTime(); - - replicateOneData(sourceTopiaApplicationContext, temporaryTopiaApplicationContext, id); - - if (log.isInfoEnabled()) { - log.info(String.format("Data replication [%s] done in %s", id, StringUtil.convertTime(t1, System.nanoTime()))); - } - } - - } catch (Exception e) { - throw new RuntimeException("Could not replicate data", e); - } - } - - /** - * Duplication de l'unique donnée observateur depuis ce service vers le service donné. - * - * La duplication utilise une transaction dédiée afin de ne pas saturer le serveur - * et aussi une meilleure maitrise du rollback en cas d'une erreur. - * - * Voir http://forge.codelutin.com/issues/4837 - * - * @param id l'id de la donnée à répliquer - */ - protected void replicateOneData(ObserveTopiaApplicationContext sourceTopiaApplicationContext, ObserveTopiaApplicationContext temporaryTopiaApplicationContext, String id) { - - TopiaReplicationService service = sourceTopiaApplicationContext.getReplicationService(); - - ReplicationModel model = service.prepare(Entities.DATA_ENTITIES, false, id); - - // To fix missing tdr associations (see https://forge.codelutin.com/issues/6611) - Multimap<String, String> tdrAssociation = null; - - try (ObserveTopiaPersistenceContext sourcePersistenceContext = sourceTopiaApplicationContext.newPersistenceContext()) { - - ObserveEntity e = sourcePersistenceContext.findByTopiaId(id); - - if (e instanceof TripLongline) { - - // Grab tdr missing associations (see https://forge.codelutin.com/issues/6611) - if (log.isInfoEnabled()) { - log.info("Should keep SetLongline - Tdr association ids for: " + id); - } - - tdrAssociation = sourcePersistenceContext.getTdrDao().getTdrIdsBySeineIds((TripLongline) e); - - } - - } - - // do the replicate - try { - service.doReplicate(model, temporaryTopiaApplicationContext); - } catch (Exception e) { - throw new RuntimeException("Could not replicate data: " + id, e); - } - - if (tdrAssociation != null) { - - // Apply back tdr missing associations (see https://forge.codelutin.com/issues/6611) - try (ObserveTopiaPersistenceContext temporaryPersistenceContext = temporaryTopiaApplicationContext.newPersistenceContext()) { - - temporaryPersistenceContext.getTdrDao().applyTdrAssociationFix(tdrAssociation); - - } - - } - } +// protected ObserveDataSourceConfigurationTopiaH2 createTemporaryDatabaseFromDump(String prefix, byte... importContent) { +// ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = new ObserveDataSourceConfigurationTopiaH2(); +// temporaryDataSourceConfiguration.setDbName("obstuna"); +// temporaryDataSourceConfiguration.setLabel(prefix); +// temporaryDataSourceConfiguration.setUsername("sa"); +// temporaryDataSourceConfiguration.setPassword('s', 'a'); +// File temporaryDataSourceDirectory = serviceContext.createTemporaryDirectory(prefix); +// temporaryDataSourceConfiguration.setDirectory(temporaryDataSourceDirectory); +// +// DataSourceService dataSourceService = serviceContext.newService(temporaryDataSourceConfiguration, DataSourceService.class); +// +// try { +// DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); +// dataSourceCreateConfiguration.setImportDatabase(importContent); +// dataSourceService.create(temporaryDataSourceConfiguration, dataSourceCreateConfiguration); +// } catch (IncompatibleDataSourceCreateConfigurationException | DataSourceCreateWithNoReferentialImportException e) { +// //FIXME Avoir une exception plus concrete +// throw new RuntimeException("Could not create temporary database: " + prefix, e); +// } +// +// return temporaryDataSourceConfiguration; +// } +// +// protected ObserveDataSourceConfigurationTopiaH2 createTemporaryDatabase(String prefix) { +// +// ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = new ObserveDataSourceConfigurationTopiaH2(); +// temporaryDataSourceConfiguration.setDbName("obstuna"); +// temporaryDataSourceConfiguration.setLabel(prefix); +// temporaryDataSourceConfiguration.setUsername("sa"); +// temporaryDataSourceConfiguration.setPassword('s', 'a'); +// File temporaryDataSourceDirectory = serviceContext.createTemporaryDirectory(prefix); +// temporaryDataSourceConfiguration.setDirectory(temporaryDataSourceDirectory); +// +// DataSourceService dataSourceService = serviceContext.newService(temporaryDataSourceConfiguration, DataSourceService.class); +// +// try { +// DataSourceCreateConfigurationDto dataSourceCreateConfiguration = new DataSourceCreateConfigurationDto(); +// dataSourceCreateConfiguration.setCanCreateEmptyDatabase(true); +// dataSourceService.create(temporaryDataSourceConfiguration, dataSourceCreateConfiguration); +// } catch (IncompatibleDataSourceCreateConfigurationException | DataSourceCreateWithNoReferentialImportException e) { +// //FIXME Avoir une exception plus concrete +// throw new RuntimeException("Could not create temporary database: " + prefix, e); +// } +// +// return temporaryDataSourceConfiguration; +// +// } + +// protected void replicateReferential(ObserveTopiaApplicationContext sourceTopiaApplicationContext, ObserveTopiaApplicationContext temporaryTopiaApplicationContext) { +// +// long t0 = System.nanoTime(); +// +// TopiaReplicationService service = sourceTopiaApplicationContext.getReplicationService(); +// ReplicationModel model = service.prepareForAll(Entities.REFERENCE_ENTITIES); +// +// try { +// service.doReplicate(model, temporaryTopiaApplicationContext); +// } catch (Exception e) { +// //TODO Avoir une exception concrete +// throw new RuntimeException("Could not replicate referantial", e); +// } +// +// +// if (log.isInfoEnabled()) { +// log.info(String.format("Referential replication done in %s", StringUtil.convertTime(t0, System.nanoTime()))); +// } +// +// } + +// protected void replicateData(ObserveTopiaApplicationContext sourceTopiaApplicationContext, +// ObserveTopiaApplicationContext temporaryTopiaApplicationContext, +// Set<String> ids) { +// try { +// +// +// for (String id : ids) { +// long t1 = System.nanoTime(); +// +// replicateOneData(sourceTopiaApplicationContext, temporaryTopiaApplicationContext, id); +// +// if (log.isInfoEnabled()) { +// log.info(String.format("Data replication [%s] done in %s", id, StringUtil.convertTime(t1, System.nanoTime()))); +// } +// } +// +// } catch (Exception e) { +// throw new RuntimeException("Could not replicate data", e); +// } +// } protected <D extends DataDto, E extends ObserveDataEntity> D loadEntityToDataDto(Class<D> dtoType, String id) { diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerServiceTopia.java deleted file mode 100644 index 9efe7be..0000000 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceDumpProducerServiceTopia.java +++ /dev/null @@ -1,150 +0,0 @@ -package fr.ird.observe.services.service; - -/* - * #%L - * ObServe :: Services ToPIA Implementation - * %% - * Copyright (C) 2008 - 2015 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 - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.ImmutableSet; -import fr.ird.observe.ObserveTopiaApplicationContext; -import fr.ird.observe.ObserveTopiaPersistenceContext; -import fr.ird.observe.services.ObserveServiceTopia; -import fr.ird.observe.services.ObserveTopiaApplicationContextFactory; -import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.util.StringUtil; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.List; - -/** - * Created on 23/08/15. - * - * @author Tony Chemit - chemit@codelutin.com - */ -public class DataSourceDumpProducerServiceTopia extends ObserveServiceTopia implements DataSourceDumpProducerService { - - /** Logger. */ - private static final Log log = LogFactory.getLog(DataSourceDumpProducerServiceTopia.class); - - protected static final String EXPORT_SQL_STATEMENT = "SCRIPT NOPASSWORDS NOSETTINGS TO '%s' COMPRESSION GZIP CHARSET 'UTF-8' SCHEMA OBSERVE_COMMON, OBSERVE_SEINE, OBSERVE_LONGLINE, PUBLIC;"; - - @Override - public byte[] getReferentialDump() { - - long t0 = System.nanoTime(); - - ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = createTemporaryDatabase("referentialDump"); - - if (log.isInfoEnabled()) { - log.info(String.format("Referential temporary database created in %s", StringUtil.convertTime(t0, System.nanoTime()))); - } - - ObserveTopiaApplicationContext sourceTopiaApplicationContext = serviceContext.getTopiaApplicationContext(); - ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(temporaryDataSourceConfiguration); - - replicateReferential(sourceTopiaApplicationContext, temporaryTopiaApplicationContext); - - Path dumpFile = exportToFile(temporaryDataSourceConfiguration, temporaryTopiaApplicationContext); - - byte[] content = getBytes(dumpFile); - return content; - - } - - @Override - public byte[] getAllDataDump() { - - ImmutableSet.Builder<String> builder = ImmutableSet.builder(); - List<String> tripSeineIds = getTopiaPersistenceContext().getTripSeineDao().findAllIds(); - builder.addAll(tripSeineIds); - List<String> tripLonglineIds = getTopiaPersistenceContext().getTripLonglineDao().findAllIds(); - builder.addAll(tripLonglineIds); - - ImmutableSet<String> ids = builder.build(); - byte[] content = getDataDump(ids); - return content; - - } - - @Override - public byte[] getDataDump(ImmutableSet<String> importDataIds) { - - long t0 = System.nanoTime(); - - ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = createTemporaryDatabase("referentialDump"); - - if (log.isInfoEnabled()) { - log.info(String.format("Data temporary database created in %s", StringUtil.convertTime(t0, System.nanoTime()))); - } - - ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(temporaryDataSourceConfiguration); - ObserveTopiaApplicationContext sourceTopiaApplicationContext = serviceContext.getTopiaApplicationContext(); - - replicateReferential(sourceTopiaApplicationContext, temporaryTopiaApplicationContext); - - t0 = System.nanoTime(); - - replicateData(sourceTopiaApplicationContext, temporaryTopiaApplicationContext, importDataIds); - - if (log.isInfoEnabled()) { - log.info(String.format("Data replication for %s data done in %s", importDataIds.size(), StringUtil.convertTime(t0, System.nanoTime()))); - } - - Path dumpFile = exportToFile(temporaryDataSourceConfiguration, temporaryTopiaApplicationContext); - - byte[] content = getBytes(dumpFile); - return content; - - } - - protected Path exportToFile(ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration, - ObserveTopiaApplicationContext temporaryTopiaApplicationContext) { - - Path dumpFile = temporaryDataSourceConfiguration.getDirectory().toPath().resolve("dump.sql"); - - if (log.isInfoEnabled()) { - log.info("Export sql to file: " + dumpFile); - } - try (ObserveTopiaPersistenceContext temporaryPersistenceContext = temporaryTopiaApplicationContext.newPersistenceContext()) { - - String scriptSqlQuery = String.format(EXPORT_SQL_STATEMENT, dumpFile); - - temporaryPersistenceContext.getSqlSupport().executeSql(scriptSqlQuery); - - } - return dumpFile; - - } - - protected byte[] getBytes(Path dumpFile) { - try { - byte[] content = Files.readAllBytes(dumpFile); - return content; - } catch (IOException e) { - //TODO Avoir une exception concrete - throw new RuntimeException("Could not read file " + dumpFile + " content", e); - } - } - -} diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java index 2577552..f679560 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java @@ -63,7 +63,9 @@ import static org.nuiton.i18n.I18n.l; */ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataSourceService { - /** Logger. */ + /** + * Logger. + */ private static final Log log = LogFactory.getLog(DataSourceServiceTopia.class); @Override @@ -98,12 +100,12 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS // On tente une connection à la base ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forH2Database(h2DataSourceConfiguration.getDirectory(), - h2DataSourceConfiguration.getDbName(), - h2DataSourceConfiguration.getUsername(), - new String(h2DataSourceConfiguration.getPassword()), - false, + h2DataSourceConfiguration.getDbName(), + h2DataSourceConfiguration.getUsername(), + new String(h2DataSourceConfiguration.getPassword()), false, - false); + false, + false); try { @@ -124,11 +126,11 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS ObserveDataSourceConfigurationTopiaPG pgDataSourceConfiguration = (ObserveDataSourceConfigurationTopiaPG) dataSourceConfigurationTopiaSupport; // On tente une connexion au serveur ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forPostgresqlDatabase(pgDataSourceConfiguration.getJdbcUrl(), - pgDataSourceConfiguration.getUsername(), - new String(pgDataSourceConfiguration.getPassword()), - false, + pgDataSourceConfiguration.getUsername(), + new String(pgDataSourceConfiguration.getPassword()), + false, false, - false); + false); try { new JdbcHelper(topiaConfiguration).runSelectOnString("SELECT 1;"); @@ -166,7 +168,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } byte[] importDatabase = dataSourceCreateConfiguration.getImportDatabase(); - executeGzipSqlStatements(topiaApplicationContext, "ImportDatabase_" + dataSourceConfiguration.getLabel(), importDatabase); + executeGzipSqlStatements(topiaApplicationContext, importDatabase); topiaApplicationContext.getMigrationService().runSchemaMigration(); @@ -198,15 +200,9 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration(); // Récupération du dump qui contient le référentiel - DataSourceDumpProducerService dumpProducerService = serviceContext.newService(importDataSourceConfiguration, DataSourceDumpProducerService.class); + SqlScriptProducerService dumpProducerService = serviceContext.newService(importDataSourceConfiguration, SqlScriptProducerService.class); byte[] referentialDump = dumpProducerService.getReferentialDump(); - - // création d'une base temporaire pour y importer le référentiel - ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = createTemporaryDatabaseFromDump("ImportReferential", referentialDump); - ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(temporaryDataSourceConfiguration); - - // Réplication du référentiel - replicateReferential(temporaryTopiaApplicationContext, topiaApplicationContext); + executeGzipSqlStatements(topiaApplicationContext, referentialDump); referantialImported = true; @@ -216,33 +212,37 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS if (importData) { ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration(); - ImmutableSet<String> importDataIds = dataSourceCreateConfiguration.getImportDataIds(); + SqlScriptProducerService dumpProducerService = serviceContext.newService(importDataSourceConfiguration, SqlScriptProducerService.class); - // Récupération du dump qui contient le référentiel et les données - DataSourceDumpProducerService dumpProducerService = serviceContext.newService(importDataSourceConfiguration, DataSourceDumpProducerService.class); - byte[] dataDump = dumpProducerService.getDataDump(importDataIds); + if (!referantialImported) { - // création d'une base temporaire pour y importer le référentiel et les données - ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = createTemporaryDatabaseFromDump("ImportData", dataDump); - ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(temporaryDataSourceConfiguration); + if (log.isInfoEnabled()) { + log.info("Get referential."); + } - if (!referantialImported) { + // Réplication du référentiel + byte[] referentialDump = dumpProducerService.getReferentialDump(); if (log.isInfoEnabled()) { log.info("Import referential."); } + executeGzipSqlStatements(topiaApplicationContext, referentialDump); - // Réplication du référentiel - replicateReferential(temporaryTopiaApplicationContext, topiaApplicationContext); + } + + // Récupération du dump qui contient les données + ImmutableSet<String> importDataIds = dataSourceCreateConfiguration.getImportDataIds(); + if (log.isInfoEnabled()) { + log.info("Get data: " + importDataIds); } + byte[] dataDump = dumpProducerService.getDataDump(importDataIds); + if (log.isInfoEnabled()) { log.info("Import data."); } - - // Réplication des données - replicateData(temporaryTopiaApplicationContext, topiaApplicationContext, importDataIds); + executeGzipSqlStatements(topiaApplicationContext, dataDump); } @@ -356,8 +356,8 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS public void importData(ImportDataDto importData) { // création d'une base temporaire pour y importer le référentiel et les données - ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = createTemporaryDatabaseFromDump("ImportData", importData.getDumpData()); - ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(temporaryDataSourceConfiguration); +// ObserveDataSourceConfigurationTopiaH2 temporaryDataSourceConfiguration = createTemporaryDatabaseFromDump("ImportData", importData.getDumpData()); +// ObserveTopiaApplicationContext temporaryTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getOrCreateTopiaApplicationContext(temporaryDataSourceConfiguration); if (log.isInfoEnabled()) { log.info("Import data."); @@ -365,15 +365,15 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS // Réplication des données ObserveTopiaApplicationContext topiaApplicationContext = serviceContext.getTopiaApplicationContext(); - replicateData(temporaryTopiaApplicationContext, topiaApplicationContext, importData.getImportDataIds()); + executeGzipSqlStatements(topiaApplicationContext, importData.getDumpData()); +// replicateData(temporaryTopiaApplicationContext, topiaApplicationContext, importData.getImportDataIds()); } - protected void executeGzipSqlStatements(ObserveTopiaApplicationContext topiaApplicationContext, String temporaryFilePrefix, byte... content) { + protected void executeGzipSqlStatements(ObserveTopiaApplicationContext topiaApplicationContext, byte... content) { - File temporaryDirectory = serviceContext.createTemporaryDirectory(temporaryFilePrefix); try { - topiaApplicationContext.executeSqlStatements(temporaryDirectory, content); + topiaApplicationContext.executeSqlStatements(content); } catch (IOException e) { //TODO Avoir une exception concrete throw new RuntimeException("Could not execute GZipSqlStatements", e); @@ -454,9 +454,9 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS if (log.isDebugEnabled()) { log.debug("User can read refererential : " + readReferential + ", " + - "write referential : " + writeReferential + ", " + - "read data : " + readData + ", " + - "write data : " + writeData + "."); + "write referential : " + writeReferential + ", " + + "read data : " + readData + ", " + + "write data : " + writeData + "."); } ObserveDataSourceInformation information = new ObserveDataSourceInformation( @@ -473,9 +473,9 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS protected static boolean canWrite(Set<?> privileges) { boolean result = privileges != null && - privileges.contains("DELETE") && - privileges.contains("UPDATE") && - privileges.contains("INSERT"); + privileges.contains("DELETE") && + privileges.contains("UPDATE") && + privileges.contains("INSERT"); return result; } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/SqlScriptProducerServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/SqlScriptProducerServiceTopia.java index 24c0ace..33c7bbb 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/SqlScriptProducerServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/SqlScriptProducerServiceTopia.java @@ -47,6 +47,24 @@ public class SqlScriptProducerServiceTopia extends ObserveServiceTopia implement } + @Override + public byte[] getReferentialDump() { + SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addReferential(); + return produceSqlScript(request); + } + + @Override + public byte[] getDataDump(ImmutableSet<String> dataIds) { + SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addDataIds(dataIds); + return produceSqlScript(request); + } + + @Override + public byte[] getAllDataDump() { + SqlScriptProducerRequest request = SqlScriptProducerRequest.forH2().addAllData(); + return produceSqlScript(request); + } + protected SqlRequests sqlRequests(SqlScriptProducerRequest request, SqlRequests.Builder builder) { if (request.isAddSchema()) { diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceDumpProducerServiceTopiaTest.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceDumpProducerServiceTopiaTest.java deleted file mode 100644 index a67b644..0000000 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/DataSourceDumpProducerServiceTopiaTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package fr.ird.observe.services.service; - -/* - * #%L - * ObServe :: Services ToPIA Implementation - * %% - * Copyright (C) 2008 - 2015 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 - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.ImmutableSet; -import fr.ird.observe.test.DatabaseName; -import fr.ird.observe.test.ObserveFixtures; -import fr.ird.observe.test.spi.DatabaseNameConfiguration; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; - -/** - * Created on 26/08/15. - * - * @author Tony Chemit - chemit@codelutin.com - * FIXME IT tests - */ -@Ignore -@DatabaseNameConfiguration(DatabaseName.dataForTestSeine) -public class DataSourceDumpProducerServiceTopiaTest extends AbstractServiceTopiaTest { - - protected DataSourceDumpProducerService service; - - @Before - public void setUp() throws Exception { - service = dataSourceResource.newService(DataSourceDumpProducerService.class); - } - - @Test - public void testGetReferentialDump() throws Exception { - - byte[] referentialDump = service.getReferentialDump(); - Assert.assertNotNull(referentialDump); - - } - - @Test - public void testGetDataDump() throws Exception { - - byte[] dataDump = service.getDataDump(ImmutableSet.of(ObserveFixtures.TRIP_SEINE_ID_1)); - Assert.assertNotNull(dataDump); - - } - - @Test - public void testGetAllDataDump() throws Exception { - - byte[] allDataDump = service.getAllDataDump(); - Assert.assertNotNull(allDataDump); - - } -} \ No newline at end of file diff --git a/observe-services-topia/src/test/java/fr/ird/observe/services/service/MigrateTestsDatabases.java b/observe-services-topia/src/test/java/fr/ird/observe/services/service/MigrateTestsDatabases.java index 1080b96..a22be7d 100644 --- a/observe-services-topia/src/test/java/fr/ird/observe/services/service/MigrateTestsDatabases.java +++ b/observe-services-topia/src/test/java/fr/ird/observe/services/service/MigrateTestsDatabases.java @@ -83,7 +83,7 @@ public class MigrateTestsDatabases extends AbstractServiceTopiaTest { Files.createDirectories(f.toPath().getParent()); - DataSourceDumpProducerService service = applicationContextResource.newService(dataSourceResource.getDataSourceConfiguration(), DataSourceDumpProducerService.class); + SqlScriptProducerService service = applicationContextResource.newService(dataSourceResource.getDataSourceConfiguration(), SqlScriptProducerService.class); byte[] allDataDump = service.getAllDataDump(); diff --git a/pom.xml b/pom.xml index 7b24e45..b7f2f63 100644 --- a/pom.xml +++ b/pom.xml @@ -438,12 +438,6 @@ </dependency> <dependency> <groupId>org.nuiton.topia</groupId> - <artifactId>topia-service-replication</artifactId> - <version>${topiaVersion}</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>org.nuiton.topia</groupId> <artifactId>topia-service-migration</artifactId> <version>${topiaVersion}</version> <scope>compile</scope> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.