Index: topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java diff -u topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.46 topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.47 --- topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java:1.46 Fri Jan 5 15:09:17 2007 +++ topia2/src/java/org/codelutin/topia/framework/TopiaContextImpl.java Mon Jan 15 13:38:51 2007 @@ -23,9 +23,9 @@ * * @author poussin * - * @version $Revision: 1.46 $ + * @version $Revision: 1.47 $ * - * Last update: $Date: 2007/01/05 15:09:17 $ by : $Author: bpoussin $ + * Last update: $Date: 2007/01/15 13:38:51 $ by : $Author: bpoussin $ */ package org.codelutin.topia.framework; @@ -710,13 +710,19 @@ } } -// /* (non-Javadoc) -// * @see java.lang.Object#finalize() -// */ -// @Override -// protected void finalize() throws Throwable { -// closeContext(); -// } + /** + * Pour le context root on ferme tous les fils, et la factory hibernate + * @see java.lang.Object#finalize() + */ + @Override + protected void finalize() throws Throwable { + if (hibernateFactory != null) { + closeContext(); + hibernateFactory.close(); + this.closed = true; + log.debug("TopiaContext finalized"); + } + } public boolean isClosed() { return closed; @@ -1020,6 +1026,28 @@ } } + /** + * Only h2 supported for now + * @see org.codelutin.topia.TopiaContext#clear(boolean) + */ + public void clear(boolean dropDatabase) throws TopiaException { + try { + TopiaContextImpl root = (TopiaContextImpl)getRootContext(); + root.closeContext(); + TopiaContextImpl tx = (TopiaContextImpl)root.beginTransaction(); + + String sql = "DROP ALL OBJECTS"; + if (dropDatabase) { + sql += " DELETE FILES"; + } + Query query = tx.getHibernate().createSQLQuery(sql); + query.executeUpdate(); + root.finalize(); + } catch (Throwable eee) { + throw new TopiaException("Can't clear topia context", eee); + } + } + /* Adders */ public void addTopiaEntityListener(TopiaEntityListener listener) { getFiresSupport().addTopiaEntityListener(listener);