This is an automated email from the git hooks/post-receive script. New commit to branch develop-4.x in repository tutti. See http://git.codelutin.com/tutti.git commit 1e9e102851ed5a56326cc26cefd93ce5991695db Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Jan 13 18:23:57 2016 +0100 Faire un compactage de la base avant la fermeture --- .../fr/ird/observe/ObserveApplicationContext.java | 19 --------- .../java/fr/ird/observe/db/impl/H2DataSource.java | 16 ++++++++ .../main/java/fr/ird/observe/ObserveContext.java | 47 +++++++++++++++++++++- 3 files changed, 62 insertions(+), 20 deletions(-) diff --git a/observe-business/src/main/java/fr/ird/observe/ObserveApplicationContext.java b/observe-business/src/main/java/fr/ird/observe/ObserveApplicationContext.java index a93612d..8d5608e 100644 --- a/observe-business/src/main/java/fr/ird/observe/ObserveApplicationContext.java +++ b/observe-business/src/main/java/fr/ird/observe/ObserveApplicationContext.java @@ -24,7 +24,6 @@ package fr.ird.observe; import fr.ird.observe.db.DataContext; import fr.ird.observe.db.DataSource; import fr.ird.observe.db.DataSourceFactory; -import fr.ird.observe.db.impl.H2DataSource; import fr.ird.observe.entities.constants.ReferenceLocale; import fr.ird.observe.gps.GPSService; import fr.ird.observe.validation.ObserveValidator; @@ -36,7 +35,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; -import java.io.File; import java.util.Locale; /** @@ -209,23 +207,6 @@ public class ObserveApplicationContext extends DefaultApplicationContext { } // fermeture du context de données - DataSource dataSource = getDataSource(); - if (dataSource != null) { - - setDataSource(null); - - if (dataSource.isOpen() && dataSource instanceof H2DataSource) { - - // On effectue une sauvegarde de la base locale (voir #7866) - - File backupFile = getConfig().newLocalDataSourceBackupFile(); - - log.info(String.format("Sauvegarde de la base locale : %s", backupFile)); - dataSource.storeDB(backupFile); - } - - } - getValidationContext().closeDataSource(); // fermeture des services de persistances ouverts diff --git a/observe-business/src/main/java/fr/ird/observe/db/impl/H2DataSource.java b/observe-business/src/main/java/fr/ird/observe/db/impl/H2DataSource.java index bba2e4d..de2e107 100644 --- a/observe-business/src/main/java/fr/ird/observe/db/impl/H2DataSource.java +++ b/observe-business/src/main/java/fr/ird/observe/db/impl/H2DataSource.java @@ -152,4 +152,20 @@ public class H2DataSource extends AbstractDataSource { closeTransaction(tx, txName); } } + + public void shutdown() { + + if (log.isInfoEnabled()) { + log.info("Do a shutdown compact on h2 database: "+getLabel()); + } + + + TopiaContext tx = rootCtxt.beginTransaction(); + try { + tx.executeSQL("SHUTDOWN COMPACT;"); + } finally { + tx.closeContext(); + } + + } } diff --git a/observe-swing/src/main/java/fr/ird/observe/ObserveContext.java b/observe-swing/src/main/java/fr/ird/observe/ObserveContext.java index da6a48f..2abc6a0 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ObserveContext.java +++ b/observe-swing/src/main/java/fr/ird/observe/ObserveContext.java @@ -24,15 +24,16 @@ package fr.ird.observe; import fr.ird.observe.db.DataContext; import fr.ird.observe.db.DataSource; import fr.ird.observe.db.DataSourceException; +import fr.ird.observe.db.DataSourceFactory; import fr.ird.observe.db.constants.DbMode; import fr.ird.observe.db.event.DataSourceEvent; import fr.ird.observe.db.event.DataSourceListenerAdapter; import fr.ird.observe.db.impl.H2DataSource; -import fr.ird.observe.ui.actions.ChangeStorageAction; import fr.ird.observe.ui.ObserveMainUI; import fr.ird.observe.ui.ObserveMainUIHandler; import fr.ird.observe.ui.ObserveUIMode; import fr.ird.observe.ui.UIHelper; +import fr.ird.observe.ui.actions.ChangeStorageAction; import fr.ird.observe.ui.actions.shared.AbstractUIAction; import fr.ird.observe.ui.actions.shared.CancelCreateUIAction; import fr.ird.observe.ui.actions.shared.CloseAndCreateUIAction; @@ -60,6 +61,7 @@ import javax.swing.ActionMap; import javax.swing.JOptionPane; import javax.swing.JPanel; import java.awt.Component; +import java.io.File; import java.util.Arrays; import java.util.List; @@ -580,6 +582,49 @@ public class ObserveContext extends ObserveApplicationContext { actionMap.put(actionId, action); } + /** + * close the application's context. + * + * @throws Exception if any pb while closing + */ + public void close() throws Exception { + + DataSource dataSource = getDataSource(); + if (dataSource != null) { + + setDataSource(null); + + if (dataSource.isOpen() && dataSource instanceof H2DataSource) { + + // On effectue une sauvegarde de la base locale (voir #7866) + + H2DataSource h2DataSource = (H2DataSource) dataSource; + + File backupFile = getConfig().newLocalDataSourceBackupFile(); + + log.info(String.format("Sauvegarde de la base locale : %s", backupFile)); + h2DataSource.storeDB(backupFile); + + h2DataSource.shutdown(); + + } + + } + + super.close(); + + // fermeture du context de données + getValidationContext().closeDataSource(); + + // fermeture des services de persistances ouverts + DataSourceFactory.dispose(); + + // fermeture du context principal + clear(); + + ObserveServiceHelper.close(); + } + // @SuppressWarnings({"UseOfObsoleteCollectionType"}) // protected ObjectName createMBean(DataSource source) throws MalformedObjectNameException { // Hashtable<String, String> tb = new Hashtable<String, String>(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.