branch develop-5.x updated (2fc4c04 -> 7b51fa3)
This is an automated email from the git hooks/post-receive script. New change to branch develop-5.x in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git from 2fc4c04 Problèmes de fiabilité/rafraichissement sur le formulaire LL Captures (fixes #8859) new 06b14f2 refs #8863 Bien nettoyer les modèles d'actions à la fin new f1b69a8 refs #8863 Prévenir des fuites mémoires en recréant à chaque fois les ui (c'est un shouya plus lent, mais très stable en empreinte mémoire) new 21c89db refs #8863 Prévenir des fuites mémoires quand on change de source + réusinage des dernières modifications new 7b51fa3 Problèmes de gestion mémoire lors d'exports de marées en mode classique & serveur (Fixes #8863) Merge branch 'feature/8863' into develop-5.x The 4 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 7b51fa36ace10a18022593d4932edb0ec3235f6f Merge: 2fc4c04 21c89db Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Dec 14 09:57:35 2016 +0100 Problèmes de gestion mémoire lors d'exports de marées en mode classique & serveur (Fixes #8863) Merge branch 'feature/8863' into develop-5.x 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 commit f1b69a86b0339d11ca2539b97832c924db288a4d Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Dec 14 09:39:59 2016 +0100 refs #8863 Prévenir des fuites mémoires en recréant à chaque fois les ui (c'est un shouya plus lent, mais très stable en empreinte mémoire) commit 06b14f294bcc431565566fa548630398018a469e Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Dec 14 08:52:18 2016 +0100 refs #8863 Bien nettoyer les modèles d'actions à la fin Summary of changes: .../observe/application/swing/ObserveRunner.java | 5 ++ .../swing/db/ObserveSwingDataSource.java | 4 ++ .../application/swing/ui/ObserveMainUIHandler.java | 23 ++++---- .../swing/ui/admin/AdminUILauncher.java | 65 +++++++++++----------- .../application/swing/ui/admin/AdminUIModel.java | 3 + .../swing/ui/admin/report/ReportModel.java | 11 +++- .../admin/synchronize/data/DataSynchroModel.java | 10 ++++ .../referential/legacy/SynchronizeModel.java | 12 +++- .../referential/ng/ReferentialSynchroModel.java | 16 ++++-- .../swing/ui/admin/validate/ValidateModel.java | 4 ++ .../application/swing/ui/content/ContentUI.jaxx | 4 ++ .../swing/ui/content/ContentUIHandler.java | 13 ++++- .../swing/ui/content/ContentUIManager.java | 17 ++++-- .../swing/ui/content/ContentUIModel.java | 6 ++ .../swing/ui/content/ObserveContentUI.java | 2 + .../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 +++++++------- pom.xml | 2 +- 20 files changed, 181 insertions(+), 83 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 06b14f294bcc431565566fa548630398018a469e Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Dec 14 08:52:18 2016 +0100 refs #8863 Bien nettoyer les modèles d'actions à la fin --- .../swing/ui/admin/AdminUILauncher.java | 65 +++++++++++----------- .../application/swing/ui/admin/AdminUIModel.java | 3 + .../swing/ui/admin/report/ReportModel.java | 11 +++- .../admin/synchronize/data/DataSynchroModel.java | 10 ++++ .../referential/legacy/SynchronizeModel.java | 12 +++- .../referential/ng/ReferentialSynchroModel.java | 16 ++++-- .../swing/ui/admin/validate/ValidateModel.java | 4 ++ 7 files changed, 79 insertions(+), 42 deletions(-) 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 653fb56..43963dc 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 @@ -157,10 +157,10 @@ public class AdminUILauncher extends WizardUILancher<AdminStep, AdminUIModel, Ad log.info("closing dialog " + e.getWindow().getName()); } if (AdminUILauncher.this.ui.getModel().getModelState() - != WizardState.CANCELED) { + != WizardState.CANCELED) { if (log.isInfoEnabled()) { log.info("cancel panel from dialog !" + - e.getWindow().getName()); + e.getWindow().getName()); } AdminUILauncher.this.ui.cancel(); } @@ -216,44 +216,45 @@ public class AdminUILauncher extends WizardUILancher<AdminStep, AdminUIModel, Ad log.info(this + ", was canceled ? " + wasCanceled); } - ObserveMainUI mainUI = null; - AdminUIModel model = ui.getModel(); - try { - + model.doCloseSource(model.getCentralSource(), false); + model.doCloseSource(model.getLocalSource(), false); - model.doCloseSource(model.getCentralSource(), false); - model.doCloseSource(model.getLocalSource(), false); + model.destroy(); + ui.dispose(); - if (!(parent instanceof ObserveMainUI)) { - JDialog dialog = (JDialog) parent; - if (log.isInfoEnabled()) { - log.info("dispose ui!"); - } - ui.dispose(); - dialog.setVisible(false); - dialog.dispose(); - if (log.isInfoEnabled()) { - log.info("After dispose."); - } - ObserveSwingApplicationContext.get().releaseLock(); - return; + if (!(parent instanceof ObserveMainUI)) { + JDialog dialog = (JDialog) parent; + if (log.isInfoEnabled()) { + log.info("dispose ui!"); + } + dialog.setVisible(false); + dialog.dispose(); + if (log.isInfoEnabled()) { + log.info("After dispose."); } + ObserveSwingApplicationContext.get().releaseLock(); + return; + } - mainUI = (ObserveMainUI) parent; - mainUI.getSynchroWizard().remove(ui); - mainUI.removeContextValue(model.getClass()); + ObserveMainUI mainUI = (ObserveMainUI) parent; + mainUI.getSynchroWizard().remove(ui); + mainUI.removeContextValue(model.getClass()); + System.runFinalization(); + System.gc(); - ObserveSwingDataSource source = model.getPreviousSource(); + ObserveSwingDataSource source = model.getPreviousSource(); - if (source == null) { + if (source == null) { - // pas de service auparavant - mainUI.setMode(ObserveUIMode.NO_DB); - return; - } + // pas de service auparavant + mainUI.setMode(ObserveUIMode.NO_DB); + return; + } + + try { model.doCloseSource(source, false); @@ -267,9 +268,7 @@ public class AdminUILauncher extends WizardUILancher<AdminStep, AdminUIModel, Ad // on a pas reussit a reouvrir la base precedente UIHelper.handlingError("Could not close", e); - if (mainUI != null) { - mainUI.setMode(ObserveUIMode.NO_DB); - } + mainUI.setMode(ObserveUIMode.NO_DB); } } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java index f001ac4..9067efc 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/AdminUIModel.java @@ -845,6 +845,9 @@ public class AdminUIModel extends WizardExtModel<AdminStep> { localSourceModel.destroy(); centralSourceModel.destroy(); selectionDataModel.destroy(); + for (AdminStep adminStep : getOperations()) { + getStepModel(adminStep).destroy(); + } super.destroy(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/report/ReportModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/report/ReportModel.java index 9c57972..a22a13a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/report/ReportModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/report/ReportModel.java @@ -35,7 +35,6 @@ import java.net.URL; import java.util.List; import java.util.Map; import java.util.TreeMap; -import java.util.regex.Pattern; import java.util.stream.Collectors; /** @@ -66,8 +65,6 @@ public class ReportModel extends AdminActionModel { public static final String VALID_PROPERTY_NAME = "valid"; - public static final Pattern REPORT_DEFINITION_PATTERN = Pattern.compile("report.(\\w+).name"); - /** Logger. */ private static final Log log = LogFactory.getLog(ReportModel.class); @@ -112,6 +109,14 @@ public class ReportModel extends AdminActionModel { addPropertyChangeListener(REPORT_FILE_PROPERTY_NAME, evt -> updateReports()); } + @Override + public void destroy() { + super.destroy(); + variables.clear(); + resultModel = null; + reports = null; + } + public List<Report> loadReports(URL resource) throws IOException { ReportBuilder builder = new ReportBuilder(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/data/DataSynchroModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/data/DataSynchroModel.java index 881dcb8..1551ae1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/data/DataSynchroModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/data/DataSynchroModel.java @@ -76,6 +76,16 @@ public class DataSynchroModel extends AdminActionModel { } + @Override + public void destroy() { + super.destroy(); + leftSelectionDataModel.destroy(); + rightSelectionDataModel.destroy(); + tasks.clear(); + leftSource = null; + rightSource = null; + } + public ObserveSwingDataSource getLeftSource() { return leftSource; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/legacy/SynchronizeModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/legacy/SynchronizeModel.java index cc9b176..2a0a12f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/legacy/SynchronizeModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/legacy/SynchronizeModel.java @@ -22,12 +22,12 @@ package fr.ird.observe.application.swing.ui.admin.synchronize.referential.legacy; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; +import fr.ird.observe.application.swing.ui.admin.AdminActionModel; +import fr.ird.observe.application.swing.ui.admin.AdminStep; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeCallbackResults; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeContext; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeEngine; import fr.ird.observe.services.service.actions.synchro.referential.legacy.UnidirectionalReferentialSynchronizeResult; -import fr.ird.observe.application.swing.ui.admin.AdminActionModel; -import fr.ird.observe.application.swing.ui.admin.AdminStep; import jaxx.runtime.swing.model.JaxxDefaultListModel; import javax.swing.DefaultListSelectionModel; @@ -117,8 +117,16 @@ public class SynchronizeModel extends AdminActionModel { return obsoleteReferencesSelectionModel; } + @Override public void destroy() { + super.destroy(); obsoleteReferencesSelectionModel.clearSelection(); obsoleteReferences.clear(); + referentialSynchronizeCallbackResults = null; + referentialSynchronizeResult = null; + centralSource = null; + source = null; + engine = null; + referentialSynchronizeContext = null; } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java index 2c34e99..4b99827 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java @@ -37,8 +37,6 @@ import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; import fr.ird.observe.services.service.actions.synchro.referential.diff.ReferentialSynchronizeDiffsEngine; import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeService; import fr.ird.observe.services.service.actions.synchro.referential.ng.ReferentialSynchronizeServiceEngine; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import java.util.ArrayList; import java.util.List; @@ -69,8 +67,7 @@ public class ReferentialSynchroModel extends AdminActionModel { public static final String DESACTIVATE_WITH_REPLACE_LEFT_PROPERTY_NAME = "desactivateWithReplaceLeft"; public static final String REVERT_RIGHT_PROPERTY_NAME = "revertRight"; public static final String REVERT_LEFT_PROPERTY_NAME = "revertLeft"; - /** Logger. */ - private static final Log log = LogFactory.getLog(ReferentialSynchroModel.class); + private final ReferentialSynchronizeTaskListModel tasks; private ObserveSwingDataSource leftSource; private ObserveSwingDataSource rightSource; @@ -96,6 +93,17 @@ public class ReferentialSynchroModel extends AdminActionModel { this.tasks = new ReferentialSynchronizeTaskListModel(); } + @Override + public void destroy() { + super.destroy(); + tasks.clear(); + leftSource = null; + rightSource = null; + leftTreeModel = null; + rightTreeModel = null; + engine = null; + } + public ReferentialSynchronizeMode getSynchronizeMode() { return synchronizeMode; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/validate/ValidateModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/validate/ValidateModel.java index d92b3fa..8f3a393 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/validate/ValidateModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/validate/ValidateModel.java @@ -103,6 +103,7 @@ public class ValidateModel extends AdminActionModel { messages = new TreeMap<>(); } + /** * @return le nom par defaut du rapport de validation à enregistrer. */ @@ -253,6 +254,9 @@ public class ValidateModel extends AdminActionModel { if (validators != null) { validators = null; } + if (allValidators != null) { + allValidators = null; + } } public ImmutableSet<ValidatorDto> getAllValidators() { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 f1b69a86b0339d11ca2539b97832c924db288a4d Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Dec 14 09:39:59 2016 +0100 refs #8863 Prévenir des fuites mémoires en recréant à chaque fois les ui (c'est un shouya plus lent, mais très stable en empreinte mémoire) --- .../application/swing/ui/ObserveMainUIHandler.java | 21 ++++++++++++--------- .../application/swing/ui/content/ContentUI.jaxx | 4 ++++ .../swing/ui/content/ContentUIHandler.java | 13 +++++++++++-- .../swing/ui/content/ContentUIManager.java | 17 +++++++++++++---- .../swing/ui/content/ContentUIModel.java | 6 ++++++ .../swing/ui/content/ObserveContentUI.java | 2 ++ pom.xml | 2 +- 7 files changed, 49 insertions(+), 16 deletions(-) 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 c0fcea6..21d4de4 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 @@ -22,23 +22,23 @@ package fr.ird.observe.application.swing.ui; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.application.swing.decoration.DecoratorService; import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; +import fr.ird.observe.application.swing.decoration.DecoratorService; import fr.ird.observe.application.swing.decoration.ObserveI18nDecoratorHelper; -import fr.ird.observe.services.dto.AbstractObserveDto; -import fr.ird.observe.services.dto.constants.ReferentialLocale; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.ContentUIManager; import fr.ird.observe.application.swing.ui.content.ContentUIModel; import fr.ird.observe.application.swing.ui.content.ObserveContentUI; import fr.ird.observe.application.swing.ui.tree.ObserveNavigationTreeShowPopupAction; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.util.ObserveSwingValidatorMessageTableModel; import fr.ird.observe.application.swing.ui.util.ObserveValidatorMessageTableRenderer; +import fr.ird.observe.services.dto.AbstractObserveDto; +import fr.ird.observe.services.dto.constants.ReferentialLocale; import jaxx.runtime.JAXXContext; import jaxx.runtime.context.DefaultApplicationContext; import jaxx.runtime.context.JAXXInitialContext; @@ -159,16 +159,19 @@ public class ObserveMainUIHandler { DataContext context = ui.getDataContext(); context.populateSelectedIds(selectedIds); - // on recherche l'ui (voir si elle existe déjà) - ObserveContentUI<?> content = manager.getContent(uiClass); - - if (content == null) { + ContentUI<?> previousSelectedContent = manager.getSelectedContentUI(); - content = manager.createContent(uiClass); + if (previousSelectedContent != null) { + manager.removeSelectedContentUI(); } + ObserveContentUI<?> content = manager.createContent(uiClass); + // on ouvre l'écran manager.openContent(content); + + System.runFinalization(); + System.gc(); } /** diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jaxx index 8e391c8..beaa72c 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jaxx @@ -99,6 +99,10 @@ public boolean close() { return getHandler().closeUI(); } +public void destroy() { + getHandler().destroyUI(); +} + public void startEdit(E o) { getHandler().startEditUI(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java index 624f997..dc29e4c 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java @@ -37,9 +37,9 @@ import fr.ird.observe.application.swing.decoration.decorators.ReferentialReferen import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; import fr.ird.observe.application.swing.ui.content.ref.ContentReferenceUIHandler; -import fr.ird.observe.application.swing.ui.tree.renderer.AbstractObserveTreeCellRenderer; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; +import fr.ird.observe.application.swing.ui.tree.renderer.AbstractObserveTreeCellRenderer; import fr.ird.observe.application.swing.ui.util.SpringUtilities; import fr.ird.observe.application.swing.validation.ValidationContext; import fr.ird.observe.services.dto.AbstractObserveDto; @@ -55,6 +55,7 @@ import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.ReferentialReferenceSet; import fr.ird.observe.services.dto.referential.ReferentialReferences; import jaxx.runtime.JAXXContext; +import jaxx.runtime.context.DefaultJAXXContext; import jaxx.runtime.swing.editor.bean.BeanComboBox; import jaxx.runtime.swing.editor.bean.BeanListHeader; import jaxx.runtime.validator.swing.SwingValidatorMessageTableModel; @@ -307,6 +308,14 @@ public abstract class ContentUIHandler<E extends IdDto> { } + public void destroyUI() { + UIHelper.removeAllDataBindings(getUi()); + getModel().destroy(); + UIHelper.destroy((Component) getUi()); + DefaultJAXXContext delegateContext = (DefaultJAXXContext) getUi().getDelegateContext(); + delegateContext.clear(); + } + public void openUI() { boolean canWrite = computeCanWrite(getDataSource()); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIManager.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIManager.java index 959f06f..4f96d55 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIManager.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIManager.java @@ -253,9 +253,9 @@ public class ContentUIManager { String constraints = uiClass.getName(); - if (getLayout().contains(constraints)) { - throw new IllegalStateException("Already existing constrainst [" + constraints + "]"); - } +// if (getLayout().contains(constraints)) { +// throw new IllegalStateException("Already existing constrainst [" + constraints + "]"); +// } U result; try { Constructor<U> constructor = uiClass.getConstructor(JAXXContext.class); @@ -346,6 +346,15 @@ public class ContentUIManager { return closed; } + public void removeSelectedContentUI() { + + ContentUI<?> selectedContentUI = getSelectedContentUI(); + if (selectedContentUI != null) { + getLayout().removeLayoutComponent(selectedContentUI, selectedContentUI.getClass().getName()); + selectedContentUI.destroy(); + } + } + @Override protected void finalize() throws Throwable { super.finalize(); @@ -402,7 +411,7 @@ public class ContentUIManager { String contextValue = context instanceof Class ? ((Class) context).getName() : (context == null ? null : context.toString()); String key = getMappingKey(prefix, klass, contextValue); if (log.isDebugEnabled()) { - log.debug("Add key: "+key+" → "+contentClass.getName()); + log.debug("Add key: " + key + " → " + contentClass.getName()); } mapping.put(key, (Class<? extends ContentUI<?>>) contentClass); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIModel.java index d3af38f..d63841f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIModel.java @@ -328,4 +328,10 @@ public abstract class ContentUIModel<E extends IdDto> extends AbstractSerializab return (DataReferenceSet<R>) referenceSet; } + public void destroy() { + dataReferenceSetsByPropertyName = null; + referentialReferenceSetsByPropertyName = null; + form = null; + bean = null; + } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveContentUI.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveContentUI.java index 1b4ce00..3a67979 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveContentUI.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveContentUI.java @@ -62,6 +62,8 @@ public interface ObserveContentUI<E extends IdDto> extends JAXXObject { boolean close(); + void destroy(); + void stopEdit(); void startEdit(E bean); diff --git a/pom.xml b/pom.xml index 381c97a..aa1c56b 100644 --- a/pom.xml +++ b/pom.xml @@ -162,7 +162,7 @@ <processorPluginVersion>1.3</processorPluginVersion> <topiaVersion>3.1.4</topiaVersion> - <jaxxVersion>2.35</jaxxVersion> + <jaxxVersion>2.36-SNAPSHOT</jaxxVersion> <nuitonI18nVersion>3.6.2</nuitonI18nVersion> <nuitonValidatorVersion>3.0.1</nuitonValidatorVersion> <nuitonUtilsVersion>3.0-rc-15</nuitonUtilsVersion> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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>.
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 7b51fa36ace10a18022593d4932edb0ec3235f6f Merge: 2fc4c04 21c89db Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Dec 14 09:57:35 2016 +0100 Problèmes de gestion mémoire lors d'exports de marées en mode classique & serveur (Fixes #8863) Merge branch 'feature/8863' into develop-5.x .../observe/application/swing/ObserveRunner.java | 5 ++ .../swing/db/ObserveSwingDataSource.java | 4 ++ .../application/swing/ui/ObserveMainUIHandler.java | 23 ++++---- .../swing/ui/admin/AdminUILauncher.java | 65 +++++++++++----------- .../application/swing/ui/admin/AdminUIModel.java | 3 + .../swing/ui/admin/report/ReportModel.java | 11 +++- .../admin/synchronize/data/DataSynchroModel.java | 10 ++++ .../referential/legacy/SynchronizeModel.java | 12 +++- .../referential/ng/ReferentialSynchroModel.java | 16 ++++-- .../swing/ui/admin/validate/ValidateModel.java | 4 ++ .../application/swing/ui/content/ContentUI.jaxx | 4 ++ .../swing/ui/content/ContentUIHandler.java | 13 ++++- .../swing/ui/content/ContentUIManager.java | 17 ++++-- .../swing/ui/content/ContentUIModel.java | 6 ++ .../swing/ui/content/ObserveContentUI.java | 2 + .../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 +++++++------- pom.xml | 2 +- 20 files changed, 181 insertions(+), 83 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm