Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "Jetty/Howto/Persisting Sessions"
(Fixed the classes and syntax to match the new jetty-maven-plugin packages and syntax.) |
|||
(2 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Jetty Howto | {{Jetty Howto | ||
| introduction = | | introduction = | ||
− | It is sometimes useful to preserve existing Sessions across restarts of Jetty. The [http:// | + | |
+ | {{Jetty Redirect|http://www.eclipse.org/jetty/documentation/current/using-persistent-sessions.html}} | ||
+ | |||
+ | It is sometimes useful to preserve existing Sessions across restarts of Jetty. The [http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/server/session/HashSessionManager.html 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. | ||
==Enabling Persistence== | ==Enabling Persistence== | ||
Line 13: | Line 16: | ||
. | . | ||
<Set name="sessionHandler"> | <Set name="sessionHandler"> | ||
− | <New class="org.eclipse.jetty. | + | <New class="org.eclipse.jetty.server.session.SessionHandler"> |
<Arg> | <Arg> | ||
− | <New class="org.eclipse.jetty. | + | <New class="org.eclipse.jetty.server.session.HashSessionManager"> |
<Set name="storeDirectory">your/chosen/directory/goes/here</Set> | <Set name="storeDirectory">your/chosen/directory/goes/here</Set> | ||
</New> | </New> | ||
Line 31: | Line 34: | ||
# Assign to each a different value for ''storeDirectory''.}} | # Assign to each a different value for ''storeDirectory''.}} | ||
− | The above example uses a configuration file suitable for the | + | The above example uses a configuration file suitable for the [http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/deploy/providers/ContextProvider.html ContextProvider], thus you might want to check out the [[Jetty/Feature/ContextDeployer|Context Provider]] feature guide. |
==Delaying Session Load== | ==Delaying Session Load== |
Latest revision as of 14:44, 23 April 2013
Contents
Introduction
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.
Enabling Persistence
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.server.session.SessionHandler"> <Arg> <New class="org.eclipse.jetty.server.session.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 the Context Provider feature guide.
Delaying Session Load
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>
Enabling Persistence for the Jetty Maven Plugin
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>${project.build.outputDirectory}/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>${basedir}/target/jetty-sessions</storeDirectory> <idleSavePeriod>1</idleSavePeriod> </sessionManager> </sessionHandler> </webAppConfig> <!-- ... --> </configuration> </plugin>
Additional Resources
For more information, see the Session Clustering tutorial.