This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit e0354e1a8e7789854f93b0e9e8e1ab83f66aff9f Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Dec 14 11:35:00 2016 +0100 Si on ferme la base, il reste des références sur celle-ci, ce qui peut induire des fuites mémoires (fixes #8875) --- .../ObserveSwingApplicationDataSourcesManager.java | 1 + .../actions/menu/storage/CloseStorageAction.java | 7 ++-- .../actions/menu/storage/ReloadStorageAction.java | 2 +- .../topia/service/DataSourceServiceTopia.java | 43 +++++++++------------- 4 files changed, 23 insertions(+), 30 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java index a29de90..9643249 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java @@ -267,6 +267,7 @@ public class ObserveSwingApplicationDataSourcesManager implements Closeable { } // Ne pas supprimer, utilisé par ObserveRunner + @SuppressWarnings("unused") public void initStorage(ObserveSwingApplicationConfig config, ObserveMainUI mainUI, boolean askToCreate) { if (config.isLocalStorageExist()) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/CloseStorageAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/CloseStorageAction.java index e41be83..9d5384a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/CloseStorageAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/CloseStorageAction.java @@ -1,10 +1,10 @@ -package fr.ird.observe.application.swing.ui.actions.menu.storage; +package fr.ird.observe.application.swing.ui.actions; /* * #%L * ObServe :: Application Swing * %% - * Copyright (C) 2008 - 2016 IRD, Code Lutin, Tony Chemit + * Copyright (C) 2008 - 2016 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 @@ -25,7 +25,7 @@ package fr.ird.observe.application.swing.ui.actions.menu.storage; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.ui.ObserveMainUI; -import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; +import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -78,6 +78,7 @@ public class CloseStorageAction extends AbstractUIAction { // on doit fermer le storage en cours d'utilisation source.close(); } finally { + ObserveSwingApplicationContext.get().getDataSourcesManager().setMainDataSource(null); ui.getModel().setBusy(false); } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ReloadStorageAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ReloadStorageAction.java index 52efa91..53cad65 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ReloadStorageAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ReloadStorageAction.java @@ -109,7 +109,7 @@ public class ReloadStorageAction extends AbstractUIAction { context.setNodesToReselect(ids); // attachement a l'ui - context.getDataSourcesManager().prepareMainStorage(storage, false); + context.getDataSourcesManager().prepareMainStorage(storage, true); // ouverture du service storage.open(); diff --git a/services-topia/src/main/java/fr/ird/observe/services/topia/service/DataSourceServiceTopia.java b/services-topia/src/main/java/fr/ird/observe/services/topia/service/DataSourceServiceTopia.java index 77f66a9..447c32a 100644 --- a/services-topia/src/main/java/fr/ird/observe/services/topia/service/DataSourceServiceTopia.java +++ b/services-topia/src/main/java/fr/ird/observe/services/topia/service/DataSourceServiceTopia.java @@ -33,12 +33,12 @@ import fr.ird.observe.ObserveTopiaConfigurationFactory; import fr.ird.observe.entities.migration.ObserveMigrationConfigurationProvider; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; +import fr.ird.observe.services.configuration.ObserveDataSourceConnection; +import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfigurationTopiaPG; import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfigurationTopiaSupport; -import fr.ird.observe.services.configuration.ObserveDataSourceConnection; import fr.ird.observe.services.configuration.topia.ObserveDataSourceConnectionTopia; -import fr.ird.observe.services.configuration.ObserveDataSourceInformation; import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; @@ -429,15 +429,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); Optional<ObserveTopiaApplicationContext> optionalTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContextIfPresent(dataSourceConfiguration); - if (optionalTopiaApplicationContext.isPresent()) { - - ObserveTopiaApplicationContext topiaApplicationContext = optionalTopiaApplicationContext.get(); - if (log.isInfoEnabled()) { - log.info("Closing topia application context: " + dataSourceConfiguration); - } - topiaApplicationContext.close(); - - } + close(dataSourceConfiguration, optionalTopiaApplicationContext.orElse(null)); } @@ -457,15 +449,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS Optional<ObserveTopiaApplicationContext> optionalTopiaApplicationContext = ObserveTopiaApplicationContextFactory.getTopiaApplicationContextIfPresent(dataSourceConfiguration); - if (optionalTopiaApplicationContext.isPresent()) { - - ObserveTopiaApplicationContext topiaApplicationContext = optionalTopiaApplicationContext.get(); - if (log.isInfoEnabled()) { - log.info("Closing topia application context: " + dataSourceConfiguration); - } - topiaApplicationContext.close(); - - } + close(dataSourceConfiguration, optionalTopiaApplicationContext.orElse(null)); ObserveDataSourceConfigurationTopiaH2 dataSourceConfigurationH2 = (ObserveDataSourceConfigurationTopiaH2) dataSourceConfiguration; @@ -575,7 +559,6 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS protected ObserveDataSourceInformation getDataSourceInformation(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration, ObserveTopiaConfiguration topiaConfiguration) { - boolean readReferential; boolean writeReferential; boolean readData; boolean writeData; @@ -589,7 +572,6 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS if (dataSourceConfiguration.isH2Database()) { // Sur une base H2, on a le droit de tout lire, mais uniquement d'écrire les données - readReferential = true; writeReferential = false; readData = true; writeData = true; @@ -626,21 +608,19 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS Set<String> referentielPrivileges = observeJdbcHelper.getTablePrivileges(ObserveSecurityHelper.OBSERVE_COMMON_SCHEMA_NAME, "vessel"); // Sur une base PG, on regarde en base ce que l'utilisateur peut lire/écrire - readReferential = true; writeReferential = canWrite(referentielPrivileges); } if (log.isDebugEnabled()) { - log.debug("User can read refererential : " + readReferential + ", " + - "write referential : " + writeReferential + ", " + + log.debug("User can write referential : " + writeReferential + ", " + "read data : " + readData + ", " + "write data : " + writeData + "."); } ObserveMigrationConfigurationProvider observeMigrationConfigurationProvider = ObserveMigrationConfigurationProvider.get(); return new ObserveDataSourceInformation( - readReferential, + true, writeReferential, readData, writeData, @@ -649,6 +629,17 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS observeMigrationConfigurationProvider.getVersionsAfter(version)); } + private void close(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration, ObserveTopiaApplicationContext topiaApplicationContext) { + if (topiaApplicationContext != null) { + + if (log.isInfoEnabled()) { + log.info("Closing topia application context: " + dataSourceConfiguration); + } + topiaApplicationContext.close(); + + } + } + private static class DetectReferentialTypesInShellBuilder implements TopiaMetadataModelVisitor { private final ImmutableSet.Builder<Class<? extends ReferentialDto>> typesInShellBuilder = ImmutableSet.builder(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.