-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Tomaz,
On 10/11/2010 4:08 AM, TomazM wrote: > Why if I reload application which use connection pool doesn't release > connection's to MySQL DB? > > Only if I restart Tomcat connection's are released, is this a bug. Yes, it is: https://issues.apache.org/bugzilla/show_bug.cgi?id=22626 Remy has chosen not to fix this. I disagree with his reasons, but he's the Tomcat dev, not me. I wrote the ServletContextListener shown below to close-down my JNDI DataSource when my app is taken out of service. I believe the DataSource itself still hangs around after the webapp is stopped, but at least the database connections should be closed. Feel free to use this code however you want. Configure it in web.xml like this: <web-app> ... <context-param> <param-name>JNDIDataSourceName</param-name> <param-value>jdbc/myDataSource</param-value> </context-param> ... <listener> <listener-class>JNDIDataSourceShutdownListener</listener-class> </listener> </web-app> Here is the code: import java.sql.SQLException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import javax.servlet.ServletContext; import javax.servlet.ServletContextListener; import javax.servlet.ServletContextEvent; /** * A listener to shut down the JNDI DataSource created by Tomcat * (but not automatically cleaned up). * * @author Chris Schultz * @version $Revision: 1.1 $ $Date: 2009-08-06 16:42:32 $ */ public class JNDIDataSourceShutdownListener implements ServletContextListener { private String _dataSourcePath; public void contextInitialized(ServletContextEvent e) { ServletContext application = e.getServletContext(); _dataSourcePath = application.getInitParameter("JNDIDataSourceName"); if(!_dataSourcePath.startsWith("java:")) _dataSourcePath = "java:/comp/env/" + _dataSourcePath; } /** * Attempts to close the DataSource */ public void contextDestroyed(ServletContextEvent e) { ServletContext application = e.getServletContext(); try { Context ctx = new InitialContext(); DataSource ds = (DataSource)ctx.lookup(_dataSourcePath); if(null == ds) { application.log(getClass().getName() + ": No DataSource found at " + _dataSourcePath); } else { application.log(getClass().getName() + ": Closing DataSource " + _dataSourcePath); close(ds, application); application.log(getClass().getName() + ": Closed DataSource " + _dataSourcePath); } } catch (NamingException ne) { application.log(getClass().getName() + ": Unable to locate DataSource at " + _dataSourcePath, ne); } } private void close(DataSource ds, ServletContext application) { try { Method closeMethod = ds.getClass().getMethod("close", null); if(null == closeMethod) throw new NoSuchMethodException(ds.getClass().getName() + ".close()"); closeMethod.invoke(ds, null); } catch (Exception e) { application.log(getClass().getName() + ": Cannot close DataSource", e); } } } -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (MingW32) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAky2AMEACgkQ9CaO5/Lv0PBE4ACgwLhTvCee8UAppLiljqlWLvyx ErYAoLDHyFdoEIsW2riByd7ykuQNQ08R =ZUk2 -----END PGP SIGNATURE----- --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org