Tony CHEMIT pushed to branch develop-9.4.x at ultreiaio / ird-observe Commits: 802d4777 by Tony Chemit at 2024-01-25T08:11:12+01:00 use new Mojo check-services-types - See ultreiaio/http#61 - - - - - 0e75fecd by Tony Chemit at 2024-01-25T08:12:19+01:00 Remove DataSourceService.backup method - - - - - 19 changed files: - client/core/pom.xml - client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java - client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/LocalDatabaseBackupTaskSupport.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java - core/api/services/pom.xml - core/services/local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocalSupport.java - core/services/local/src/test/java/fr/ird/observe/services/local/service/DataSourceServiceLocalReadTest.java - core/services/test/pom.xml - core/services/test/src/main/java/fr/ird/observe/services/service/DataSourceServiceFixtures.java - pom.xml - server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm - server/core/src/main/java/fr/ird/observe/server/controller/DataSourceServiceRestApi.java - toolkit/api-services/pom.xml - toolkit/api-services/src/main/java/fr/ird/observe/services/service/DataSourceService.java - toolkit/api/src/main/java/fr/ird/observe/navigation/tree/io/ToolkitTreeNodeStates.java - toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java - toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java - toolkit/persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelperH2.java - toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java Changes: ===================================== client/core/pom.xml ===================================== @@ -79,6 +79,11 @@ <artifactId>toolkit-api-services</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>toolkit-persistence</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/api/ObserveSwingDataSource.java ===================================== @@ -57,6 +57,7 @@ import fr.ird.observe.dto.data.ps.dcp.FloatingObjectPresetsStorage; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.dto.reference.ReferentialDtoReferenceSet; import fr.ird.observe.dto.referential.ReferentialDto; +import fr.ird.observe.entities.ObserveTopiaConfigurationFactory; import fr.ird.observe.navigation.id.IdAggregateModel; import fr.ird.observe.navigation.id.IdModel; import fr.ird.observe.navigation.id.IdNode; @@ -80,6 +81,8 @@ import io.ultreia.java4all.util.Version; import io.ultreia.java4all.util.sql.SqlScript; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.nuiton.topia.persistence.TopiaConfiguration; +import org.nuiton.topia.persistence.jdbc.JdbcHelperH2; import javax.swing.BoundedRangeModel; import javax.swing.Icon; @@ -715,4 +718,13 @@ public class ObserveSwingDataSource extends AbstractJavaBean implements ObserveS } return String.format("%s (%s)", getLabel(), txt); } + + public void backup(File file) { + if (!isLocal()) { + throw new IllegalStateException("Cant backup a none H2 database."); + } + TopiaConfiguration configuration = ObserveTopiaConfigurationFactory.create(getConfiguration()); + JdbcHelperH2 jdbcHelperH2 = new JdbcHelperH2(configuration); + jdbcHelperH2.backup(file, true); + } } ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/h2/backup/LocalDatabaseBackupTaskSupport.java ===================================== @@ -81,7 +81,7 @@ public abstract class LocalDatabaseBackupTaskSupport implements Runnable { ClientUIContextApplicationComponent.value().getBusyModel().addTask(startMessage + " - " + file); ObserveSwingDataSource mainDataSource = dataSourcesManager.getMainDataSource(); try { - mainDataSource.getDataSourceService().backup(file); + mainDataSource.backup(file); } finally { String endMessage = t("observe.ui.datasource.backup.done", new Date(), Strings.convertTime(System.nanoTime() - t0)); ClientUIContextApplicationComponent.value().setUiStatus(endMessage); ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/wizard/StorageBackupUILauncher.java ===================================== @@ -127,7 +127,7 @@ public class StorageBackupUILauncher extends StorageUILauncher { progressModel.setMaximum(1); try { log.info(String.format("Exporting to %s", backupFile)); - incomingSource.getDataSourceService().backup(backupFile); + incomingSource.backup(backupFile); progressModel.increments(); } catch (Exception e) { throw new ObserveSwingTechnicalException(e); @@ -155,7 +155,7 @@ public class StorageBackupUILauncher extends StorageUILauncher { // finally backup temporary storage log.info(String.format("Exporting to %s", backupFile)); - targetSource.getDataSourceService().backup(backupFile); + targetSource.backup(backupFile); progressModel.increments(); } catch (DatabaseNotFoundException | DatabaseConnexionNotAuthorizedException | BabModelVersionException | IncompatibleDataSourceCreateConfigurationException | ===================================== core/api/services/pom.xml ===================================== @@ -161,5 +161,64 @@ </plugin> </plugins> </pluginManagement> + <plugins> + <plugin> + <groupId>io.ultreia.java4all.http</groupId> + <artifactId>http-maven-plugin</artifactId> + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>core-api-dto</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>core-api-dto-consolidation</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>core-api-dto-validation</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>toolkit-api</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>toolkit-api-services</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>toolkit-api-validation</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> + <executions> + <execution> + <goals> + <goal>check-services-types</goal> + </goals> + <configuration> + <acceptedTypes> + <acceptedType>io.ultreia.java4all.util.Version</acceptedType> + <acceptedType>java.lang.Class</acceptedType> + <acceptedType>java.lang.String</acceptedType> + <acceptedType>java.util.List</acceptedType> + <acceptedType>java.util.Set</acceptedType> + <acceptedType>java.util.Map</acceptedType> + <acceptedType>java.util.Date</acceptedType> + </acceptedTypes> + <acceptedAssignableTypes> + <acceptedAssignableType>io.ultreia.java4all.util.json.JsonAware</acceptedAssignableType> + </acceptedAssignableTypes> + </configuration> + </execution> + </executions> + </plugin> + </plugins> </build> </project> ===================================== core/services/local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocalSupport.java ===================================== @@ -37,7 +37,6 @@ import io.ultreia.java4all.util.sql.SqlScript; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.io.File; import java.util.Date; import java.util.LinkedHashSet; import java.util.Objects; @@ -62,11 +61,6 @@ public class DataSourceServiceLocalSupport extends ObserveServiceLocal implement }); } - @Override - public void backup(File backupFile) { - getTopiaApplicationContext().backup(backupFile, true); - } - @Override public <D extends BusinessDto> boolean isIdValid(Class<D> type, String id) { DtoEntityContext<D, ?, ?, ?> spi = ObservePersistenceBusinessProject.fromDto(type); ===================================== core/services/local/src/test/java/fr/ird/observe/services/local/service/DataSourceServiceLocalReadTest.java ===================================== @@ -36,16 +36,4 @@ public class DataSourceServiceLocalReadTest extends GeneratedDataSourceServiceLo fixtures.setTemporaryDirectory(null); } } - - @Override - public void backup() { - fixtures.setTemporaryDirectory(localTestMethodResource.getTemporaryDirectoryRoot()); - fixtures.setDataSourceConnection(localTestMethodResource.getDataSourceConnection()); - try { - super.backup(); - } finally { - fixtures.setTemporaryDirectory(null); - fixtures.setDataSourceConnection(null); - } - } } ===================================== core/services/test/pom.xml ===================================== @@ -94,11 +94,6 @@ <artifactId>toolkit-api-validation</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>toolkit-persistence</artifactId> - <version>${project.version}</version> - </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> ===================================== core/services/test/src/main/java/fr/ird/observe/services/service/DataSourceServiceFixtures.java ===================================== @@ -39,7 +39,6 @@ import io.ultreia.java4all.util.Version; import io.ultreia.java4all.util.sql.SqlScript; import org.junit.Assert; -import java.io.File; import java.nio.file.Path; import java.util.Collections; import java.util.Set; @@ -57,23 +56,6 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture Assert.assertFalse(actual); } - @Override - public void backup(ObserveServicesProvider servicesProvider, DataSourceService service) { - if (testDirectory == null && (dataSourceConnection == null || !dataSourceConnection.isLocal())) { - super.backup(servicesProvider, service); - return; - } - File backupFile = testDirectory.resolve("backup-" + System.nanoTime() + ".sql.gz").toFile(); - Assert.assertFalse(backupFile.exists()); - service.backup(backupFile); - Assert.assertTrue(backupFile.exists()); - Version dbVersion = servicesProvider.getAnonymousService().getModelVersion(); - ObserveDataSourceConfigurationTopiaH2 targetConfiguration = ObserveDataSourceConfigurationTopiaH2.createTemporaryConfiguration(testDirectory.toFile(), dbVersion); - try (ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createContext(targetConfiguration)) { - topiaApplicationContext.newJdbcHelperH2().restore(backupFile); - } - } - @Override public void close(ObserveServicesProvider servicesProvider, DataSourceService service) { // FIXME:Test Remove super method invocation and implements fixture @@ -148,36 +130,36 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture protected void produceMoveSqlScript(DataSourceService service, boolean pg) { String psObsRouteVariable = getVariableName(fr.ird.observe.dto.data.ps.observation.RouteDto.class); String psObsRouteId = getVariable(psObsRouteVariable); - String psObsRouteIdTarget = getVariable(psObsRouteVariable+".move"); + String psObsRouteIdTarget = getVariable(psObsRouteVariable + ".move"); String psObsActivityVariable = getVariableName(fr.ird.observe.dto.data.ps.observation.ActivityDto.class); String psObsActivityId = getVariable(psObsActivityVariable); - String psObsActivityIdTarget = getVariable(psObsActivityVariable+".move"); + String psObsActivityIdTarget = getVariable(psObsActivityVariable + ".move"); String psObsSetId = getVariable(getVariableName(FishingSetDto.class)); String psLogbookRouteVariable = getVariableName(fr.ird.observe.dto.data.ps.logbook.RouteDto.class); String psLogbookRouteId = getVariable(psLogbookRouteVariable); - String psLogbookRouteIdTarget = getVariable(psLogbookRouteVariable+".move"); + String psLogbookRouteIdTarget = getVariable(psLogbookRouteVariable + ".move"); String psLogbookActivityId = getVariable(getVariableName(fr.ird.observe.dto.data.ps.logbook.ActivityDto.class)); String llObsActivityVariable = getVariableName(fr.ird.observe.dto.data.ll.observation.ActivityDto.class); String llObsActivityId = getVariable(llObsActivityVariable); - String llObsActivityIdTarget = getVariable(llObsActivityVariable+".move"); + String llObsActivityIdTarget = getVariable(llObsActivityVariable + ".move"); String llObSetId = getVariable(getVariableName(fr.ird.observe.dto.data.ll.observation.FishingSetDto.class)); String llLogbookActivityVariable = getVariableName(fr.ird.observe.dto.data.ll.logbook.ActivityDto.class); String llLogbookActivityId = getVariable(llLogbookActivityVariable); - String llLogbookActivityIdTarget = getVariable(llLogbookActivityVariable+".move"); + String llLogbookActivityIdTarget = getVariable(llLogbookActivityVariable + ".move"); String llLogbookFishingSetId = getVariable(getVariableName(fr.ird.observe.dto.data.ll.logbook.FishingSetDto.class)); String psCommTripVariable = getVariableName(fr.ird.observe.dto.data.ps.common.TripDto.class); String psCommonTripId = getVariable(psCommTripVariable); - String psCommonTripIdTarget = getVariable(psCommTripVariable +".move"); + String psCommonTripIdTarget = getVariable(psCommTripVariable + ".move"); String llCommTripVariable = getVariableName(fr.ird.observe.dto.data.ll.common.TripDto.class); String llCommonTripId = getVariable(llCommTripVariable); - String llCommonTripIdTarget = getVariable(llCommTripVariable +".move"); + String llCommonTripIdTarget = getVariable(llCommTripVariable + ".move"); testRequest(service, new ReplicateRequest(pg, psCommonTripId, psCommonTripIdTarget, "fr.ird.observe.entities.data.ps.observation.Route", psObsRouteId)); @@ -226,11 +208,11 @@ public class DataSourceServiceFixtures extends GeneratedDataSourceServiceFixture this.testDirectory = testDirectory; } - public void setDataSourceConnection(ObserveDataSourceConnection dataSourceConnection) { - this.dataSourceConnection = dataSourceConnection; - } - public ObserveDataSourceConnection getDataSourceConnection() { return dataSourceConnection; } + + public void setDataSourceConnection(ObserveDataSourceConnection dataSourceConnection) { + this.dataSourceConnection = dataSourceConnection; + } } ===================================== pom.xml ===================================== @@ -23,7 +23,7 @@ <parent> <groupId>io.ultreia.maven</groupId> <artifactId>pom</artifactId> - <version>2024.01</version> + <version>2024.03</version> </parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> ===================================== server/core/src/main/filtered-resources/META-INF/mapping-api-client.wm ===================================== @@ -29,7 +29,6 @@ GET /AnonymousService/getServerVersion Anon GET /AnonymousService/getUsers AnonymousServiceRestApi.getUsers GET /AnonymousService/migrateData AnonymousServiceRestApi.migrateData GET /AnonymousService/open AnonymousServiceRestApi.open -GET /DataSourceService/backup DataSourceServiceRestApi.backup GET /DataSourceService/close DataSourceServiceRestApi.close POST /DataSourceService/executeSqlScript DataSourceServiceRestApi.executeSqlScript GET /DataSourceService/getLastUpdateDate DataSourceServiceRestApi.getLastUpdateDate ===================================== server/core/src/main/java/fr/ird/observe/server/controller/DataSourceServiceRestApi.java ===================================== @@ -28,7 +28,6 @@ import fr.ird.observe.server.security.ObserveWebUserSession; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.io.File; import java.util.LinkedHashMap; import java.util.Map; @@ -57,8 +56,4 @@ public class DataSourceServiceRestApi extends GeneratedDataSourceServiceRestApi result.put("credentials", session.getConnection().getDataSourceInformation().getCredentials()); return result; } - - @Override - public void backup(File backupFile) { - } } ===================================== toolkit/api-services/pom.xml ===================================== @@ -122,5 +122,54 @@ </plugin> </plugins> </pluginManagement> + <plugins> + <plugin> + <groupId>io.ultreia.java4all.http</groupId> + <artifactId>http-maven-plugin</artifactId> + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>toolkit-api</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>toolkit-api-datasource</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>toolkit-api-decoration</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>toolkit-api-report</artifactId> + <version>${project.version}</version> + </dependency> + </dependencies> + <executions> + <execution> + <goals> + <goal>check-services-types</goal> + </goals> + <configuration> + <acceptedTypes> + <acceptedType>io.ultreia.java4all.util.Version</acceptedType> + <acceptedType>java.lang.Class</acceptedType> + <acceptedType>java.lang.String</acceptedType> + <acceptedType>java.util.List</acceptedType> + <acceptedType>java.util.Set</acceptedType> + <acceptedType>java.util.Map</acceptedType> + <acceptedType>java.util.Date</acceptedType> + </acceptedTypes> + <acceptedAssignableTypes> + <acceptedAssignableType>io.ultreia.java4all.util.json.JsonAware</acceptedAssignableType> + </acceptedAssignableTypes> + </configuration> + </execution> + </executions> + </plugin> + </plugins> </build> </project> ===================================== toolkit/api-services/src/main/java/fr/ird/observe/services/service/DataSourceService.java ===================================== @@ -34,7 +34,6 @@ import io.ultreia.java4all.http.spi.Service; import io.ultreia.java4all.http.spi.Write; import io.ultreia.java4all.util.sql.SqlScript; -import java.io.File; import java.util.Date; import java.util.Set; @@ -49,9 +48,6 @@ public interface DataSourceService extends ObserveService { @Get void close(); - @Get - void backup(File backupFile); - @Get @MethodCredential <D extends BusinessDto> boolean isIdValid(Class<D> type, String id); ===================================== toolkit/api/src/main/java/fr/ird/observe/navigation/tree/io/ToolkitTreeNodeStates.java ===================================== @@ -22,6 +22,8 @@ package fr.ird.observe.navigation.tree.io; * #L% */ +import io.ultreia.java4all.util.json.JsonAware; + import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; @@ -37,7 +39,7 @@ import java.util.stream.Stream; * @author Tony Chemit - dev@tchemit.fr * @since 5.0.17 */ -public class ToolkitTreeNodeStates { +public class ToolkitTreeNodeStates implements JsonAware { private final Map<String, Object> states = new LinkedHashMap<>(); ===================================== toolkit/persistence/src/main/java/org/nuiton/topia/persistence/TopiaApplicationContext.java ===================================== @@ -40,7 +40,6 @@ import org.nuiton.topia.service.sql.TopiaSqlService; import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobIdsIterator; import java.io.Closeable; -import java.io.File; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; @@ -121,8 +120,6 @@ public interface TopiaApplicationContext<K extends TopiaPersistenceContext> exte getMigrationService().runSchemaMigration(); } - void backup(File backupFile, boolean compress); - /** * Get the list of entities (ToPIA or not) that Hibernate has to handle. By default it only contains ToPIA entities * but you may override it to add any other Hibernate entity. ===================================== toolkit/persistence/src/main/java/org/nuiton/topia/persistence/internal/AbstractTopiaApplicationContext.java ===================================== @@ -53,7 +53,6 @@ import org.nuiton.topia.service.migration.TopiaMigrationService; import org.nuiton.topia.service.sql.TopiaSqlService; import org.nuiton.topia.service.sql.blob.TopiaEntitySqlBlobIdsIterator; -import java.io.File; import java.nio.file.Path; import java.util.Arrays; import java.util.LinkedHashSet; @@ -248,17 +247,6 @@ public abstract class AbstractTopiaApplicationContext<K extends TopiaPersistence return Objects.hash(authenticationToken); } - @Override - public final void backup(File backupFile, boolean compress) { - if (!getConfiguration().isH2Configuration()) { - throw new IllegalStateException("Cant backup a none H2 database."); - } - try (K p = newPersistenceContext()) { - String sqlScript = String.format("SCRIPT NOPASSWORDS NOSETTINGS BLOCKSIZE 2048 TO '%s' %s CHARSET 'UTF-8';", backupFile.getAbsolutePath(), compress ? "COMPRESSION GZIP" : ""); - p.getSqlSupport().executeSql(sqlScript); - } - } - @Override public final void executeSqlStatements(SqlScript content) { try { ===================================== toolkit/persistence/src/main/java/org/nuiton/topia/persistence/jdbc/JdbcHelperH2.java ===================================== @@ -78,7 +78,7 @@ public class JdbcHelperH2 extends JdbcHelper { * @param compress if true then use gzip to compress file */ public void backup(File file, boolean compress) { - String options = ""; + String options = " BLOCKSIZE 2048 CHARSET 'UTF-8'"; if (compress) { options += " COMPRESSION GZIP"; } ===================================== toolkit/plugin/src/main/java/fr/ird/observe/toolkit/maven/plugin/tck/MigrateTckDatabases.java ===================================== @@ -100,7 +100,7 @@ public class MigrateTckDatabases extends PersistenceRunner { applicationContext.executeSqlStatements(SqlScript.of(backupFile)); Path checkBackupFile = getTemporaryPath().resolve("check-backup-" + backupFile.toFile().getName().replace(".sql.gz", "-check.sql")); - applicationContext.backup(checkBackupFile.toFile(), false); + applicationContext.newJdbcHelperH2().backup(checkBackupFile.toFile(), false); log.info(String.format("[%S] Check - backup to %s", tckDbName, checkBackupFile)); } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/3907e71338971494960ce8424... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/3907e71338971494960ce8424... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)