If you choose to use a servlet session listener, keep in mind that the
Tapestry Registry can be obtained from the application context under this
key "TapestryFilter.REGISTRY_CONTEXT_NAME".

Then you can have access to all Tapestry 5 services including the
ApplicationStateManager.

2009/9/30 Gunnar Eketrapp <gunnar.eketr...@gmail.com>

> 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