Could we use a static variable to solve the problem?

----- Original Message ----- From: "Rick Reumann" <[EMAIL PROTECTED]>
To: "Struts Users Mailing List" <user@struts.apache.org>
Sent: Tuesday, July 26, 2005 6:06 PM
Subject: probably a cleaner way... testing for just one user


I have an odd requirement where this internal application should only be used by one valid user(one session) at a time. (The data being worked with in the application would require so many locks that's it just easier to restrict it to one user). Currently I'm achieving this in the following manner and wondering if there is a better way to do it...

1) A SessionListener ...

in sesionCreated(..)...

HttpSession session = event.getSession();
ServletContext context = session.getServletContext();
synchronized( context ) {
 if ( context.getAttribute(Constants.APPLICATION_IN_USE) == null ) {
//mark it now in use for application scope for any new sessions to see it's in use
   context.setAttribute(Constants.APPLICATION_IN_USE, Boolean.TRUE );
   //but mark in not in use for this session
session.setAttribute(Constants.APPLICATION_IN_USE, Boolean.FALSE);
 } else {
//is in use so mark it in use so Session in filter can see it's being used already
   session.setAttribute(Constants.APPLICATION_IN_USE, Boolean.TRUE);
 }
}

sessionDestroyed clears out context APPPLICATION_IN_USE flag.


2) In my servlet filter that filters all requests...

if ( path.indexOf("/appinuse.jsp") == -1 ) {
if ( session.getAttribute(Constants.APPLICATION_IN_USE) != null && ((Boolean)session.getAttribute(Constants.APPLICATION_IN_USE)).booleanValue() ) {
        log.debug("Application already in use!!!");
        response.sendRedirect(contextPath+"/appinuse.jsp");
        return;
    }
}


Does the above seem to be an ok way to handle this? It's working but not sure if there is a cleaner way?


--
Rick

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