Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-nosql/src/main')
-rw-r--r--jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java26
-rw-r--r--jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.java49
2 files changed, 58 insertions, 17 deletions
diff --git a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java
index 38f148e653..3a70ef61dc 100644
--- a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java
+++ b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/NoSqlSessionManager.java
@@ -40,6 +40,7 @@ public abstract class NoSqlSessionManager extends AbstractSessionManager impleme
private int _savePeriod=0;
private int _idlePeriod=-1;
private boolean _invalidateOnStop;
+ private boolean _preserveOnStop;
private boolean _saveAllAttributes;
/* ------------------------------------------------------------ */
@@ -104,7 +105,10 @@ public abstract class NoSqlSessionManager extends AbstractSessionManager impleme
for (NoSqlSession session : sessions)
{
session.save(false);
- removeSession(session,false);
+
+ if (!_preserveOnStop) {
+ removeSession(session,false);
+ }
}
}
else
@@ -279,6 +283,16 @@ public abstract class NoSqlSessionManager extends AbstractSessionManager impleme
/* ------------------------------------------------------------ */
/**
+ * Preserve sessions when the session manager is stopped otherwise remove them from the DB.
+ * @return the removeOnStop
+ */
+ public boolean isPreserveOnStop()
+ {
+ return _preserveOnStop;
+ }
+
+ /* ------------------------------------------------------------ */
+ /**
* Invalidate sessions when the session manager is stopped otherwise save them to the DB.
* @param invalidateOnStop the invalidateOnStop to set
*/
@@ -289,6 +303,16 @@ public abstract class NoSqlSessionManager extends AbstractSessionManager impleme
/* ------------------------------------------------------------ */
/**
+ * Preserve sessions when the session manager is stopped otherwise remove them from the DB.
+ * @param removeOnStop the removeOnStop to set
+ */
+ public void setPreserveOnStop(boolean preserveOnStop)
+ {
+ _preserveOnStop = preserveOnStop;
+ }
+
+ /* ------------------------------------------------------------ */
+ /**
* Save all attributes of a session or only update the dirty attributes.
* @return the saveAllAttributes
*/
diff --git a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.java b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.java
index 22285ca351..47d69094ff 100644
--- a/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.java
+++ b/jetty-nosql/src/main/java/org/eclipse/jetty/nosql/mongodb/MongoSessionManager.java
@@ -131,25 +131,25 @@ public class MongoSessionManager extends NoSqlSessionManager
BasicDBObject sets = new BasicDBObject();
BasicDBObject unsets = new BasicDBObject();
- // handle new or existing
- if (version == null)
- {
- // New session
- upsert = true;
- version = new Long(1);
- sets.put(__CREATED,session.getCreationTime());
- sets.put(__VALID,true);
- sets.put(getContextKey(__VERSION),version);
- }
- else
- {
- version = new Long(((Number)version).longValue() + 1);
- update.put("$inc",__version_1);
- }
-
// handle valid or invalid
if (session.isValid())
{
+ // handle new or existing
+ if (version == null)
+ {
+ // New session
+ upsert = true;
+ version = new Long(1);
+ sets.put(__CREATED,session.getCreationTime());
+ sets.put(__VALID,true);
+ sets.put(getContextKey(__VERSION),version);
+ }
+ else
+ {
+ version = new Long(((Number)version).longValue() + 1);
+ update.put("$inc",__version_1);
+ }
+
sets.put(__ACCESSED,session.getAccessed());
Set<String> names = session.takeDirty();
if (isSaveAllAttributes() || upsert)
@@ -247,6 +247,7 @@ public class MongoSessionManager extends NoSqlSessionManager
DBObject attrs = (DBObject)getNestedValue(o,getContextKey());
+
if (attrs != null)
{
for (String name : attrs.keySet())
@@ -280,6 +281,22 @@ public class MongoSessionManager extends NoSqlSessionManager
}
}
+ /*
+ * We are refreshing so we should update the last accessed time.
+ */
+ BasicDBObject key = new BasicDBObject(__ID,session.getClusterId());
+ BasicDBObject sets = new BasicDBObject();
+ // Form updates
+ BasicDBObject update = new BasicDBObject();
+ sets.put(__ACCESSED,System.currentTimeMillis());
+ // Do the upsert
+ if (!sets.isEmpty())
+ {
+ update.put("$set",sets);
+ }
+
+ _sessions.update(key,update,false,false);
+
session.didActivate();
return version;

Back to the top