This is an automated email from the git hooks/post-receive script. New commit to branch feature/7549 in repository observe. See http://git.codelutin.com/observe.git commit e3240813a121b70372f42468b30aff5ddfc0e987 Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Wed Sep 30 17:53:37 2015 +0200 migrer une base sans l'ouvrir, verification de la version de la base local au chargement et migration si nécessaire (refs #7549) --- .../observe/ObserveSwingApplicationContext.java | 22 +++++++----- .../fr/ird/observe/db/ObserveSwingDataSource.java | 39 +++++++++++++++++--- .../ird/observe/ui/storage/ObstunaAdminAction.java | 41 +--------------------- .../ird/observe/ui/storage/StorageUIHandler.java | 10 ++++++ .../services/service/DataSourceService.java | 6 +--- .../services/service/DataSourceServiceTopia.java | 7 ++-- 6 files changed, 63 insertions(+), 62 deletions(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java b/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java index 614cec2..babe227 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ObserveSwingApplicationContext.java @@ -36,6 +36,7 @@ import fr.ird.observe.services.ObserveDataSourceConfigurationMainFactory; import fr.ird.observe.services.ObserveService; import fr.ird.observe.services.ObserveServiceMainFactory; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; +import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.ReferenceDto; import fr.ird.observe.services.dto.ReferenceSetDto; import fr.ird.observe.services.dto.constants.ReferentialLocale; @@ -560,16 +561,21 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext { // création de la source de données sur la base locale ObserveSwingDataSource dataSource = ObserveServiceHelper.newLocalStorageService(getConfig()); - // la source sera utilisée dans les ui - prepareMainStorage(dataSource); - setDataSource(dataSource); + try { - if (log.isInfoEnabled()) { - log.info(t("observe.init.local.db.detected", dataSource.getLabel())); - } + ObserveDataSourceInformation dataSourceInformation = dataSource.checkCanConnect(); - // la base locale existe, on l'ouvre - try { + dataSource.migrateData(dataSourceInformation, getConfig().getModelVersion()); + + // la source sera utilisée dans les ui + prepareMainStorage(dataSource); + setDataSource(dataSource); + + if (log.isInfoEnabled()) { + log.info(t("observe.init.local.db.detected", dataSource.getLabel())); + } + + // la base locale existe, on l'ouvre dataSource.open(); success = true; } catch (DatabaseConnexionNotAuthorizedException | DatabaseNotFoundException e) { 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 40bffc7..9b3451b 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 @@ -28,6 +28,7 @@ import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractSerializableBean; import org.nuiton.util.version.Version; +import javax.swing.JOptionPane; import javax.swing.event.EventListenerList; import java.io.File; import java.util.Locale; @@ -190,13 +191,43 @@ public class ObserveSwingDataSource extends AbstractSerializableBean { dataSourceService.applySecurity(users); } - public void migrateData() { + public void migrateData(ObserveDataSourceInformation dataSourceInformation, Version targetVersion) throws DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { - Preconditions.checkState(isOpen(), "Connection is not open"); + Preconditions.checkState(!isOpen(), "Connection is open"); - DataSourceService dataSourceService = newService(DataSourceService.class); + Version dbVersion = dataSourceInformation.getVersion(); + if (! dataSourceInformation.getMigrations().isEmpty()) { + + if (dbVersion.before(dataSourceInformation.getMinnimumVersion())) { + + JOptionPane.showMessageDialog( + null, + t("observe.storage.migrate.not.possible.before.version.3.0.message", targetVersion, dbVersion), + t("observe.storage.migrate.not.possible.before.version.3.0.title", targetVersion), + JOptionPane.WARNING_MESSAGE); + + } else { + + int answer = JOptionPane.showConfirmDialog( + null, + t("observe.storage.migrate.askUser.message", dbVersion, targetVersion, dataSourceInformation.getMigrations()), + t("observe.storage.migrate.askUser.title", targetVersion), + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE); - dataSourceService.migrateData(); + if (answer == JOptionPane.YES_OPTION) { + + DataSourceService dataSourceService = newService(DataSourceService.class); + + + if (log.isInfoEnabled()) { + log.info("Migrate data source " + getLabel() + " in " + dbVersion + " to " + targetVersion); + } + + dataSourceService.migrateData(); + } + } + } } diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java index 6783328..59fb938 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/storage/ObstunaAdminAction.java @@ -42,7 +42,6 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.util.version.Version; import org.nuiton.util.version.Versions; -import javax.swing.JOptionPane; import java.awt.Window; import java.util.Set; @@ -246,45 +245,7 @@ public enum ObstunaAdminAction { @Override protected void execute() throws Exception { - Version dbVersion = dataSourceInformation.getVersion(); - if (! dataSourceInformation.getMigrations().isEmpty()) { - - if (dbVersion.before(dataSourceInformation.getMinnimumVersion())) { - - JOptionPane.showMessageDialog( - null, - t("observe.storage.migrate.not.possible.before.version.3.0.message", targetVersion, dbVersion), - t("observe.storage.migrate.not.possible.before.version.3.0.title", targetVersion), - JOptionPane.WARNING_MESSAGE); - - } else { - - int answer = JOptionPane.showConfirmDialog( - null, - t("observe.storage.migrate.askUser.message", dbVersion, targetVersion, dataSourceInformation.getMigrations()), - t("observe.storage.migrate.askUser.title", targetVersion), - JOptionPane.YES_NO_OPTION, - JOptionPane.WARNING_MESSAGE); - - if (answer == JOptionPane.YES_OPTION) { - - try { - - dataSource.open(); - - if (log.isInfoEnabled()) { - log.info("Migrate data source " + dataSource.getLabel() + " in " + dbVersion + " to " + targetVersion); - } - - dataSource.migrateData(); - } finally { - if (dataSource.isOpen()) { - dataSource.close(); - } - } - } - } - } + dataSource.migrateData(dataSourceInformation, targetVersion); } @Override 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 c1463a1..4a07366 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 @@ -42,6 +42,7 @@ import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationRest; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; +import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.IdDtos; @@ -490,6 +491,15 @@ public class StorageUIHandler { currentDataSource = newDataSourceFromModel(model); + // si on utilise la base local on lance une migration de la base si necessaire + if (DbMode.USE_LOCAL.equals((model.getDbMode()))) { + + ObserveDataSourceInformation dataSourceInformation = model.getDataSourceInformation(); + + currentDataSource.migrateData(dataSourceInformation, config.getModelVersion()); + + } + observeContext.setDataSource(currentDataSource); observeContext.prepareMainStorage(currentDataSource); diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java index bca26c5..8753db9 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java @@ -72,10 +72,6 @@ public interface DataSourceService extends ObserveService { @Write void applySecurity(Set<ObserveDbUserDto> users); - @ReadReferentialPermission - @WriteReferentialPermission - @ReadDataPermission - @WriteDataPermission - @Write + @NoDataAccess void migrateData(); } 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 b238073..7308a30 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 @@ -340,12 +340,9 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); - Optional<ObserveTopiaApplicationContext> optionalTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContextIfPresent(dataSourceConfiguration); - - if (optionalTopiaApplicationContext.isPresent()) { + ObserveTopiaApplicationContext topiaApplicationContext = ObserveTopiaApplicationContextFactory.createTopiaApplicationContext(dataSourceConfiguration, false); - optionalTopiaApplicationContext.get().getMigrationService().runSchemaMigration(); - } + topiaApplicationContext.getMigrationService().runSchemaMigration(); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.