1 package com.dotmarketing.listeners; 2 3 import java.util.Collections ; 4 import java.util.HashMap ; 5 import java.util.HashSet ; 6 import java.util.Iterator ; 7 import java.util.Map ; 8 import java.util.Set ; 9 10 import javax.servlet.ServletContextEvent ; 11 import javax.servlet.ServletContextListener ; 12 import javax.servlet.http.HttpSession ; 13 import javax.servlet.http.HttpSessionEvent ; 14 import javax.servlet.http.HttpSessionListener ; 15 16 import org.apache.commons.logging.LogFactory; 17 18 import com.dotmarketing.db.DotHibernate; 19 import com.dotmarketing.factories.InodeFactory; 20 import com.dotmarketing.portlets.banners.model.Banner; 21 import com.dotmarketing.util.Logger; 22 23 30 public class BannersListener implements ServletContextListener , HttpSessionListener { 31 32 public static final String BANNERS_ATTRIBUTE_KEY = "banners"; 33 34 private static Map sesions_banners = Collections.synchronizedMap(new HashMap ()); 35 36 public BannersListener() { 37 Logger.debug(this, "BannersListener constructed"); 38 } 39 40 public void contextInitialized(ServletContextEvent sce) { 41 42 sce.getServletContext().setAttribute(BANNERS_ATTRIBUTE_KEY, sesions_banners); 43 } 44 45 public void contextDestroyed(ServletContextEvent sce) { 46 } 47 48 public void sessionCreated(HttpSessionEvent hse) { 49 HttpSession session = hse.getSession(); 50 Logger.debug(this, "Session " + session.getId() + " was created, adding a banners to the session."); 51 Set banners = new HashSet (); 52 session.setAttribute(BANNERS_ATTRIBUTE_KEY, banners); 53 sesions_banners.put(session.getId(), banners); 54 } 55 56 public void sessionDestroyed(HttpSessionEvent hse) { 57 HttpSession session = hse.getSession(); 58 Logger.debug(this, "Session " + session.getId() + " was destroyed, logging the banners info and removing it."); 59 60 Set banners = (Set ) sesions_banners.get(session.getId()); 61 62 if (banners != null) { 63 64 Logger.debug(this, "sessionDestroyed, banners.size(): " + banners.size()); 65 try { 66 Iterator it = banners.iterator(); 67 while (it.hasNext()) { 68 Banner sessBanner = (Banner) it.next(); 69 int numViews = sessBanner.getNmbrViews(); 70 int numClicks = sessBanner.getNmbrClicks(); 71 long inode = sessBanner.getInode(); 72 Logger.debug(this, "sessionDestroyed, banners inode: " + inode + ", views: " + numViews + ", numClicks: " + numClicks); 73 74 Banner bann = (Banner) InodeFactory.getInode(inode, Banner.class); 75 bann.setNmbrViews(numViews); 76 bann.setNmbrClicks(numClicks); 77 78 InodeFactory.saveInode(bann); 79 } 80 } catch (Exception e) { 81 LogFactory.getLog(this.getClass()).debug(e.getMessage()); 83 } finally { 84 sesions_banners.remove(session.getId()); 85 DotHibernate.closeSession(); 86 } 87 } 88 } 89 } | Popular Tags |