blob: 4f8dac55834fd11d2c539b03bc470c0a6900c966 [file] [log] [blame]
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Persistent Sessions: Inifinspan</title><link rel="stylesheet" type="text/css" href="css/docbook.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><meta name="keywords" content="jetty, servlet, servlet-api, cometd, http, websocket, eclipse, maven, java, server, software"><link rel="home" href="index.html" title="Jetty"><link rel="up" href="session-management.html" title="Chapter&nbsp;10.&nbsp;Session Management"><link rel="prev" href="configuring-sessions-mongo.html" title="Persistent Sessions: MongoDB"><link rel="next" href="configuring-sessions-hazelcast.html" title="Persistent Sessions: Hazelcast"><link xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" rel="shortcut icon" href="images/favicon.ico"><link rel="stylesheet" href="css/highlighter/foundation.css"><script src="js/highlight.pack.js"></script><script>
hljs.initHighlightingOnLoad();
</script><link type="text/css" rel="stylesheet" href="css/font-awesome/font-awesome.min.css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><tr><td style="width: 25%"><a href="http://www.eclipse.org/jetty"><img src="images/jetty-header-logo.png" alt="Jetty Logo"></a><br><span style="font-size: small">
Version: 9.4.28-SNAPSHOT</span></td><td style="width: 50%"></td></tr></table><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Persistent Sessions: Inifinspan</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="configuring-sessions-mongo.html"><i class="fa fa-chevron-left" aria-hidden="true"></i> Previous</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;10.&nbsp;Session Management<br><a accesskey="p" href="index.html"><i class="fa fa-home" aria-hidden="true"></i> Home</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="configuring-sessions-hazelcast.html">Next <i class="fa fa-chevron-right" aria-hidden="true"></i></a></td></tr></table><hr></div><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="jetty-callout"><h5 class="callout"><a href="http://www.webtide.com/">Contact the core Jetty developers at
<span class="website">www.webtide.com</span></a></h5><p>
private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ...
scalability guidance for your apps and Ajax/Comet projects ... development services for sponsored feature development
</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="configuring-sessions-infinispan"></a>Persistent Sessions: Inifinspan</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="configuring-sessions-infinispan.html#_enabling_infinispan_sessions">Enabling Infinispan Sessions</a></span></dt><dt><span class="section"><a href="configuring-sessions-infinispan.html#_configuring_inifinspan_remote_properties">Configuring Inifinspan Remote Properties</a></span></dt><dt><span class="section"><a href="configuring-sessions-infinispan.html#_configuring_the_remote_infinispan_query_module">Configuring the Remote Infinispan Query Module</a></span></dt><dt><span class="section"><a href="configuring-sessions-infinispan.html#_configuring_embedded_inifinspan_clustering">Configuring Embedded Inifinspan Clustering</a></span></dt><dt><span class="section"><a href="configuring-sessions-infinispan.html#_configuring_inifinspan_embedded_properties">Configuring Inifinspan Embedded Properties</a></span></dt><dt><span class="section"><a href="configuring-sessions-infinispan.html#_configuring_inifinspan_embedded_query">Configuring Inifinspan Embedded Query</a></span></dt><dt><span class="section"><a href="configuring-sessions-infinispan.html#_converting_session_format_for_jetty_9_4_13">Converting session format for jetty-9.4.13</a></span></dt></dl></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_enabling_infinispan_sessions"></a>Enabling Infinispan Sessions</h3></div></div></div><p>When using the Jetty distribution, you will first need to enable the <code class="literal">session-store-infinispan-remote</code> <a class="link" href="startup-modules.html" title="Managing Startup Modules">module</a> for your <a class="link" href="startup-base-and-home.html" title="Managing Jetty Base and Jetty Home">Jetty base</a> using the <code class="literal">--add-to-start</code> argument on the command line.</p><div class="screenexample"><pre class="screen">$ java -jar ../start.jar --create-startd
INFO : Base directory was modified
$ java -jar ../start.jar --add-to-start=session-store-infinispan-remote
ALERT: There are enabled module(s) with licenses.
The following 1 module(s):
+ contains software not provided by the Eclipse Foundation!
+ contains software not covered by the Eclipse Public License!
+ has not been audited for compliance with its license
Module: session-store-infinispan-remote
+ Infinispan is an open source project hosted on Github and released under the Apache 2.0 license.
+ http://infinispan.org/
+ http://www.apache.org/licenses/LICENSE-2.0.html
Proceed (y/N)? y
INFO : server transitively enabled, ini template available with --add-to-start=server
INFO : sessions transitively enabled, ini template available with --add-to-start=sessions
INFO : session-store-infinispan-remote initialized in ${jetty.base}/start.d/session-store-infinispan-remote.ini
MKDIR : ${jetty.base}/lib/infinispan
DOWNLD: https://repo1.maven.org/maven2/org/infinispan/infinispan-remote-it/9.4.8.Final/infinispan-remote-it-9.4.8.Final.jar to ${jetty.base}/lib/infinispan/infinispan-remote-it-9.4.8.Final.jar
MKDIR : ${jetty.base}/resources
COPY : ${jetty.home}/modules/session-store-infinispan-remote/resources/hotrod-client.properties to ${jetty.base}/resources/hotrod-client.properties
INFO : Base directory was modified</pre></div><p>Doing this enables the remote Infinispan Session module and any dependent modules or files needed for it to run on the server.
The example above is using a fresh <code class="literal">${jetty.base}</code> with nothing else enabled.
Because Infinispan is not a technology provided by the Eclipse Foundation, users are prompted to assent to the licenses of the external vendor (Apache in this case).</p><p>When the <code class="literal">--add-to-start</code> argument was added to the command line, it enabled the the <code class="literal">session-store-infinispan-remote</code> module as well as the <code class="literal">sessions</code> and <code class="literal">server</code> modules, which are required for Infinispan session management to operate.
It also downloaded the needed Infinispan-specific jar files and created a directory named <code class="literal">${jetty.base}/lib/infinispan/</code> to house them.</p><p>In addition to adding these modules to the classpath of the server it also added several ini configuration files to the <code class="literal">${jetty.base}/start.d</code> directory.</p><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-asterisk" aria-hidden="true"></i> Note</h3><p>If you have updated versions of the jar files automatically downloaded by Jetty, you can place them in the associated <code class="literal">${jetty.base}/lib/</code> directory and use the <code class="literal">--skip-file-validation=&lt;module name&gt;</code> command line option to prevent errors when starting your server.</p></div></blockquote></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_configuring_inifinspan_remote_properties"></a>Configuring Inifinspan Remote Properties</h3></div></div></div><p>Opening the <code class="literal">start.d/session-store-infinispan-remote.ini</code> will show a list of all the configurable options for the JDBC module:</p><div class="screenexample"><pre class="screen"># ---------------------------------------
# Module: session-store-infinispan-remote
# Enables session data store in a remote Infinispan cache
# ---------------------------------------
--module=session-store-infinispan-remote
#jetty.session.infinispan.remoteCacheName=sessions
#jetty.session.infinispan.idleTimeout.seconds=0
#jetty.session.gracePeriod.seconds=3600
#jetty.session.savePeriod.seconds=0</pre></div><div class="variablelist"><dl class="variablelist"><dt><span class="term">jetty.session.infinispan.remoteCacheName</span></dt><dd>Name of the cache in Infinispan where sessions will be stored.</dd><dt><span class="term">jetty.session.infinispan.idleTimeout.seconds</span></dt><dd>Amount of time, in seconds, that a session entry in infinispan can be idle (ie not read or written) before infinispan will delete its entry.
Usually, you do <span class="strong"><strong>not</strong></span> want to set a value for this, as you want jetty to handle all session expiration (and call any SessionListeners).
However, if there is the possibility that sessions can be left in infinispan but no longer referenced by any jetty node (so called "zombie" or "orphan" sessions), then you might want to use this feature.
You should make sure that the number of seconds you specify is sufficiently large to avoid the situation where a session is still being referenced by jetty, but is rarely accessed and thus deleted by infinispan.
Alternatively, you can enable the <code class="literal">infinispan-remote-query</code> module, which will allow jetty to search the infinispan session cache to proactively find and properly (ie calling any SessionListeners) scavenge defunct sessions.</dd><dt><span class="term">jetty.session.gracePeriod.seconds</span></dt><dd>Amount of time, in seconds, to wait for other nodes to be checked to verify an expired session is in fact expired throughout the cluster before closing it.</dd><dt><span class="term">jetty.session.savePeriod.seconds=0</span></dt><dd>By default whenever the last concurrent request leaves a session, that session is always persisted via the <code class="literal">SessionDataStore</code>, even if the only thing that changed on the session is its updated last access time.
A non-zero value means that the <code class="literal">SessionDataStore</code> will skip persisting the session if only the access time changed, and it has been less than <code class="literal">savePeriod</code> seconds since the last time the session was written.</dd></dl></div><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-asterisk" aria-hidden="true"></i> Note</h3><p>Configuring <code class="literal">savePeriod</code> is useful if your persistence technology is very slow/costly for writes.
In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to <code class="literal">savePeriod</code> seconds.
This allows the possibility that a node may prematurely expire the session, even though it is in use by another node.
Thorough consideration of the <code class="literal">maxIdleTime</code> of the session when setting the <code class="literal">savePeriod</code> is imperative - there is no point in setting a <code class="literal">savePeriod</code> that is larger than the <code class="literal">maxIdleTime</code>.</p></div></blockquote></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_configuring_the_remote_infinispan_query_module"></a>Configuring the Remote Infinispan Query Module</h3></div></div></div><p>Enabling this module allows jetty to search infinispan for expired sessions that are no longer being referenced by any jetty node.
Note that this is an <span class="strong"><strong>additional</strong></span> module, to be used in conjuction with the <code class="literal">session-store-infinispan-remote</code> module.</p><div class="screenexample"><pre class="screen">java -jar ../start.jar --add-to-start=infinispan-remote-query</pre></div><p>There are no configuration properties associated with this module.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_configuring_embedded_inifinspan_clustering"></a>Configuring Embedded Inifinspan Clustering</h3></div></div></div><p>During testing, it can be helpful to run an in-process instance of Infinispan.
To enable this you will first need to enable the <code class="literal">session-store-infinispan-embedded</code> <a class="link" href="startup-modules.html" title="Managing Startup Modules">module</a> for your <a class="link" href="startup-base-and-home.html" title="Managing Jetty Base and Jetty Home">Jetty base</a> using the <code class="literal">--add-to-start</code> argument on the command line.</p><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-plus" aria-hidden="true"></i> Important</h3><p>If you are running Jetty with JDK 9 or greater, enable <code class="literal">session-store-infinispan-embedded-910.mod</code> instead.</p></div></blockquote></div><div class="screenexample"><pre class="screen">java -jar ../start.jar --add-to-start=session-store-infinispan-embedded
ALERT: There are enabled module(s) with licenses.
The following 1 module(s):
+ contains software not provided by the Eclipse Foundation!
+ contains software not covered by the Eclipse Public License!
+ has not been audited for compliance with its license
Module: session-store-infinispan-embedded
+ Infinispan is an open source project hosted on Github and released under the Apache 2.0 license.
+ http://infinispan.org/
+ http://www.apache.org/licenses/LICENSE-2.0.html
Proceed (y/N)? y
INFO : server initialised (transitively) in ${jetty.base}/start.d/server.ini
INFO : sessions initialised (transitively) in ${jetty.base}/start.d/sessions.ini
INFO : session-store-infinispan-embedded initialised in ${jetty.base}/start.d/session-store-infinispan-embedded.ini
DOWNLOAD: https://repo1.maven.org/maven2/org/infinispan/infinispan-embedded-it/9.4.8.Final/infinispan-embedded-it-9.4.8.Final.jar to ${jetty.base}/lib/infinispan/infinispan-embedded-it-9.4.8.Final.jar
INFO : Base directory was modified</pre></div><p>Doing this enables the embedded Infinispan Session module and any dependent modules or files needed for it to run on the server.
The example above is using a fresh <code class="literal">${jetty.base}</code> with nothing else enabled.
Because Infinispan is not a technology provided by the Eclipse Foundation, users are prompted to assent to the licenses of the external vendor (Apache in this case).</p><p>When the <code class="literal">--add-to-start</code> argument was added to the command line, it enabled the the <code class="literal">session-store-infinispan-embedded</code> module as well as the <code class="literal">sessions</code> and <code class="literal">server</code> modules, which are required for Infinispan session management to operate.
It also downloaded the needed Infinispan-specific jar files and created a directory named <code class="literal">${jetty.base}/lib/infinispan/</code> to house them.</p><p>In addition to adding these modules to the classpath of the server it also added several ini configuration files to the <code class="literal">${jetty.base}/start.d</code> directory.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_configuring_inifinspan_embedded_properties"></a>Configuring Inifinspan Embedded Properties</h3></div></div></div><p>Opening the <code class="literal">start.d/session-store-infinispan-remote.ini</code> will show a list of all the configurable options for the JDBC module:</p><div class="screenexample"><pre class="screen"># ---------------------------------------
# Module: session-store-infinispan-embedded
# Enables session data store in a local Infinispan cache
# ---------------------------------------
--module=session-store-infinispan-embedded
#jetty.session.gracePeriod.seconds=3600
#jetty.session.savePeriod.seconds=0</pre></div><div class="variablelist"><dl class="variablelist"><dt><span class="term">jetty.session.gracePeriod.seconds</span></dt><dd>Amount of time, in seconds, to wait for other nodes to be checked to verify an expired session is in fact expired throughout the cluster before closing it.</dd><dt><span class="term">jetty.session.savePeriod.seconds=0</span></dt><dd><p class="simpara">By default whenever the last concurrent request leaves a session, that session is always persisted via the <code class="literal">SessionDataStore</code>, even if the only thing that changed on the session is its updated last access time.
A non-zero value means that the <code class="literal">SessionDataStore</code> will skip persisting the session if only the access time changed, and it has been less than <code class="literal">savePeriod</code> seconds since the last time the session was written.</p><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-asterisk" aria-hidden="true"></i> Note</h3><p>Configuring <code class="literal">savePeriod</code> is useful if your persistence technology is very slow/costly for writes.
In a clustered environment, there is a risk of the last access time of the session being out-of-date in the shared store for up to <code class="literal">savePeriod</code> seconds.
This allows the possibility that a node may prematurely expire the session, even though it is in use by another node.
Thorough consideration of the <code class="literal">maxIdleTime</code> of the session when setting the <code class="literal">savePeriod</code> is imperative - there is no point in setting a <code class="literal">savePeriod</code> that is larger than the <code class="literal">maxIdleTime</code>.</p></div></blockquote></div></dd></dl></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_configuring_inifinspan_embedded_query"></a>Configuring Inifinspan Embedded Query</h3></div></div></div><p>Similarly to the <code class="literal">session-store-infinispan-remote</code> module, the <code class="literal">session-store-infinispan-embedded</code> module has an adjunct module <code class="literal">infinispan-embedded-query</code>, which when enabled, will allow jetty to detect and properly scavenge defunct sessions stranded in infinispan.</p><div class="screenexample"><pre class="screen">java -jar ../start.jar --add-to-start=infinispan-embedded-query</pre></div><p>There are no configuration properties associated with this module.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_converting_session_format_for_jetty_9_4_13"></a>Converting session format for jetty-9.4.13</h3></div></div></div><p>From jetty-9.4.13 onwards, we have changed the format of the serialized session when using a remote cache (ie using hotrod).
Prior to release 9.4.13 we used the default Infinispan serialization, however this was not able to store sufficient information to allow jetty to properly deserialize session attributes in all circumstances.
See issue <a class="link" href="https://github.com/eclipse/jetty.project/issues/2919" target="_top">https://github.com/eclipse/jetty.project/issues/2919</a> for more background.</p><p>We have provided a conversion program which will convert any sessions stored in Infinispan to the new format.</p><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="important" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-plus" aria-hidden="true"></i> Important</h3><p>We recommend that you backup your stored sessions before running the conversion program.</p></div></blockquote></div><p>How to use the converter:</p><div class="screenexample"><pre class="screen">java -cp servlet-api-3.1.jar:jetty-util-9.4.13.jar:jetty-server-9.4.13.jar:infinispan-remote-9.1.0.Final.jar:jetty-infinispan-9.4.13.jar:[other classpath] org.eclipse.jetty.session.infinispan.InfinispanSessionLegacyConverter
Usage: InfinispanSessionLegacyConverter [-Dhost=127.0.0.1] [-Dverbose=true|false] &lt;cache-name&gt; [check]</pre></div><div class="variablelist"><dl class="variablelist"><dt><span class="term">The classpath</span></dt><dd>Must contain the servlet-api, jetty-util, jetty-server, jetty-infinispan and infinispan-remote jars. If your sessions contain attributes that use application classes, you will also need to also put those classes onto the classpath. If your session has been authenticated, you may also need to include the jetty-security and jetty-http jars on the classpath.</dd><dt><span class="term">Parameters</span></dt><dd><p class="simpara">When used with no arguments the usage message is printed. When used with the <code class="literal">cache-name</code> parameter the conversion is performed. When used with both <code class="literal">cache-name</code> and <code class="literal">check</code> parameters, sessions are checked for whether or not they are converted.</p><div class="variablelist"><dl class="variablelist"><dt><span class="term">-Dhost</span></dt><dd>you can optionally provide a system property with the address of your remote Infinispan server. Defaults to the localhost.</dd><dt><span class="term">-Dverbose</span></dt><dd>defaults to false. If true, prints more comprehensive stacktrace information about failures. Useful to diagnose why a session is not converted.</dd><dt><span class="term">cache-name</span></dt><dd>the name of the remote cache containing your sessions. This is mandatory.</dd><dt><span class="term">check</span></dt><dd>the optional check command will verify sessions have been converted. Use it <span class="emphasis"><em>after</em></span> doing the conversion.</dd></dl></div></dd></dl></div><p>To perform the conversion, run the InfinispanSessionLegacyConverter with just the <code class="literal">cache-name</code>, and optionally the <code class="literal">host</code> system property.
The following command will attempt to convert all sessions in the cached named <code class="literal">my-remote-cache</code> on the machine <code class="literal">myhost</code>, ensuring that application classes in the <code class="literal">/my/custom/classes</code> directory are on the classpath:</p><div class="screenexample"><pre class="screen">java -cp servlet-api-3.1.jar:jetty-util-9.4.13.jar:jetty-server-9.4.13.jar:infinispan-remote-9.1.0.Final.jar:jetty-infinispan-9.4.13.jar:/my/custom/classes org.eclipse.jetty.session.infinispan.InfinispanSessionLegacyConverter -Dhost=myhost my-remote-cache</pre></div><p>If the converter fails to convert a session, an error message and stacktrace will be printed and the conversion will abort. The failed session should be untouched, however <span class="emphasis"><em>it is prudent to take a backup of your cache before attempting the conversion</em></span>.</p></div></div><script type="text/javascript">
SyntaxHighlighter.all()
</script><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="configuring-sessions-mongo.html"><i class="fa fa-chevron-left" aria-hidden="true"></i> Previous</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="session-management.html"><i class="fa fa-chevron-up" aria-hidden="true"></i> Top</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="configuring-sessions-hazelcast.html">Next <i class="fa fa-chevron-right" aria-hidden="true"></i></a></td></tr><tr><td width="40%" align="left" valign="top">Persistent Sessions: MongoDB&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html"><i class="fa fa-home" aria-hidden="true"></i> Home</a></td><td width="40%" align="right" valign="top">&nbsp;Persistent Sessions: Hazelcast</td></tr></table></div><p xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><div class="jetty-callout">
See an error or something missing?
<span class="callout"><a href="http://github.com/eclipse/jetty.project">Contribute to this documentation at
<span class="website"><i class="fa fa-github" aria-hidden="true"></i> Github!</span></a></span><span style="float: right"><i>(Generated: 2020-03-10)</i></span></div></p></body></html>