From f7f2604969d205a04754f12de526b8364a459c25 Mon Sep 17 00:00:00 2001 From: hns Date: Tue, 25 Sep 2007 10:43:04 +0000 Subject: [PATCH] * Move cleanupSessions() from Application to SessionManager. --- src/helma/framework/core/Application.java | 72 +------------------- src/helma/framework/core/SessionManager.java | 70 +++++++++++++++++++ 2 files changed, 71 insertions(+), 71 deletions(-) diff --git a/src/helma/framework/core/Application.java b/src/helma/framework/core/Application.java index 8e5703ff..ed0dd2bf 100644 --- a/src/helma/framework/core/Application.java +++ b/src/helma/framework/core/Application.java @@ -1479,7 +1479,7 @@ public final class Application implements Runnable { // purge sessions try { - lastSessionCleanup = cleanupSessions(lastSessionCleanup); + lastSessionCleanup = sessionMgr.cleanupSessions(lastSessionCleanup); } catch (Exception x) { logError("Error in session cleanup: " + x, x); } catch (LinkageError x) { @@ -1511,76 +1511,6 @@ public final class Application implements Runnable { logEvent("Scheduler for " + name + " exiting"); } - /** - * Purge sessions that have not been used for a certain amount of time. - * This is called by run(). - * - * @param lastSessionCleanup the last time sessions were purged - * @return the updated lastSessionCleanup value - */ - private long cleanupSessions(long lastSessionCleanup) { - - long now = System.currentTimeMillis(); - long sessionCleanupInterval = 60000; - - // check if we should clean up user sessions - if ((now - lastSessionCleanup) > sessionCleanupInterval) { - - // get session timeout - int sessionTimeout = 30; - - try { - sessionTimeout = Math.max(0, - Integer.parseInt(props.getProperty("sessionTimeout", - "30"))); - } catch (NumberFormatException nfe) { - logEvent("Invalid sessionTimeout setting: " + props.getProperty("sessionTimeout")); - } - - RequestEvaluator thisEvaluator = null; - - try { - - thisEvaluator = getEvaluator(); - - Map sessions = sessionMgr.getSessions(); - - Iterator it = sessions.values().iterator(); - while (it.hasNext()) { - Session session = (Session) it.next(); - - session.pruneUploads(); - if ((now - session.lastTouched()) > (sessionTimeout * 60000)) { - NodeHandle userhandle = session.userHandle; - - if (userhandle != null) { - try { - Object[] param = {session.getSessionId()}; - - thisEvaluator.invokeInternal(userhandle, "onLogout", param); - } catch (Exception x) { - // errors should already be logged by requestevaluator, but you never know - logError("Error in onLogout", x); - } - } - - sessionMgr.discardSession(session); - } - } - } catch (Exception cx) { - logEvent("Error cleaning up sessions: " + cx); - cx.printStackTrace(); - } finally { - if (thisEvaluator != null) { - releaseEvaluator(thisEvaluator); - } - } - return now; - } else { - return lastSessionCleanup; - } - } - /** * Executes cron jobs for the application, which are either * defined in app.properties or via app.addCronJob(). diff --git a/src/helma/framework/core/SessionManager.java b/src/helma/framework/core/SessionManager.java index 820f7bea..0a881019 100644 --- a/src/helma/framework/core/SessionManager.java +++ b/src/helma/framework/core/SessionManager.java @@ -17,6 +17,7 @@ package helma.framework.core; import helma.objectmodel.INode; import helma.objectmodel.db.Node; +import helma.objectmodel.db.NodeHandle; import helma.scripting.ScriptingEngine; import java.util.*; @@ -261,4 +262,73 @@ public class SessionManager { } } + /** + * Purge sessions that have not been used for a certain amount of time. + * This is called by run(). + * + * @param lastSessionCleanup the last time sessions were purged + * @return the updated lastSessionCleanup value + */ + protected long cleanupSessions(long lastSessionCleanup) { + + long now = System.currentTimeMillis(); + long sessionCleanupInterval = 60000; + + // check if we should clean up user sessions + if ((now - lastSessionCleanup) > sessionCleanupInterval) { + + // get session timeout + int sessionTimeout = 30; + + try { + sessionTimeout = Math.max(0, + Integer.parseInt(app.getProperty("sessionTimeout", "30"))); + } catch (NumberFormatException nfe) { + app.logEvent("Invalid sessionTimeout setting: " + app.getProperty("sessionTimeout")); + } + + RequestEvaluator thisEvaluator = null; + + try { + + thisEvaluator = app.getEvaluator(); + + Session[] sessionArray = (Session[]) sessions.values().toArray(new Session[0]); + + for (int i = 0; i < sessionArray.length; i++) { + Session session = sessionArray[i]; + + session.pruneUploads(); + if ((now - session.lastTouched()) > (sessionTimeout * 60000)) { + NodeHandle userhandle = session.userHandle; + + if (userhandle != null) { + try { + Object[] param = {session.getSessionId()}; + + thisEvaluator.invokeInternal(userhandle, "onLogout", param); + } catch (Exception x) { + // errors should already be logged by requestevaluator, but you never know + app.logError("Error in onLogout", x); + } + } + + discardSession(session); + } + } + } catch (Exception cx) { + app.logEvent("Error cleaning up sessions: " + cx); + cx.printStackTrace(); + } finally { + if (thisEvaluator != null) { + app.releaseEvaluator(thisEvaluator); + } + } + return now; + } else { + return lastSessionCleanup; + } + } + + }