A little update to PersistentManager.java to backup sessions that's been Idle for longer than specified max time. ..bip Index: LocalStrings.properties =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/LocalStrings.properties,v retrieving revision 1.4 diff -u -r1.4 LocalStrings.properties --- LocalStrings.properties 2001/02/03 20:36:20 1.4 +++ LocalStrings.properties 2001/04/10 02:16:05 @@ -37,6 +47,8 @@ persistentManager.deserializeError=Error deserializing Session {0}: {1} persistentManager.serializeError=Error deserializing Session {0}: {1} persistentManager.swapMaxIdle=Swapping session {0} to Store, idle for {1} seconds +persistentManager.backupMaxIdle=Backing up session {0} to Store, idle for {1} seconds +persistentManager.backupException=Exception occured when backing up Session {0}: {1} persistentManager.tooManyActive=Too many active sessions, {0}, looking for idle sessions to swap out persistentManager.swapTooManyActive=Swapping out session {0}, idle for {1} seconds too many sessions active persistentManager.processSwaps=Checking for sessions to swap out, {0} active sessions in memory Index: PersistentManager.java =================================================================== RCS file: /home/cvspublic/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/session/PersistentManager.java,v retrieving revision 1.3 diff -u -r1.3 PersistentManager.java --- PersistentManager.java 2001/04/07 10:25:03 1.3 +++ PersistentManager.java 2001/04/10 02:11:39 @@ -782,7 +782,32 @@ if (!started || maxIdleBackup < 0) return; - // FIXME: Do something useful + Session sessions[] = findSessions(); + long timeNow = System.currentTimeMillis(); + + // Back up all sessions idle longer than maxIdleBackup + if (maxIdleBackup >= 0) { + for (int i = 0; i < sessions.length; i++) { + StandardSession session = (StandardSession) sessions[i]; + if (!session.isValid()) + continue; + int timeIdle = // Truncate, do not round up + (int) ((timeNow - session.getLastAccessedTime()) / 1000L); + if (timeIdle > maxIdleBackup) { + if (debug > 1) + log(sm.getString + ("persistentManager.backupMaxIdle", + session.getId(), new Integer(timeIdle))); + + try { + backup(session); + } catch (IOException e) { + log(sm.getString + ("persistentManager.backupException", session.getId( ), e)); + } + } + } + } } @@ -862,10 +887,18 @@ * Write the session out to Store, but leave the copy in * the Manager's memory unmodified. */ - private void backup() throws IOException { - - // FIXME: Do something + private void backup(Session session) throws IOException { + if (!session.isValid() + || isSessionStale(session, System.currentTimeMillis())) + return; + try { + store.save(session); + } catch (IOException e) { + log(sm.getString + ("persistentManager.serializeError", session.getId(), e)); + throw e; + } }