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()));
            }
        }
    }

}

Reply via email to