Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "Jetty/Howto/Persisting Sessions"

< Jetty‎ | Howto
m
m
Line 1: Line 1:
 
{{Jetty Howto
 
{{Jetty Howto
 
| introduction =  
 
| introduction =  
It is sometimes useful to preserve existing Sessions across restarts of Jetty. The [http://dev.eclipse.org/viewcvs/index.cgi/jetty/trunk/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java?root=RT_JETTY&view=markup 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 are.
+
It is sometimes useful to preserve existing Sessions across restarts of Jetty. The [http://dev.eclipse.org/viewcvs/index.cgi/jetty/trunk/jetty-server/src/main/java/org/eclipse/jetty/server/session/HashSessionManager.java?root=RT_JETTY&view=markup 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 35: Line 35:
 
==Delaying Session Load==
 
==Delaying Session Load==
  
Sometimes 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.
+
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 <tt>SessionManager.setLazyLoad(true)</tt>, sessions will be loaded lazily either when the first request for a session is received, or the session scavenger runs for the first time, whichever happens first. Here's how the configuration looks in xml:
+
Using <tt>SessionManager.setLazyLoad(true)</tt>, 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:
  
 
<source lang="xml">  
 
<source lang="xml">  
 
<Set name="sessionHandler">
 
<Set name="sessionHandler">
   <New class="org.mortbay.jetty.servlet.SessionHandler">
+
   <New class="org.eclipse.jetty.servlet.SessionHandler">
 
     <Arg>
 
     <Arg>
       <New class="org.mortbay.jetty.servlet.HashSessionManager">
+
       <New class="org.eclipse.jetty.servlet.HashSessionManager">
 
         <Set name="lazyLoad">true</Set>
 
         <Set name="lazyLoad">true</Set>
 
       </New>
 
       </New>
Line 53: Line 53:
 
===Enabling Persistence for the Maven Jetty Plugin===
 
===Enabling Persistence for the Maven Jetty Plugin===
  
To enable session persistence for the maven jetty plugin, set up the HashSessionManager in the <configuration> section like so:
+
To enable session persistence for the Maven Jetty plugin, set up the HashSessionManager in the <configuration> section like so:
  
 
<source lang="xml">  
 
<source lang="xml">  
 
<plugin>
 
<plugin>
   <groupId>org.mortbay.jetty</groupId>
+
   <groupId>org.eclipse.jetty</groupId>
 
   <artifactId>maven-jetty-plugin</artifactId>
 
   <artifactId>maven-jetty-plugin</artifactId>
 
   <version>6.1.6</version>
 
   <version>6.1.6</version>
 
   <configuration>
 
   <configuration>
 
     <scanIntervalSeconds>1</scanIntervalSeconds>
 
     <scanIntervalSeconds>1</scanIntervalSeconds>
     <webAppConfig implementation="org.mortbay.jetty.plugin.Jetty6PluginWebAppContext">
+
     <webAppConfig implementation="org.eclipse.jetty.plugin.Jetty6PluginWebAppContext">
 
       <contextPath>/foo</contextPath>
 
       <contextPath>/foo</contextPath>
 
       .
 
       .
 
       .
 
       .
 
       .
 
       .
       <sessionHandler implementation="org.mortbay.jetty.servlet.SessionHandler">
+
       <sessionHandler implementation="org.eclipse.jetty.servlet.SessionHandler">
         <sessionManager implementation="org.mortbay.jetty.servlet.HashSessionManager">
+
         <sessionManager implementation="org.eclipse.jetty.servlet.HashSessionManager">
 
           <storeDirectory>${basedir}/target/your/sessions/go/here</storeDirectory>
 
           <storeDirectory>${basedir}/target/your/sessions/go/here</storeDirectory>
 
         </sessionManager>
 
         </sessionManager>
Line 80: Line 80:
 
</source>
 
</source>
 
| more =  
 
| more =  
For more information, please see the [[Jetty/Tutorial/Session Clustering|Session Clustering]] tutorial.
+
For more information, see the [[Jetty/Tutorial/Session Clustering|Session Clustering]] tutorial.
 
}}
 
}}

Revision as of 17:37, 22 August 2011



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.servlet.SessionHandler">
      <Arg>
        <New class="org.eclipse.jetty.servlet.HashSessionManager">
          <Set name="storeDirectory">your/chosen/directory/goes/here</Set>
        </New>
      </Arg>
    </New>
  </Set>
  .
  .
  .
</Configure>
Idea.png
Reminder
If you want to persist the sessions from multiple webapps:
  1. Configure a separate HashSessionManager for each.
  2. Assign to each a different value for storeDirectory.


The above example uses a configuration file suitable for the [[1]], thus you might want to check out the Context Deployer 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 Maven Jetty Plugin

To enable session persistence for the Maven Jetty plugin, set up the HashSessionManager in the <configuration> section like so:

 
<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>maven-jetty-plugin</artifactId>
  <version>6.1.6</version>
  <configuration>
    <scanIntervalSeconds>1</scanIntervalSeconds>
    <webAppConfig implementation="org.eclipse.jetty.plugin.Jetty6PluginWebAppContext">
      <contextPath>/foo</contextPath>
      .
      .
      .
      <sessionHandler implementation="org.eclipse.jetty.servlet.SessionHandler">
        <sessionManager implementation="org.eclipse.jetty.servlet.HashSessionManager">
          <storeDirectory>${basedir}/target/your/sessions/go/here</storeDirectory>
        </sessionManager>
      </sessionHandler>
      .
      .
      .
    </webAppConfig>
  </configuration>
</plugin>






Additional Resources

For more information, see the Session Clustering tutorial.

Back to the top