remm 2005/03/31 02:31:54 Modified: catalina/src/share/org/apache/catalina/session ManagerBase.java FileStore.java StoreBase.java StandardSession.java StandardManager.java PersistentManagerBase.java JDBCStore.java modules/cluster/src/share/org/apache/catalina/cluster/tcp ReplicationValve.java catalina/src/share/org/apache/catalina Session.java catalina/src/share/org/apache/catalina/connector Response.java Request.java modules/cluster/src/share/org/apache/catalina/cluster/session ReplicatedSession.java DeltaSession.java SimpleTcpReplicationManager.java JvmRouteBinderValve.java catalina/src/share/org/apache/catalina/authenticator FormAuthenticator.java catalina/src/share/org/apache/catalina/valves PersistentValve.java AccessLogValve.java webapps/docs changelog.xml Log: - Add back Jan's getId ISE patch. - Add new Session.getIdInternal method, so that getId remains a safe call for internal components. Revision Changes Path 1.41 +3 -3 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java Index: ManagerBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java,v retrieving revision 1.40 retrieving revision 1.41 diff -u -r1.40 -r1.41 --- ManagerBase.java 15 Feb 2005 21:10:35 -0000 1.40 +++ ManagerBase.java 31 Mar 2005 10:31:53 -0000 1.41 @@ -706,7 +706,7 @@ public void add(Session session) { synchronized (sessions) { - sessions.put(session.getId(), session); + sessions.put(session.getIdInternal(), session); if( sessions.size() > maxActive ) { maxActive=sessions.size(); } @@ -849,7 +849,7 @@ public void remove(Session session) { synchronized (sessions) { - sessions.remove(session.getId()); + sessions.remove(session.getIdInternal()); } } 1.7 +3 -3 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/FileStore.java Index: FileStore.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/FileStore.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- FileStore.java 17 Nov 2004 15:00:48 -0000 1.6 +++ FileStore.java 31 Mar 2005 10:31:53 -0000 1.7 @@ -343,13 +343,13 @@ public void save(Session session) throws IOException { // Open an output stream to the specified pathname, if any - File file = file(session.getId()); + File file = file(session.getIdInternal()); if (file == null) { return; } if (manager.getContainer().getLogger().isDebugEnabled()) { manager.getContainer().getLogger().debug(sm.getString(getStoreName()+".saving", - session.getId(), file.getAbsolutePath())); + session.getIdInternal(), file.getAbsolutePath())); } FileOutputStream fos = null; ObjectOutputStream oos = null; 1.11 +2 -2 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StoreBase.java Index: StoreBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StoreBase.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- StoreBase.java 2 Nov 2004 19:07:51 -0000 1.10 +++ StoreBase.java 31 Mar 2005 10:31:53 -0000 1.11 @@ -208,7 +208,7 @@ // expire swapped out session session.expire(); } - remove(session.getId()); + remove(session.getIdInternal()); } catch (Exception e) { manager.getContainer().getLogger().error("Session: "+keys[i]+"; ", e); try { 1.57 +3 -3 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java Index: StandardSession.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java,v retrieving revision 1.56 retrieving revision 1.57 diff -u -r1.56 -r1.57 --- StandardSession.java 30 Mar 2005 15:50:40 -0000 1.56 +++ StandardSession.java 31 Mar 2005 10:31:53 -0000 1.57 @@ -321,10 +321,10 @@ */ public String getId() { - /*if ( !isValid() ) { + if ( !isValid() ) { throw new IllegalStateException (sm.getString("standardSession.getId.ise")); - }*/ + } return (this.id); 1.30 +2 -2 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java Index: StandardManager.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- StandardManager.java 30 Mar 2005 15:50:40 -0000 1.29 +++ StandardManager.java 31 Mar 2005 10:31:53 -0000 1.30 @@ -392,7 +392,7 @@ StandardSession session = getNewSession(); session.readObjectData(ois); session.setManager(this); - sessions.put(session.getId(), session); + sessions.put(session.getIdInternal(), session); session.activate(); session.endAccess(); } 1.26 +6 -6 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/PersistentManagerBase.java Index: PersistentManagerBase.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/PersistentManagerBase.java,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- PersistentManagerBase.java 22 Nov 2004 16:35:18 -0000 1.25 +++ PersistentManagerBase.java 31 Mar 2005 10:31:53 -0000 1.26 @@ -674,7 +674,7 @@ super.remove (session); if (store != null){ - removeSession(session.getId()); + removeSession(session.getIdInternal()); } } @@ -851,7 +851,7 @@ } } catch (IOException e) { log.error(sm.getString - ("persistentManager.serializeError", session.getId(), e)); + ("persistentManager.serializeError", session.getIdInternal(), e)); throw e; } @@ -1036,7 +1036,7 @@ if (log.isDebugEnabled()) log.debug(sm.getString ("persistentManager.swapMaxIdle", - session.getId(), new Integer(timeIdle))); + session.getIdInternal(), new Integer(timeIdle))); try { swapOut(session); } catch (IOException e) { @@ -1078,7 +1078,7 @@ if(log.isDebugEnabled()) log.debug(sm.getString ("persistentManager.swapTooManyActive", - sessions[i].getId(), new Integer(timeIdle))); + sessions[i].getIdInternal(), new Integer(timeIdle))); try { swapOut(sessions[i]); } catch (IOException e) { @@ -1114,7 +1114,7 @@ if (log.isDebugEnabled()) log.debug(sm.getString ("persistentManager.backupMaxIdle", - session.getId(), new Integer(timeIdle))); + session.getIdInternal(), new Integer(timeIdle))); try { writeSession(session); 1.14 +4 -4 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/JDBCStore.java Index: JDBCStore.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/JDBCStore.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- JDBCStore.java 7 Jan 2005 15:09:37 -0000 1.13 +++ JDBCStore.java 31 Mar 2005 10:31:53 -0000 1.14 @@ -754,7 +754,7 @@ // If sessions already exist in DB, remove and insert again. // TODO: // * Check if ID exists in database and if so use UPDATE. - remove(session.getId()); + remove(session.getIdInternal()); try { bos = new ByteArrayOutputStream(); @@ -778,7 +778,7 @@ preparedSaveSql = _conn.prepareStatement(saveSql); } - preparedSaveSql.setString(1, session.getId()); + preparedSaveSql.setString(1, session.getIdInternal()); preparedSaveSql.setString(2, getName()); preparedSaveSql.setBinaryStream(3, in, size); preparedSaveSql.setString(4, session.isValid() ? "1" : "0"); @@ -812,7 +812,7 @@ if (manager.getContainer().getLogger().isDebugEnabled()) { manager.getContainer().getLogger().debug(sm.getString(getStoreName() + ".saving", - session.getId(), sessionTable)); + session.getIdInternal(), sessionTable)); } } 1.18 +3 -3 jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/ReplicationValve.java Index: ReplicationValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/tcp/ReplicationValve.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- ReplicationValve.java 11 Feb 2005 19:45:18 -0000 1.17 +++ ReplicationValve.java 31 Mar 2005 10:31:53 -0000 1.18 @@ -148,7 +148,7 @@ try { long start = System.currentTimeMillis(); - HttpSession session = request.getSession(false); + Session session = request.getSessionInternal(false); if (!( request.getContext().getManager() instanceof ClusterManager) ) return; @@ -175,7 +175,7 @@ String id = null; if ( session != null ) - id = session.getId(); + id = session.getIdInternal(); else return; 1.6 +7 -1 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Session.java Index: Session.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Session.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Session.java 30 Mar 2005 15:50:40 -0000 1.5 +++ Session.java 31 Mar 2005 10:31:53 -0000 1.6 @@ -104,6 +104,12 @@ /** + * Return the session identifier for this session. + */ + public String getIdInternal(); + + + /** * Set the session identifier for this session. * * @param id The new session identifier 1.11 +9 -11 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/Response.java Index: Response.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/Response.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- Response.java 22 Nov 2004 16:35:18 -0000 1.10 +++ Response.java 31 Mar 2005 10:31:53 -0000 1.11 @@ -35,11 +35,10 @@ import javax.servlet.ServletOutputStream; import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; import org.apache.catalina.Context; +import org.apache.catalina.Session; import org.apache.catalina.Wrapper; import org.apache.catalina.util.CharsetMapper; import org.apache.catalina.util.DateTool; @@ -1043,7 +1042,7 @@ public String encodeRedirectURL(String url) { if (isEncodeable(toAbsolute(url))) { - return (toEncoded(url, request.getSession().getId())); + return (toEncoded(url, request.getSessionInternal().getIdInternal())); } else { return (url); } @@ -1079,7 +1078,7 @@ if (url.equalsIgnoreCase("")){ url = absolute; } - return (toEncoded(url, request.getSession().getId())); + return (toEncoded(url, request.getSessionInternal().getIdInternal())); } else { return (url); } @@ -1343,8 +1342,8 @@ return (false); // Are we in a valid session that is not using cookies? - final HttpServletRequest hreq = request; - final HttpSession session = hreq.getSession(false); + final Request hreq = request; + final Session session = hreq.getSessionInternal(false); if (session == null) return (false); if (hreq.isRequestedSessionIdFromCookie()) @@ -1363,9 +1362,8 @@ } } - private boolean doIsEncodeable(HttpServletRequest hreq, - HttpSession session, - String location){ + private boolean doIsEncodeable(Request hreq, Session session, + String location) { // Is this a valid absolute URL? URL url = null; try { @@ -1401,7 +1399,7 @@ String file = url.getFile(); if ((file == null) || !file.startsWith(contextPath)) return (false); - if( file.indexOf(";jsessionid=" + session.getId()) >= 0 ) + if( file.indexOf(";jsessionid=" + session.getIdInternal()) >= 0 ) return (false); } 1.20 +2 -2 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/Request.java Index: Request.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/connector/Request.java,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- Request.java 7 Feb 2005 21:56:32 -0000 1.19 +++ Request.java 31 Mar 2005 10:31:53 -0000 1.20 @@ -2210,7 +2210,7 @@ if ((session != null) && (getContext() != null) && getContext().getCookies()) { Cookie cookie = new Cookie(Globals.SESSION_COOKIE_NAME, - session.getId()); + session.getIdInternal()); configureSessionCookie(cookie); response.addCookie(cookie); } 1.16 +3 -3 jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/ReplicatedSession.java Index: ReplicatedSession.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/ReplicatedSession.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- ReplicatedSession.java 1 Jul 2004 09:44:26 -0000 1.15 +++ ReplicatedSession.java 31 Mar 2005 10:31:54 -0000 1.16 @@ -143,14 +143,14 @@ public void expire() { SimpleTcpReplicationManager mgr =(SimpleTcpReplicationManager)getManager(); - mgr.sessionInvalidated(getId()); + mgr.sessionInvalidated(getIdInternal()); setIsDirty(true); super.expire(); } public void invalidate() { SimpleTcpReplicationManager mgr =(SimpleTcpReplicationManager)getManager(); - mgr.sessionInvalidated(getId()); + mgr.sessionInvalidated(getIdInternal()); setIsDirty(true); super.invalidate(); } @@ -254,7 +254,7 @@ public String toString() { StringBuffer buf = new StringBuffer("ReplicatedSession id="); - buf.append(getId()).append(" ref=").append(super.toString()).append("\n"); + buf.append(getIdInternal()).append(" ref=").append(super.toString()).append("\n"); java.util.Enumeration e = getAttributeNames(); while ( e.hasMoreElements() ) { String name = (String)e.nextElement(); 1.31 +17 -1 jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java Index: DeltaSession.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/DeltaSession.java,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- DeltaSession.java 3 Mar 2005 14:06:36 -0000 1.30 +++ DeltaSession.java 31 Mar 2005 10:31:54 -0000 1.31 @@ -330,10 +330,26 @@ */ public String getId() { + if ( !isValid() ) { + throw new IllegalStateException + (sm.getString("standardSession.getId.ise")); + } + return (this.id); } + + /** + * Return the session identifier for this session. + */ + public String getIdInternal() { + + return (this.id); + + } + + /** * Set the session identifier for this session. * 1.37 +4 -4 jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java Index: SimpleTcpReplicationManager.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/SimpleTcpReplicationManager.java,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- SimpleTcpReplicationManager.java 22 Nov 2004 14:51:18 -0000 1.36 +++ SimpleTcpReplicationManager.java 31 Mar 2005 10:31:54 -0000 1.37 @@ -289,8 +289,8 @@ SessionMessage msg = new SessionMessageImpl(name, SessionMessage.EVT_SESSION_CREATED, writeSession(session), - session.getId(), - session.getId()); + session.getIdInternal(), + session.getIdInternal()); return msg; } //end if }//end if @@ -360,7 +360,7 @@ if (session==null) { session = createSession(false, false); - sessions.remove(session.getId()); + sessions.remove(session.getIdInternal()); } @@ -523,7 +523,7 @@ oout.writeInt(sessions.length); for (int i=0; i<sessions.length; i++){ ReplicatedSession ses = (ReplicatedSession)sessions[i]; - oout.writeUTF(ses.getId()); + oout.writeUTF(ses.getIdInternal()); byte[] data = writeSession(ses); oout.writeObject(data); }//for 1.4 +2 -2 jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/JvmRouteBinderValve.java Index: JvmRouteBinderValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/modules/cluster/src/share/org/apache/catalina/cluster/session/JvmRouteBinderValve.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- JvmRouteBinderValve.java 14 Mar 2005 21:21:08 -0000 1.3 +++ JvmRouteBinderValve.java 31 Mar 2005 10:31:54 -0000 1.4 @@ -208,7 +208,7 @@ * @param response */ protected void handlePossibleTurnover(Request request, Response response) { - HttpSession session = request.getSession(false); + Session session = request.getSessionInternal(false); if (session != null) { long t1 = System.currentTimeMillis(); String jvmRoute = getLocalJvmRoute(); @@ -221,7 +221,7 @@ if (log.isDebugEnabled()) log.debug(sm.getString("jvmRoute.skipURLSessionIDs")); } else { - handleJvmRoute(session.getId(), jvmRoute, request, response); + handleJvmRoute(session.getIdInternal(), jvmRoute, request, response); } if (log.isInfoEnabled()) { long t2 = System.currentTimeMillis(); 1.19 +3 -3 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/authenticator/FormAuthenticator.java Index: FormAuthenticator.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/authenticator/FormAuthenticator.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- FormAuthenticator.java 23 Feb 2005 19:27:56 -0000 1.18 +++ FormAuthenticator.java 31 Mar 2005 10:31:54 -0000 1.19 @@ -187,7 +187,7 @@ if (matchRequest(request)) { session = request.getSessionInternal(true); if (log.isDebugEnabled()) - log.debug("Restore request from session '" + session.getId() + log.debug("Restore request from session '" + session.getIdInternal() + "'"); principal = (Principal) session.getNote(Constants.FORM_PRINCIPAL_NOTE); @@ -229,7 +229,7 @@ if (!loginAction) { session = request.getSessionInternal(true); if (log.isDebugEnabled()) - log.debug("Save request in session '" + session.getId() + "'"); + log.debug("Save request in session '" + session.getIdInternal() + "'"); saveRequest(request, session); RequestDispatcher disp = context.getServletContext().getRequestDispatcher 1.10 +4 -5 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/PersistentValve.java Index: PersistentValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/PersistentValve.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- PersistentValve.java 29 Aug 2004 16:46:14 -0000 1.9 +++ PersistentValve.java 31 Mar 2005 10:31:54 -0000 1.10 @@ -22,7 +22,6 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; import org.apache.catalina.Context; import org.apache.catalina.Manager; @@ -149,15 +148,15 @@ // Read the sessionid after the response. // HttpSession hsess = hreq.getSession(false); - HttpSession hsess; + Session hsess; try { - hsess = request.getSession(); + hsess = request.getSessionInternal(); } catch (Exception ex) { hsess = null; } String newsessionId = null; if (hsess!=null) - newsessionId = hsess.getId(); + newsessionId = hsess.getIdInternal(); if (container.getLogger().isDebugEnabled()) container.getLogger().debug("newsessionId: " + newsessionId); 1.16 +2 -2 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/AccessLogValve.java Index: AccessLogValve.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/AccessLogValve.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- AccessLogValve.java 28 Mar 2005 19:06:38 -0000 1.15 +++ AccessLogValve.java 31 Mar 2005 10:31:54 -0000 1.16 @@ -854,7 +854,7 @@ } else if (pattern == 'S') { if (request != null) if (request.getSession(false) != null) - value = request.getSession(false).getId(); + value = request.getSessionInternal(false).getIdInternal(); else value = "-"; else value = "-"; 1.278 +16 -1 jakarta-tomcat-catalina/webapps/docs/changelog.xml Index: changelog.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/webapps/docs/changelog.xml,v retrieving revision 1.277 retrieving revision 1.278 diff -u -r1.277 -r1.278 --- changelog.xml 30 Mar 2005 17:23:23 -0000 1.277 +++ changelog.xml 31 Mar 2005 10:31:54 -0000 1.278 @@ -38,6 +38,7 @@ </update> </changelog> </subsection> + <subsection name="Catalina"> <changelog> <fix> @@ -48,12 +49,26 @@ <bug>34220</bug>: Provide better error message when server.xml can't be located. [Modified patch from Ralf Hauser] (yoavs) </add> + <fix> + <bug>33743</bug>: Add additional synchronization in webapp classloader to avoid + possible race condition when defining a class (remm) + </fix> + <fix> + <bug>33711</bug>: Add events on passivate and activate to cleanup SSO, and recycle + session objects when removing them from a manager (so that anyone keeping references + to it would leak a minimal amount of memory) (remm) + </fix> + <update> + Readd patch causing Session.getId to throw an ISE, and make all internal components + use a safe getIdInternal method (remm) + </update> </changelog> </subsection> + <subsection name="Jasper"> <changelog> <fix> - <bug>18477</bug>: Allow symbolic links when precompiling JSPs.(markt) + <bug>18477</bug>: Allow symbolic links when precompiling JSPs (markt) </fix> </changelog> </subsection>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]