Author: tchemit Date: 2013-10-19 15:06:51 +0200 (Sat, 19 Oct 2013) New Revision: 854 Url: http://forge.codelutin.com/projects/echobase/repository/revisions/854 Log: fixes #3550: Impossible de red?\195?\169ploy?\195?\169 ?\195?\160 chaud l'application Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBaseEntityHelper.java trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationContext.java Modified: trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBaseEntityHelper.java =================================================================== --- trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBaseEntityHelper.java 2013-09-17 17:31:52 UTC (rev 853) +++ trunk/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/EchoBaseEntityHelper.java 2013-10-19 13:06:51 UTC (rev 854) @@ -37,6 +37,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import java.sql.Statement; /** * helper about topia context and jdbc connections. @@ -55,6 +56,28 @@ return tx; } + public static void releaseH2RootContext(TopiaContext context) throws SQLException { + + TopiaContextImplementor rootContext = ((TopiaContextImplementor) context).getRootContext(); + + String url = (String) rootContext.getConfig().get(TopiaContextFactory.CONFIG_URL); + String login = (String) rootContext.getConfig().get(TopiaContextFactory.CONFIG_USER); + String password = (String) rootContext.getConfig().get(TopiaContextFactory.CONFIG_PASS); + + releaseRootContext(context); + + Connection conn = DriverManager.getConnection(url, login, password); + + try { + Statement statement = conn.createStatement(); + statement.execute("SHUTDOWN;"); + statement.close(); + conn.close(); + } finally { + conn.close(); + } + } + public static void releaseRootContext(TopiaContext context) { TopiaContext rootContext = ((TopiaContextImplementor) context).getRootContext(); Modified: trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationContext.java =================================================================== --- trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationContext.java 2013-09-17 17:31:52 UTC (rev 853) +++ trunk/echobase-ui/src/main/java/fr/ifremer/echobase/ui/EchoBaseApplicationContext.java 2013-10-19 13:06:51 UTC (rev 854) @@ -48,6 +48,7 @@ import javax.servlet.ServletContext; import java.beans.Introspector; +import java.sql.SQLException; import java.util.Locale; import java.util.Map; import java.util.Set; @@ -232,7 +233,13 @@ if (internalRootContext != null) { // release internal db - EchoBaseEntityHelper.releaseRootContext(internalRootContext); + try { + EchoBaseEntityHelper.releaseH2RootContext(internalRootContext); + } catch (SQLException e) { + if (log.isErrorEnabled()) { + log.error("Could not close internal db", e); + } + } } } finally { @@ -269,27 +276,4 @@ this.configuration = configuration; } -// protected final EventListenerList listenerList = new EventListenerList(); -// -// public void addWorkingDbChangeListener(WorkingDbChangeListener listener) { -// listenerList.add(WorkingDbChangeListener.class, listener); -// } -// -// public void removeWorkingDbChangeListener(WorkingDbChangeListener listener) { -// listenerList.remove(WorkingDbChangeListener.class, listener); -// } -// -// public void fireVoyageChangeEvent(String jdbcUrl, String voyageId) { -// VoyageChangedEvent event = new VoyageChangedEvent(jdbcUrl, voyageId); -// for (WorkingDbChangeListener listener : listenerList.getListeners(WorkingDbChangeListener.class)) { -// listener.onVoyageChanged(event); -// } -// } -// -// public void fireDbChangeEvent(String jdbcUrl) { -// DbChangedEvent event = new DbChangedEvent(jdbcUrl); -// for (WorkingDbChangeListener listener : listenerList.getListeners(WorkingDbChangeListener.class)) { -// listener.onDbChanged(event); -// } -// } }