1 package com.dotmarketing.listeners; 2 3 import java.util.Collections ; 4 import java.util.HashMap ; 5 import java.util.Map ; 6 7 import javax.servlet.ServletContextEvent ; 8 import javax.servlet.ServletContextListener ; 9 import javax.servlet.http.HttpSession ; 10 import javax.servlet.http.HttpSessionEvent ; 11 import javax.servlet.http.HttpSessionListener ; 12 13 import org.apache.commons.logging.LogFactory; 14 15 import com.dotmarketing.beans.Clickstream; 16 import com.dotmarketing.db.DotHibernate; 17 import com.dotmarketing.loggers.DatabaseClickstreamLogger; 18 import com.dotmarketing.util.Logger; 19 20 27 public class ClickstreamListener implements ServletContextListener , HttpSessionListener { 28 31 public static final String CLICKSTREAMS_ATTRIBUTE_KEY = "clickstreams"; 32 private Map clickstreams = Collections.synchronizedMap(new HashMap ()); 33 34 public ClickstreamListener() { 35 Logger.debug(this, "ClickstreamLogger constructed"); 36 } 37 38 public void contextInitialized(ServletContextEvent sce) { 39 40 sce.getServletContext().setAttribute(CLICKSTREAMS_ATTRIBUTE_KEY, clickstreams); 41 } 42 43 public void contextDestroyed(ServletContextEvent sce) { 44 } 45 46 public void sessionCreated(HttpSessionEvent hse) { 47 HttpSession session = hse.getSession(); 48 Logger.debug(this, "Session " + session.getId() + " was created, adding a new clickstream."); 49 Clickstream clickstream = new Clickstream(); 50 session.setAttribute("clickstream", clickstream); 51 clickstreams.put(session.getId(), clickstream); 52 } 53 54 public void sessionDestroyed(HttpSessionEvent hse) { 55 HttpSession session = hse.getSession(); 56 Logger.debug(this, "Session " + session.getId() + " was destroyed, logging the clickstream and removing it."); 57 Clickstream stream = (Clickstream) clickstreams.get(session.getId()); 60 61 try { 62 if (stream.getClickstreamRequests() != null) { 63 DatabaseClickstreamLogger dblogger = new DatabaseClickstreamLogger(); 64 dblogger.log(stream); 65 } 66 } catch (Exception e) { 67 LogFactory.getLog(this.getClass()).debug(e.getMessage()); 69 } finally { 70 clickstreams.remove(session.getId()); 71 DotHibernate.closeSession(); 72 } 73 } 74 } | Popular Tags |