All Downloads are FREE. Search and download functionalities are using the official Maven repository.

snaq.db.DBPoolServletContextListener Maven / Gradle / Ivy

package snaq.db;

import javax.naming.InitialContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.sql.DataSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import snaq.db.DBPoolDataSource;

/**
 * ServletContextListener implementation to handle connection pool shutdown.
 * The JNDI name of the configured DBPoolDataSource should be assigned as a
 * context parameter for the web application.
 * For example, typically these lines might be added to {@code web.xml}:
 * 
 *     <listener>
 *         <listener-class>snaq.db.DBPoolServletContextListener</listener-class>
 *     </listener>
 *     <context-param>
 *         <param-name>name</param-name>
 *         <param-value>jdbc/pool-ds</param-value>
 *     </context-param>
 * 
* in the case that the DataSource has the JNDI name of jdbc/pool-ds. * * @author Giles Winstanley */ public class DBPoolServletContextListener implements ServletContextListener { /** SLF4J logger instance for writing log entries. */ private static final Logger log = LoggerFactory.getLogger(DBPoolServletContextListener.class); @Override public void contextInitialized(ServletContextEvent evt) { } @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); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy