@Override public void contextDestroyed(ServletContextEvent evt) { // Find configured parameter. String name = evt.getServletContext().getInitParameter("name"); if (name == null || name.trim().isEmpty()) log.warn("Found invalid 'name' parameter in ServletContext"); try { // Find DataSource in JNDI context. InitialContext ctx = new InitialContext(); Object o = ctx.lookup("java:comp/env/" + name); if (o == null || !(o instanceof DataSource)) { log.warn("ServletContext 'name' parameter doesn't refer to a DataSource: " + o); return; } DBPoolDataSource ds = (DBPoolDataSource)o; log.trace(String.format("Found compatible DBPoolDataSource (%s): releasing", ds.getName())); ds.release(); } catch (Throwable t) { log.warn(t.getMessage(), t); } } }