remm        2004/01/22 10:21:36

  Modified:    catalina/src/share/org/apache/catalina/core
                        ApplicationDispatcher.java
                        ApplicationHttpRequest.java StandardHostValve.java
  Log:
  - Improvements to session activity tracking, handling the case where the
    session is new, as well as cross context.
  - If this doesn't work, I give up ;)
  
  Revision  Changes    Path
  1.27      +10 -4     
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java
  
  Index: ApplicationDispatcher.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationDispatcher.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- ApplicationDispatcher.java        12 Sep 2003 17:04:12 -0000      1.26
  +++ ApplicationDispatcher.java        22 Jan 2004 18:21:36 -0000      1.27
  @@ -441,6 +441,8 @@
               }
   
               processRequest(request,response);
  +
  +            wrequest.recycle();
               unwrapRequest();
   
           }
  @@ -582,6 +584,8 @@
                                                new 
Integer(ApplicationFilterFactory.INCLUDE));
               
wrequest.setAttribute(ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, 
origServletPath);
               invoke(outerRequest, outerResponse);
  +
  +            wrequest.recycle();
               unwrapRequest();
               unwrapResponse();
   
  @@ -628,6 +632,8 @@
                                                new 
Integer(ApplicationFilterFactory.INCLUDE));
               
wrequest.setAttribute(ApplicationFilterFactory.DISPATCHER_REQUEST_PATH_ATTR, 
origServletPath);
               invoke(outerRequest, outerResponse);
  +
  +            wrequest.recycle();
               unwrapRequest();
               unwrapResponse();
   
  
  
  
  1.15      +60 -60    
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationHttpRequest.java
  
  Index: ApplicationHttpRequest.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/ApplicationHttpRequest.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- ApplicationHttpRequest.java       22 Dec 2003 09:28:50 -0000      1.14
  +++ ApplicationHttpRequest.java       22 Jan 2004 18:21:36 -0000      1.15
  @@ -232,7 +232,7 @@
       /**
        * The currently active session for this request.
        */
  -    protected HttpSession session = null;
  +    protected Session session = null;
   
   
       /**
  @@ -387,17 +387,16 @@
       public String getParameter(String name) {
   
        parseParameters();
  -        synchronized (parameters) {
  -            Object value = parameters.get(name);
  -            if (value == null)
  -                return (null);
  -            else if (value instanceof String[])
  -                return (((String[]) value)[0]);
  -            else if (value instanceof String)
  -                return ((String) value);
  -            else
  -                return (value.toString());
  -        }
  +
  +        Object value = parameters.get(name);
  +        if (value == null)
  +            return (null);
  +        else if (value instanceof String[])
  +            return (((String[]) value)[0]);
  +        else if (value instanceof String)
  +            return ((String) value);
  +        else
  +            return (value.toString());
   
       }
   
  @@ -421,9 +420,7 @@
       public Enumeration getParameterNames() {
   
        parseParameters();
  -        synchronized (parameters) {
  -            return (new Enumerator(parameters.keySet()));
  -        }
  +        return (new Enumerator(parameters.keySet()));
   
       }
   
  @@ -437,21 +434,19 @@
       public String[] getParameterValues(String name) {
   
        parseParameters();
  -        synchronized (parameters) {
  -            Object value = parameters.get(name);
  -            if (value == null)
  -                return ((String[]) null);
  -            else if (value instanceof String[])
  -                return ((String[]) value);
  -            else if (value instanceof String) {
  -                String values[] = new String[1];
  -                values[0] = (String) value;
  -                return (values);
  -            } else {
  -                String values[] = new String[1];
  -                values[0] = value.toString();
  -                return (values);
  -            }
  +        Object value = parameters.get(name);
  +        if (value == null)
  +            return ((String[]) null);
  +        else if (value instanceof String[])
  +            return ((String[]) value);
  +        else if (value instanceof String) {
  +            String values[] = new String[1];
  +            values[0] = (String) value;
  +            return (values);
  +        } else {
  +            String values[] = new String[1];
  +            values[0] = value.toString();
  +            return (values);
           }
   
       }
  @@ -525,7 +520,7 @@
   
               // Return the current session if it exists and is valid
               if (session != null)
  -                return (session);
  +                return (session.getSession());
   
               HttpSession other = super.getSession(false);
               if (create && (other == null)) {
  @@ -539,6 +534,7 @@
                   try {
                       localSession =
                           context.getManager().findSession(other.getId());
  +                    localSession.access();
                   } catch (IOException e) {
                       // Ignore
                   }
  @@ -551,8 +547,8 @@
                           (context.getManager().getMaxInactiveInterval());
                       localSession.setId(other.getId());
                   }
  -                session = localSession.getSession();
  -                return session;
  +                session = localSession;
  +                return session.getSession();
               }
               return null;
   
  @@ -567,6 +563,16 @@
   
   
       /**
  +     * Recycle this request
  +     */
  +    public void recycle() {
  +        if (session != null) {
  +            session.endAccess();
  +        }
  +    }
  +
  +
  +    /**
        * Return descriptive information about this implementation.
        */
       public String getInfo() {
  @@ -586,12 +592,10 @@
           if (orig == null)
               return (new HashMap());
           HashMap dest = new HashMap();
  -        synchronized (orig) {
  -            Iterator keys = orig.keySet().iterator();
  -            while (keys.hasNext()) {
  -                String key = (String) keys.next();
  -                dest.put(key, orig.get(key));
  -            }
  +        Iterator keys = orig.keySet().iterator();
  +        while (keys.hasNext()) {
  +            String key = (String) keys.next();
  +            dest.put(key, orig.get(key));
           }
           return (dest);
   
  @@ -695,11 +699,9 @@
        }
   
           parameters = new HashMap();
  -        synchronized (parameters) {
  -            parameters = copyMap(getRequest().getParameterMap());
  -         mergeParameters();
  -         parsedParams = true;
  -        }
  +        parameters = copyMap(getRequest().getParameterMap());
  +        mergeParameters();
  +        parsedParams = true;
       }
   
   
  @@ -844,20 +846,18 @@
           } catch (Exception e) {
               ;
           }
  -        synchronized (parameters) {
  -            Iterator keys = parameters.keySet().iterator();
  -            while (keys.hasNext()) {
  -                String key = (String) keys.next();
  -                Object value = queryParameters.get(key);
  -                if (value == null) {
  -                    queryParameters.put(key, parameters.get(key));
  -                    continue;
  -                }
  -                queryParameters.put
  -                    (key, mergeValues(value, parameters.get(key)));
  +        Iterator keys = parameters.keySet().iterator();
  +        while (keys.hasNext()) {
  +            String key = (String) keys.next();
  +            Object value = queryParameters.get(key);
  +            if (value == null) {
  +                queryParameters.put(key, parameters.get(key));
  +                continue;
               }
  -            parameters = queryParameters;
  +            queryParameters.put
  +                (key, mergeValues(value, parameters.get(key)));
           }
  +        parameters = queryParameters;
   
       }
   
  
  
  
  1.14      +4 -18     
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardHostValve.java
  
  Index: StandardHostValve.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardHostValve.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- StandardHostValve.java    21 Jan 2004 10:47:53 -0000      1.13
  +++ StandardHostValve.java    22 Jan 2004 18:21:36 -0000      1.14
  @@ -181,16 +181,6 @@
           
           // Update the session last access time for our session (if any)
           HttpServletRequest hreq = (HttpServletRequest) request.getRequest();
  -        String sessionId = hreq.getRequestedSessionId();
  -        Session session = null;
  -        if (sessionId != null) {
  -            Manager manager = context.getManager();
  -            if (manager != null) {
  -                session = manager.findSession(sessionId);
  -                if (session != null)
  -                    session.access();
  -            }
  -        }
   
           // Ask this Context to process this request
           context.getPipeline().invoke(request, response);
  @@ -205,10 +195,6 @@
           } else {
               status(request, response);
           }
  -
  -        // Release the session
  -        if (session != null)
  -            session.endAccess();
   
           // Restore the context classloader
           Thread.currentThread().setContextClassLoader
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to