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 21c89db44a9b13f4a22094857cd6c3892850b22e Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Dec 14 09:56:16 2016 +0100 refs #8863 Prévenir des fuites mémoires quand on change de source + réusinage des dernières modifications --- .../observe/application/swing/ObserveRunner.java | 5 +++ .../swing/db/ObserveSwingDataSource.java | 4 ++ .../application/swing/ui/ObserveMainUIHandler.java | 6 +-- .../swing/ui/admin/AdminUILauncher.java | 4 +- .../swing/ui/content/list/ContentListUIModel.java | 11 +++++- .../ui/content/table/ContentTableUIModel.java | 11 +++++- .../swing/ui/storage/StorageUIHandler.java | 2 + .../swing/ui/storage/StorageUILauncher.java | 43 ++++++++++++---------- 8 files changed, 57 insertions(+), 29 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java index 04f143f..e766066 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java @@ -97,6 +97,11 @@ public abstract class ObserveRunner extends ApplicationRunner { return actionExecutor; } + public static void cleanMemory() { + System.runFinalization(); + System.gc(); + } + public abstract String getRunnerName(); private final boolean init; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java b/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java index 9e12fe6..e6a8a71 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java @@ -25,6 +25,7 @@ package fr.ird.observe.application.swing.db; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import fr.ird.observe.application.swing.ObserveRunner; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.application.swing.db.event.ObserveSwingDataSourceEvent; @@ -236,6 +237,9 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements dataSourceService.close(); } } finally { + + ObserveRunner.cleanMemory(); + connection = null; expired = false; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIHandler.java index 21d4de4..b538e03 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIHandler.java @@ -21,6 +21,7 @@ */ package fr.ird.observe.application.swing.ui; +import fr.ird.observe.application.swing.ObserveRunner; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.application.swing.db.DataContext; @@ -170,8 +171,7 @@ public class ObserveMainUIHandler { // on ouvre l'écran manager.openContent(content); - System.runFinalization(); - System.gc(); + ObserveRunner.cleanMemory(); } /** @@ -322,7 +322,7 @@ public class ObserveMainUIHandler { ui.setVisible(false); - System.runFinalization(); + ObserveRunner.cleanMemory(); } ui = initUI(rootContext, config); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUILauncher.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUILauncher.java index 43963dc..e1efbe9 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUILauncher.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUILauncher.java @@ -21,6 +21,7 @@ */ package fr.ird.observe.application.swing.ui.admin; +import fr.ird.observe.application.swing.ObserveRunner; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.ui.ObserveMainUI; @@ -242,8 +243,7 @@ public class AdminUILauncher extends WizardUILancher<AdminStep, AdminUIModel, Ad mainUI.getSynchroWizard().remove(ui); mainUI.removeContextValue(model.getClass()); - System.runFinalization(); - System.gc(); + ObserveRunner.cleanMemory(); ObserveSwingDataSource source = model.getPreviousSource(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIModel.java index d861dba..535b8e7 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIModel.java @@ -21,10 +21,10 @@ */ package fr.ird.observe.application.swing.ui.content.list; +import fr.ird.observe.application.swing.ui.content.ContentUIModel; import fr.ird.observe.services.dto.DataDto; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.IdDto; -import fr.ird.observe.application.swing.ui.content.ContentUIModel; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -71,6 +71,13 @@ public abstract class ContentListUIModel<E extends IdDto, C extends DataDto> ext this.childType = childType; } + @Override + public void destroy() { + super.destroy(); + dataReferenceSetsByPropertyName = null; + selectedDatas = null; + } + public Class<C> getChildType() { return childType; } @@ -114,7 +121,7 @@ public abstract class ContentListUIModel<E extends IdDto, C extends DataDto> ext } public boolean isOneOrMoreSelectedData() { - return CollectionUtils.isNotEmpty(selectedDatas ); + return CollectionUtils.isNotEmpty(selectedDatas); } public boolean isCanReopen() { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java index 389e5f6..392ecee 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java @@ -22,8 +22,8 @@ package fr.ird.observe.application.swing.ui.content.table; import fr.ird.observe.application.swing.ObserveSwingTechnicalException; -import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.application.swing.ui.content.ContentUIModel; +import fr.ird.observe.services.dto.IdDto; import org.apache.commons.lang3.reflect.ConstructorUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -116,7 +116,7 @@ public abstract class ContentTableUIModel<E extends IdDto, D extends IdDto> exte } - protected abstract ContentTableModel<E, D> createTableModel(ObserveContentTableUI<E, D> ui, List<ContentTableMeta<D>> metas) ; + protected abstract ContentTableModel<E, D> createTableModel(ObserveContentTableUI<E, D> ui, List<ContentTableMeta<D>> metas); public Class<D> getChildType() { return childType; @@ -205,6 +205,13 @@ public abstract class ContentTableUIModel<E extends IdDto, D extends IdDto> exte firePropertyChange(PROPERTY_SHOW_DATA, oldValue, showData); } + @Override + public void destroy() { + super.destroy(); + tableEditBean = null; + tableModel = null; + } + protected BinderModelBuilder<D, D> prepareChildLoador(String binderName) { String[] properties = getChildProperties(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIHandler.java index 49ad3f3..e497070 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUIHandler.java @@ -557,6 +557,8 @@ public class StorageUIHandler { } catch (Exception ex) { UIHelper.handlingError(ex); throw new RuntimeException(ex); + } finally { + ObserveRunner.cleanMemory(); } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUILauncher.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUILauncher.java index c407b69..441f2eb 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUILauncher.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/storage/StorageUILauncher.java @@ -21,6 +21,7 @@ */ package fr.ird.observe.application.swing.ui.storage; +import fr.ird.observe.application.swing.ObserveRunner; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.application.swing.configuration.constants.DbMode; @@ -120,6 +121,9 @@ public class StorageUILauncher extends WizardUILancher<StorageStep, StorageUIMod super.doClose(ui, wasCanceled); ui.getModel().setBusy(false); ui.dispose(); + + ObserveRunner.cleanMemory(); + } /** @@ -153,10 +157,10 @@ public class StorageUILauncher extends WizardUILancher<StorageStep, StorageUIMod model.setExcludeSteps( Arrays.asList(StorageStep.SELECT_DATA, - StorageStep.BACKUP, - StorageStep.CONFIG_REFERENTIEL, - StorageStep.CONFIG_DATA, - StorageStep.ROLES) + StorageStep.BACKUP, + StorageStep.CONFIG_REFERENTIEL, + StorageStep.CONFIG_DATA, + StorageStep.ROLES) ); model.setCanCreateLocalService(modes.contains(DbMode.CREATE_LOCAL)); model.setCanUseLocalService(modes.contains(DbMode.USE_LOCAL)); @@ -185,8 +189,7 @@ public class StorageUILauncher extends WizardUILancher<StorageStep, StorageUIMod @Override protected void doAction(StorageUI ui) { super.doAction(ui); - StorageUIHandler handler = getStorageUIHandler(); - handler.doChangeStorage(ui.getModel()); + ui.getHandler().doChangeStorage(ui.getModel()); } }.start(); @@ -272,13 +275,13 @@ public class StorageUILauncher extends WizardUILancher<StorageStep, StorageUIMod model.setCanUseServerService(true); model.setExcludeSteps(Arrays.asList( - StorageStep.CHOOSE_DB_MODE, - StorageStep.CONFIG_REFERENTIEL, - StorageStep.CONFIG_DATA, - StorageStep.SELECT_DATA, - StorageStep.ROLES, - StorageStep.BACKUP, - StorageStep.CONFIRM) + StorageStep.CHOOSE_DB_MODE, + StorageStep.CONFIG_REFERENTIEL, + StorageStep.CONFIG_DATA, + StorageStep.SELECT_DATA, + StorageStep.ROLES, + StorageStep.BACKUP, + StorageStep.CONFIRM) ); model.setSteps(StorageStep.CONFIG); model.updateUniverse(); @@ -382,7 +385,7 @@ public class StorageUILauncher extends WizardUILancher<StorageStep, StorageUIMod if (log.isDebugEnabled()) { log.debug("Only one mode available [" + mode + - "], set it in model"); + "], set it in model"); } // un seul mode possible, on le sélectionne @@ -443,12 +446,12 @@ public class StorageUILauncher extends WizardUILancher<StorageStep, StorageUIMod // exclusion des étapes non requises model.setExcludeSteps(Arrays.asList( - StorageStep.SELECT_DATA, - StorageStep.CONFIG_REFERENTIEL, - StorageStep.CONFIG_DATA, - StorageStep.ROLES, - StorageStep.BACKUP, - StorageStep.CONFIRM) + StorageStep.SELECT_DATA, + StorageStep.CONFIG_REFERENTIEL, + StorageStep.CONFIG_DATA, + StorageStep.ROLES, + StorageStep.BACKUP, + StorageStep.CONFIRM) ); model.setSteps(StorageStep.CONFIG); model.updateUniverse(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.