Author: markt
Date: Mon Jan 18 09:17:13 2016
New Revision: 1725201
URL: http://svn.apache.org/viewvc?rev=1725201&view=rev
Log:
Refactor handling of failed loading of persisted sessions.
Old behaviour:
- sessions loaded up to point where error occurred
- serialized session data deleted
- web app started
i.e. session data after the failure was lost
New behaviour
- serialized session data deleted only if all sessions loaded without error
- web application only starts if all sessions loaded without error
Modified:
tomcat/trunk/java/org/apache/catalina/session/StandardManager.java
Modified: tomcat/trunk/java/org/apache/catalina/session/StandardManager.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/StandardManager.java?rev=1725201&r1=1725200&r2=1725201&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/StandardManager.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/session/StandardManager.java Mon Jan
18 09:17:13 2016
@@ -225,11 +225,17 @@ public class StandardManager extends Man
}
sessionCounter++;
}
- } finally {
+
// Delete the persistent storage file
if (file.exists()) {
file.delete();
}
+ } catch (Throwable t) {
+ // Clearing the partially loaded sessions here prevents the
+ // stop() method overwriting the file where the session
data
+ // is stored.
+ sessions.clear();
+ throw t;
}
}
} catch (FileNotFoundException e) {
@@ -278,6 +284,8 @@ public class StandardManager extends Man
log.debug(sm.getString("standardManager.unloading.debug"));
if (sessions.isEmpty()) {
+ // This is important in the case where the load fails since it
+ // prevents the overwriting of the data that failed to load.
log.debug(sm.getString("standardManager.unloading.nosessions"));
return; // nothing to do
}
@@ -354,7 +362,7 @@ public class StandardManager extends Man
load();
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
- log.error(sm.getString("standardManager.managerLoad"), t);
+ throw new
LifecycleException(sm.getString("standardManager.managerLoad"), t);
}
setState(LifecycleState.STARTING);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]