Hi ! I am porting a huge jsp/spring kludge to T5. (And love it ...)
I have now come across a UserTracker implementation that tracks currently logged in users. How is this best done in T5 anyone? I could perhaps stick with the old servlet but I am not sure of how T5 creaets/destoys sessions and adds/removes attributes. You know now I have a state ASO where the user object is stored within. Thanks in advance, Gunnar Eketrapp, Stockholm, Sweden ======================================================================== Current User tracker implementaon using HttpSessionListener + HttpSessionAttributeListener ======================================================================== public class UserTracker implements HttpSessionListener, HttpSessionAttributeListener { private static final Logger logger = Logger.getLogger(UserTracker.class.getName()); private static UserTracker instance; public static UserTracker getInstance() { return instance; } public UserTracker() { instance = this; } private SortedSet<UserTrackerEntry> current = new TreeSet<UserTrackerEntry>(); public SortedSet<UserTrackerEntry> getCurrent() { SortedSet<UserTrackerEntry> result = new TreeSet<UserTrackerEntry>(); synchronized (current) { result.addAll(current); } return result; } public SortedSet<String> getCurrentUsernames() { SortedSet<String> result = new TreeSet<String>(); synchronized (current) { for( UserTrackerEntry en : current ) { result.add(en.getUsername()); } } return result; } public void attributeAdded(HttpSessionBindingEvent e) { if( "user".equals(e.getName()) ) { User user = (User) e.getValue(); synchronized (current) { String sessionId = e.getSession().getId(); current.add(new UserTrackerEntry(user.getUsername(),user.getFullName(),sessionId,new Date())); } } } public void attributeRemoved(HttpSessionBindingEvent e) { if( "user".equals(e.getName()) ) { User user = (User) e.getValue(); synchronized (current) { String sessionId = e.getSession().getId(); current.remove(new UserTrackerEntry(user.getUsername(),user.getFullName(),sessionId,new Date())); } } } public void attributeReplaced(HttpSessionBindingEvent arg0) { // ignore } public void sessionCreated(HttpSessionEvent e) { User user = (User) e.getSession().getAttribute("user"); if( user != null ) { synchronized (current) { String sessionId = e.getSession().getId(); current.add(new UserTrackerEntry(user.getUsername(),user.getFullName(),sessionId,new Date())); } } } public void sessionDestroyed(HttpSessionEvent e) { User user = (User) e.getSession().getAttribute("user"); if( user != null ) { synchronized (current) { String sessionId = e.getSession().getId(); current.remove(new UserTrackerEntry(user.getUsername(),user.getFullName(),sessionId,new Date())); } } } }