Cleaning up that last message...

Ignore the last sentence; Tapestry doesn't store the username in the
session; my login method does that.

The "new way" code could be cleaned up, doesn't need the
ApplicationStateManager at all.

    String key = "state:" + appName + ":visit";
    Visit visit = (Visit) session.getAttribute(key);


Bryan Lewis wrote:

>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]
>
>  
>

Reply via email to