1 package com.blandware.atleap.webapp.listener; 2 3 import com.blandware.atleap.common.Constants; 4 import org.apache.commons.logging.Log; 5 import org.apache.commons.logging.LogFactory; 6 7 import javax.servlet.ServletContext ; 8 import javax.servlet.ServletContextEvent ; 9 import javax.servlet.ServletContextListener ; 10 import javax.servlet.http.HttpSession ; 11 import javax.servlet.http.HttpSessionAttributeListener ; 12 import javax.servlet.http.HttpSessionBindingEvent ; 13 import java.util.HashMap ; 14 15 16 26 public class UserCounterListener implements ServletContextListener , HttpSessionAttributeListener { 27 28 32 public static final String COUNT_KEY = "userCounter"; 33 34 38 public static final String USERS_KEY = "userNames"; 39 40 protected transient final Log log = LogFactory.getLog(UserCounterListener.class); 41 protected transient ServletContext servletContext; 42 43 public synchronized void contextInitialized(ServletContextEvent sce) { 44 servletContext = sce.getServletContext(); 45 servletContext.setAttribute(COUNT_KEY, new Integer (0)); 46 servletContext.setAttribute(USERS_KEY, new HashMap ()); 47 } 48 49 public synchronized void contextDestroyed(ServletContextEvent event) { 50 servletContext = null; 51 } 52 53 60 synchronized void addUser(HttpSession session, Object user) { 61 HashMap users = (HashMap ) servletContext.getAttribute(USERS_KEY); 62 63 Integer sessionHashCode = new Integer (session.hashCode()); 64 65 if ( !users.containsKey(sessionHashCode) ) { 66 users.put(sessionHashCode, user); 67 68 servletContext.setAttribute(COUNT_KEY, new Integer (users.size())); 69 servletContext.setAttribute(USERS_KEY, users); 70 } 71 } 72 73 80 synchronized void removeUser(HttpSession session, Object user) { 81 HashMap users = (HashMap ) servletContext.getAttribute(USERS_KEY); 82 83 Integer sessionHashCode = new Integer (session.hashCode()); 84 85 if ( users.containsKey(sessionHashCode) ) { 86 users.remove(sessionHashCode); 87 88 servletContext.setAttribute(COUNT_KEY, new Integer (users.size())); 89 servletContext.setAttribute(USERS_KEY, users); 90 } 91 } 92 93 98 public void attributeAdded(HttpSessionBindingEvent event) { 99 if ( event.getName().equals(Constants.USER_KEY) ) { 100 addUser(event.getSession(), event.getValue()); 101 } 102 } 103 104 109 public void attributeRemoved(HttpSessionBindingEvent event) { 110 if ( event.getName().equals(Constants.USER_KEY) ) { 111 removeUser(event.getSession(), event.getValue()); 112 } 113 } 114 115 118 public void attributeReplaced(HttpSessionBindingEvent event) { 119 if ( event.getName().equals(Constants.USER_KEY) ) { 120 addUser(event.getSession(), event.getValue()); 121 } 122 } 123 124 } 125 | Popular Tags |