That's what I've been doing, keeping a static map in my Engine to associate sessions with visits.
My login method does: // After a successful login, associate the session with the visit. WebSession session = cycle.getInfrastructure().getRequest().getSession(false); String sessionId = session.getId(); mapSessionsToVisits.put(sessionId, visit); In the sessionDestroyed() listener: Visit visit = (Visit) mapSessionsToVisits.get(sessionId); if (visit != null) { String userName = visit.getUserName(); } mapSessionsToVisits.remove(sessionId); But I've been trying out your suggestion of getting the visit from the ApplicationStateManager via the ServletContext: ServletContext sc = session.getServletContext(); String appName = getAppName(); // basically same as sc.getServletContextName() Registry registry = (Registry) sc.getAttribute("org.apache.tapestry.Registry:" + appName); ApplicationStateManager asm = (ApplicationStateManager) registry.getService("tapestry.state.ApplicationStateManager", ApplicationStateManager.class); // This way doesn't work; runs into NPE because the SessionScopeManager // tries to go through the request which doesn't exist at this point: //Visit visit = (Visit) asm.get("visit"); // So get it directly from the session. String key = "state:" + appName + ":visit"; Visit visit = (Visit) session.getAttribute(key); It works... returns the same Visit as the old way. I thought the new way might be better because it would eliminate the map, but it's more dependent on Tapestry internals and private strings. By the way, if you only need to get the user's name (and don't mind one private string), Tapestry stores it in the session: String username = session.getAttribute("tapestry.engine.username"); James Carman wrote: >Perhaps you can key your logged in user list (make it a map) by the session >id? Wouldn't that work? > >-----Original Message----- >From: Oscar Picasso [mailto:[EMAIL PROTECTED] >Sent: Thursday, May 04, 2006 12:54 PM >To: Tapestry users >Subject: Re: List of logged users > >I have tried to implement the HttpSessionListerner solution. > >I have a slight problem. In the HttpSessionListener.destroy method I need to >get a session scoped "user" state object. > >This "user" state object is then removed from the list of currently logged >users. It works fine except I get an IllegalStateException warning. > >I guess that's because when reaching the destroy method, the session has >already been invalidated. > >How to avoid this warning ? > > >--------------------------------- >New Yahoo! Messenger with Voice. Call regular phones from your PC and save >big. > > > >--------------------------------------------------------------------- >To unsubscribe, e-mail: [EMAIL PROTECTED] >For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]