view src/main/java/de/mpiwg/itgroup/ismi/servlets/ServletLifecycleService.java @ 94:d2cee1040062

new servlet lifecycle listener to shut down Spring ApplicationBean.
author casties
date Thu, 20 Oct 2016 14:08:16 +0200
parents
children
line wrap: on
line source

/**
 * 
 */
package de.mpiwg.itgroup.ismi.servlets;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.log4j.Logger;
import org.mpi.openmind.repository.services.ServiceRegistry;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;

import de.mpiwg.itgroup.ismi.entry.beans.AbstractBean;
import de.mpiwg.itgroup.ismi.entry.beans.ApplicationBean;

/**
 * Class to handle ServletContextListener events for startup and shutdown.
 * 
 * Should be added with a <listener> element in web.xml.
 * 
 * @author casties
 *
 */
public class ServletLifecycleService implements ServletContextListener {

    private static Logger logger = Logger.getLogger(ServletLifecycleService.class);

    /* (non-Javadoc)
     * @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)
     */
    @Override
    public void contextInitialized(ServletContextEvent ctxe) {
        // TODO: inititialize Spring bean here?
        logger.info("Servlet context initialized.");        
    }
    
    /* (non-Javadoc)
     * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
     */
    @Override
    public void contextDestroyed(ServletContextEvent ctxe) {
        ServletContext srvCtx = ctxe.getServletContext();
        // get Spring ApplicationBean from context
        ApplicationBean app = (ApplicationBean) srvCtx.getAttribute(AbstractBean.BEAN_APP);
        if (app != null) {
            // get Spring ApplicationContext from ApplicationBean
            ServiceRegistry srvReg = app.getServiceRegistry();
            ApplicationContext context = srvReg.getApplicationContext();
            if (context != null) {
                // run Spring shutdown hook
                logger.info("Closing Spring context.");
                ((AbstractApplicationContext) context).close();
            }
        }
        logger.info("Servlet context destroyed.");
    }

}