Author: tchemit Date: 2013-10-31 23:35:50 +0100 (Thu, 31 Oct 2013) New Revision: 2856 Url: http://nuiton.org/projects/topia/repository/revisions/2856 Log: fixes #2882: Hibernate factory is closed by a child context Modified: branches/topia-3.0-alpha-3.1/topia-persistence/src/main/java/org/nuiton/topia/framework/AbstractTopiaContext.java branches/topia-3.0-alpha-3.1/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java Modified: branches/topia-3.0-alpha-3.1/topia-persistence/src/main/java/org/nuiton/topia/framework/AbstractTopiaContext.java =================================================================== --- branches/topia-3.0-alpha-3.1/topia-persistence/src/main/java/org/nuiton/topia/framework/AbstractTopiaContext.java 2013-10-31 22:33:17 UTC (rev 2855) +++ branches/topia-3.0-alpha-3.1/topia-persistence/src/main/java/org/nuiton/topia/framework/AbstractTopiaContext.java 2013-10-31 22:35:50 UTC (rev 2856) @@ -904,7 +904,7 @@ } } - // on se desenregistre du context pere et on ferme les connexions si + // on se desenregistre du context pere et on ferme les connexions si // on est pas le root context if (!equals(getRootContext())) { closed = true; @@ -927,16 +927,25 @@ } /** - * Pour le context root on ferme tous les fils, et la factory hibernate. + * tchemit 2013-01-31 : do nothing on finalize we MUST control cleaning + * of resources. + * + * //Pour le context root on ferme tous les fils, et la factory hibernate. */ @Override protected void finalize() throws Throwable { - if (hibernateFactory != null) { - closeContext(); - hibernateFactory.close(); - closed = true; - log.debug("TopiaContext finalized"); +// if (hibernateFactory != null) { +// closeContext(); +// hibernateFactory.close(); +// closed = true; +// log.debug("TopiaContext finalized"); +// } + if (!closed) { + + // means resource was not well closed, can't accept this! + throw new TopiaException("TopiaContext "+this+" was not closed!"); } + super.finalize(); } @Override @@ -1264,7 +1273,12 @@ Query query = tx.getHibernate().createSQLQuery(sql); query.executeUpdate(); tx.closeContext(); - root.finalize(); + // Do not invoke finalize here, we are not garbage collector... + // duplicate then the previous code of the finalize method + root.closeContext(); + root.hibernateFactory.close(); + root.closed = true; +// root.finalize(); } catch (Throwable eee) { throw new TopiaException( String.format("Error %s on clear operation", eee.getMessage()), eee); Modified: branches/topia-3.0-alpha-3.1/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java =================================================================== --- branches/topia-3.0-alpha-3.1/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java 2013-10-31 22:33:17 UTC (rev 2855) +++ branches/topia-3.0-alpha-3.1/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaConnectionProvider.java 2013-10-31 22:35:50 UTC (rev 2856) @@ -290,8 +290,8 @@ @Override public void stop() { - if (log.isDebugEnabled()) { - log.debug("cleaning up connection pool: " + url); + if (log.isInfoEnabled()) { + log.info("cleaning up connection pool: " + url); } for (Connection connection : pool) {