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]