This is an automated email from the git hooks/post-receive script. New commit to branch develop-5.x in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit 56f0980e921bf4dbe7954385d7c8b6fca05bd631 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 + .../swing/ui/actions/CloseStorageAction.java | 2 + .../swing/ui/actions/ReloadStorageAction.java | 2 +- .../topia/service/DataSourceServiceTopia.java | 43 +++++++++------------- 4 files changed, 21 insertions(+), 27 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 af1246d..3c65abc 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 @@ -223,6 +223,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/CloseStorageAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseStorageAction.java index ee0cb21..3c79e98 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseStorageAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseStorageAction.java @@ -77,7 +77,9 @@ public class CloseStorageAction extends AbstractObserveAction { } // on doit fermer le storage en cours d'utilisation source.close(); + } finally { + ObserveSwingApplicationContext.get().getDataSourcesManager().setMainDataSource(null); ui.setBusy(false); } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadStorageAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadStorageAction.java index d59879a..898c3a1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadStorageAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadStorageAction.java @@ -108,7 +108,7 @@ public class ReloadStorageAction extends AbstractObserveAction { 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 be8e399..a9455ea 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; @@ -427,15 +427,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)); } @@ -455,15 +447,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; @@ -573,7 +557,6 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS protected ObserveDataSourceInformation getDataSourceInformation(ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration, ObserveTopiaConfiguration topiaConfiguration) { - boolean readReferential; boolean writeReferential; boolean readData; boolean writeData; @@ -587,7 +570,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; @@ -624,21 +606,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, @@ -647,6 +627,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>.