diff options
author | Jan Bartel | 2015-12-11 00:42:29 +0000 |
---|---|---|
committer | Jan Bartel | 2015-12-11 00:42:29 +0000 |
commit | 31ea1704a1fdaef6f7d862dfacb905c5ac4728a3 (patch) | |
tree | c44fc7cac5efe7628c95942115d7d42ddb61014e /jetty-server/src/main/java/org/eclipse/jetty | |
parent | 4793be634ff4a17fe5e7c3c6f34725fe11dec06f (diff) | |
download | org.eclipse.jetty.project-31ea1704a1fdaef6f7d862dfacb905c5ac4728a3.tar.gz org.eclipse.jetty.project-31ea1704a1fdaef6f7d862dfacb905c5ac4728a3.tar.xz org.eclipse.jetty.project-31ea1704a1fdaef6f7d862dfacb905c5ac4728a3.zip |
Make calling passivate/active depend on type of session data store; fix tests
Diffstat (limited to 'jetty-server/src/main/java/org/eclipse/jetty')
11 files changed, 73 insertions, 17 deletions
diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java index 9c39970352..0a0f9e921e 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java @@ -46,13 +46,15 @@ public abstract class AbstractSessionIdManager extends AbstractLifeCycle impleme protected SessionScavenger _scavenger; /* ------------------------------------------------------------ */ - public AbstractSessionIdManager() + public AbstractSessionIdManager(Server server) { + _server = server; } /* ------------------------------------------------------------ */ - public AbstractSessionIdManager(Random random) + public AbstractSessionIdManager(Server server, Random random) { + this(server); _random=random; } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionStore.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionStore.java index a489940d8d..39b580e32e 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionStore.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionStore.java @@ -232,13 +232,15 @@ public abstract class AbstractSessionStore extends AbstractLifeCycle implements throw new IllegalArgumentException ("Put key="+id+" session="+(session==null?"null":session.getId())); session.setSessionManager(_manager); - + //if the session is new, the data has changed, or the cache is considered stale, write it to any backing store if ((session.isNew() || session.getSessionData().isDirty() || isStale(session)) && _sessionDataStore != null) { - session.willPassivate(); + if (_sessionDataStore.isPassivating()) + session.willPassivate(); _sessionDataStore.store(id, session.getSessionData()); - session.didActivate(); + if (_sessionDataStore.isPassivating()) + session.didActivate(); } doPutIfAbsent(id,session); diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/CachingSessionDataStore.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/CachingSessionDataStore.java index bc17018146..f68d81252b 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/CachingSessionDataStore.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/CachingSessionDataStore.java @@ -156,6 +156,15 @@ public class CachingSessionDataStore extends AbstractSessionDataStore super.doStop(); } + /** + * @see org.eclipse.jetty.server.session.SessionDataStore#isPassivating() + */ + @Override + public boolean isPassivating() + { + return true; + } + } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/ContextId.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/ContextId.java index ae95dce815..6824ebc2e7 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/ContextId.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/ContextId.java @@ -37,7 +37,7 @@ public class ContextId public static ContextId getContextId (String node, Context context) { - return new ContextId(node, getContextPath(context), getVirtualHost(context)); + return new ContextId((node==null?"":node), getContextPath(context), getVirtualHost(context)); } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/FileSessionDataStore.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/FileSessionDataStore.java index 4e49f6b782..bbef34e356 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/FileSessionDataStore.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/FileSessionDataStore.java @@ -221,7 +221,7 @@ public class FileSessionDataStore extends AbstractSessionDataStore File file = null; if (_storeDir != null) { - file = new File(_storeDir, id); + file = new File(_storeDir, _contextId.toString()+"_"+id); if (file.exists()) file.delete(); @@ -274,6 +274,15 @@ public class FileSessionDataStore extends AbstractSessionDataStore if (!_storeDir.exists()) _storeDir.mkdirs(); } + + /** + * @see org.eclipse.jetty.server.session.SessionDataStore#isPassivating() + */ + @Override + public boolean isPassivating() + { + return true; + } } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionIdManager.java index cddcb5924d..70d94259e4 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionIdManager.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionIdManager.java @@ -21,6 +21,7 @@ package org.eclipse.jetty.server.session; import java.util.Set; +import org.eclipse.jetty.server.Server; import org.eclipse.jetty.util.ConcurrentHashSet; /** @@ -30,6 +31,14 @@ import org.eclipse.jetty.util.ConcurrentHashSet; */ public class HashSessionIdManager extends AbstractSessionIdManager { + /** + * @param server + */ + public HashSessionIdManager(Server server) + { + super(server); + } + private final Set<String> _ids = new ConcurrentHashSet<String>(); diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionDataStore.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionDataStore.java index e8be2b19c3..e73e7bba2f 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionDataStore.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionDataStore.java @@ -1020,6 +1020,19 @@ public class JDBCSessionDataStore extends AbstractSessionDataStore { _unloadables.clear(); } + + + + + + /** + * @see org.eclipse.jetty.server.session.SessionDataStore#isPassivating() + */ + @Override + public boolean isPassivating() + { + return true; + } } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java index 8c7bf55365..55d2a3df9d 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/JDBCSessionIdManager.java @@ -144,14 +144,12 @@ public class JDBCSessionIdManager extends org.eclipse.jetty.server.session.Abstr public JDBCSessionIdManager(Server server) { - super(); - _server=server; + super(server); } public JDBCSessionIdManager(Server server, Random random) { - super(random); - _server=server; + super(server,random); } public SessionIdTableSchema getSessionIdTableSchema() diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/NullSessionDataStore.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/NullSessionDataStore.java index c7d9897d52..35de7f0f6c 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/NullSessionDataStore.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/NullSessionDataStore.java @@ -75,4 +75,14 @@ public class NullSessionDataStore extends AbstractSessionDataStore return candidates; //whatever is suggested we accept } + + /** + * @see org.eclipse.jetty.server.session.SessionDataStore#isPassivating() + */ + @Override + public boolean isPassivating() + { + return false; + } + } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionDataStore.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionDataStore.java index 7130060dbb..78c014c356 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionDataStore.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionDataStore.java @@ -93,4 +93,11 @@ public interface SessionDataStore extends LifeCycle public Set<String> getExpired (Set<String> candidates); + + /** + * True if this type of datastore will passivate session objects + * @return + */ + public boolean isPassivating (); + } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionManager.java index eb50d4eee5..2314456a15 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionManager.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionManager.java @@ -233,8 +233,6 @@ public class SessionManager extends ContainerLifeCycle implements org.eclipse.je if (_sessionStore == null) throw new IllegalStateException("No session store configured"); - if (_sessionIdManager == null) - throw new IllegalStateException("No session id manager"); _context=ContextHandler.getCurrentContext(); _loader=Thread.currentThread().getContextClassLoader(); @@ -255,7 +253,7 @@ public class SessionManager extends ContainerLifeCycle implements org.eclipse.je try { Thread.currentThread().setContextClassLoader(serverLoader); - _sessionIdManager=new HashSessionIdManager(); + _sessionIdManager=new HashSessionIdManager(server); server.setSessionIdManager(_sessionIdManager); server.manage(_sessionIdManager); _sessionIdManager.start(); @@ -302,10 +300,9 @@ public class SessionManager extends ContainerLifeCycle implements org.eclipse.je tmp=_context.getInitParameter(org.eclipse.jetty.server.SessionManager.__CheckRemoteSessionEncoding); if (tmp!=null) _checkingRemoteSessionIdEncoding=Boolean.parseBoolean(tmp); - - _contextId = ContextId.getContextId(_sessionIdManager.getWorkerName(), _context); } + _contextId = ContextId.getContextId(_sessionIdManager.getWorkerName(), _context); if (_sessionStore instanceof AbstractSessionStore) ((AbstractSessionStore)_sessionStore).setSessionManager(this); @@ -985,7 +982,7 @@ public class SessionManager extends ContainerLifeCycle implements org.eclipse.je return; // couldn't get/load a session for this context with that id } - _sessionTimeStats.set(round((System.currentTimeMillis() - session.getCreationTime())/1000.0)); + _sessionTimeStats.set(round((System.currentTimeMillis() - session.getSessionData().getCreated())/1000.0)); session.invalidateAndRemove(); } catch (Exception e) |