Author: tchemit Date: 2013-07-13 23:07:58 +0200 (Sat, 13 Jul 2013) New Revision: 2761 Url: http://nuiton.org/projects/topia/repository/revisions/2761 Log: fixes #2757: ConnectionProvider is not closed when closing root context Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java Modified: trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java =================================================================== --- trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2013-07-13 13:16:04 UTC (rev 2760) +++ trunk/topia-persistence/src/main/java/org/nuiton/topia/framework/TopiaContextImpl.java 2013-07-13 21:07:58 UTC (rev 2761) @@ -43,6 +43,8 @@ import org.hibernate.jdbc.Work; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; +import org.hibernate.service.jdbc.connections.spi.ConnectionProvider; +import org.hibernate.service.spi.Stoppable; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.hibernate.tool.hbm2ddl.SchemaUpdate; import org.nuiton.topia.TopiaContext; @@ -873,6 +875,12 @@ } else { if (hibernateFactory != null) { hibernateFactory.close(); + // close connection provider if possible (http://nuiton.org/issues/2757) + ConnectionProvider service = ((SessionFactoryImplementor) hibernateFactory).getServiceRegistry().getService(ConnectionProvider.class); + if (service instanceof Stoppable) { + Stoppable stoppable = (Stoppable) service; + stoppable.stop(); + } closed = true; TopiaContextFactory.removeContext(this); log.debug("TopiaContext removed");