001    package edu.nrao.sss.webapp;
002    
003    import javax.servlet.ServletContextListener;
004    import javax.servlet.ServletContextEvent;
005    
006    import org.apache.log4j.Logger;
007    import org.hibernate.HibernateException;
008    
009    import edu.nrao.sss.dao.HibernateDao;
010    
011    /**
012     * When a context is closed this listener destroys all open Hibernate
013     * SessionFactories that are in the HibernateDao class.
014     */
015    public class HibernateServletContextListener implements ServletContextListener
016    {
017            private static final Logger log = Logger.getLogger(HibernateServletContextListener.class);
018            
019            public HibernateServletContextListener() {}
020            
021            /**
022             * Empty
023             */
024            public void contextInitialized(ServletContextEvent sce) {}
025            
026            /**
027             * closes session factories
028             * 
029             * @see HibernateDao
030             */
031            public void contextDestroyed(ServletContextEvent sce)
032            {
033                    try 
034                    {
035                            HibernateDao.destroyAllFactories();
036                    }
037                    catch(HibernateException he)
038                    {
039                            //Since we're closing the whole context, we should just log
040                            //the event and move on.
041                            log.error("Error closing session factoriess during context close", he);
042                    }
043            }
044    }