It is sometimes useful to preserve existing Sessions across restarts of Jetty. The
HashSessionManager
supports this feature. If you enable persistence, the HashSessionManager
saves all existing,
valid Sessions to disk before shutdown completes. On restart, Jetty restores the saved Sessions.
A SessionManager does just what its name suggests–it manages the lifecycle and state of sessions on
behalf of a webapp. Each webapp must have its own unique SessionManager instance. Enabling persistence is as simple
as configuring the HashSessionManager
as the SessionManager for a webapp and telling it where on disk
to store the sessions:
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> . . . <Set name="sessionHandler"> <New class="org.eclipse.jetty.servlet.SessionHandler"> <Arg> <New class="org.eclipse.jetty.servlet.HashSessionManager"> <Set name="storeDirectory">your/chosen/directory/goes/here</Set> </New> </Arg> </New> </Set> . . . </Configure>
The above example uses a configuration file suitable for the ContextProvider, thus you might want to check out Using the Context Provider.
You might need to ensure that the sessions are loaded AFTER the servlet environment starts up (by default, Jetty eagerly loads sessions as part of the container startup, but before it initializes the servlet environment). For example, the Wicket web framework requires the servlet environment to be available when sessions are activated.
Using SessionManager.setLazyLoad(true)
, Jetty loads sessions lazily either when it receives the
first request for a session, or the session scavenger runs for the first time, whichever happens first. Here's how
the configuration looks in XML:
<Set name="sessionHandler"> <New class="org.eclipse.jetty.servlet.SessionHandler"> <Arg> <New class="org.eclipse.jetty.servlet.HashSessionManager"> <Set name="lazyLoad">true</Set> </New> </Arg> </New> </Set>
To enable session persistence for the Jetty Maven plugin, set up the HashSessionManager in the configuration section like so:
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>7.4.3.v20110701</version> <configuration> <!-- ... --> <webAppConfig implementation="org.mortbay.jetty.plugin.JettyWebAppContext"> <defaultsDescriptor>/home/jesse/src/releases/jetty-documentation/target/checkout/target/classes/META-INF/webdefault.xml</defaultsDescriptor> <contextPath>${jetty.contextRoot}</contextPath> <sessionHandler implementation="org.eclipse.jetty.server.session.SessionHandler"> <sessionManager implementation="org.eclipse.jetty.server.session.HashSessionManager"> <storeDirectory>/home/jesse/src/releases/jetty-documentation/target/checkout/target/jetty-sessions</storeDirectory> <idleSavePeriod>1</idleSavePeriod> </sessionManager> </sessionHandler> </webAppConfig> <!-- ... --> </configuration> </plugin>