blob: 6b0f84e3de6243f3e2acad4a098cfadc0fadf032 [file] [log] [blame]
type=page
status=published
title=Creating a Session Persistence Module
next=packaging-integrating-delivering.html
prev=adding-container-capabilities.html
~~~~~~
= Creating a Session Persistence Module
[[GSACG00008]][[gkmhj]]
[[creating-a-session-persistence-module]]
== Creating a Session Persistence Module
{productName} enables you to create a session persistence module in
the web container for high availability-related functionality by
implementing the `PersistenceStrategyBuilder` interface . Using the
`PersistenceStrategyBuilder` interface in an HK2 service makes the
session manager extensible because you can implement a new persistence
type without having to modify the web container code.
For information about other high-availability, session persistence
solutions, see "link:ha-administration-guide/session-persistence-and-failover.html#GSHAG00011[Configuring High Availability Session
Persistence and Failover]" in {productName} High
Availability Administration Guide.
[[gkmhr]][[GSACG00141]][[implementing-the-persistencestrategybuilder-interface]]
=== Implementing the `PersistenceStrategyBuilder` Interface
You can implement the `PersistenceStrategyBuilder` interface by creating
a new web session manager type.
[source,java]
----
package com.sun.enterprise.web;
import com.sun.enterprise.deployment.runtime.web.SessionManager;
import org.apache.catalina.Context;
import org.jvnet.hk2.annotations.Contract;
@Contract
public interface PersistenceStrategyBuilder {
public void initializePersistenceStrategy(
Context ctx,
SessionManager smBean,
ServerConfigLookup serverConfigLookup);
public void setPersistenceFrequency(String persistenceFrequency);
public void setPersistenceScope(String persistenceScope);
public void setPassedInPersistenceType(String persistenceType);
}
----
Here is an example of how to implement the `PersistenceStrategyBuilder`
interface by creating a new web session manager and setting a store for
it:
[source,java]
----
@Service(name="xyz")
public class XYZStrategyBuilder implements PersistenceStrategyBuilder {
private String persistenceFrequency = null;
private String persistenceScope = null;
private String persistenceType = null;
public void init(StandardContext ctx, SessionManager sessionManager,
ServerConfigLookup serverConfigLookup) {
// add listeners, valves, etc. to the ctx
// Set the manager and store
}
public void setPersistenceFrequency(String persistenceFrequency) {
this.persistenceFrequency = persistenceFrequency;
}
public void setPersistenceScope(String persistenceScope) {
this.persistenceScope = persistenceScope;
}
public void setPassedInPersistenceType(String persistenceType) {
this.passedInPersistenceType = persistenceType;
}
}
----
If a `Manager` is provided, then it will be used in {productName}.
[NOTE]
====
If a backing store is required, it is the responsibility of the
`Manager` to make sure that the `findSession` method correctly uses the
`Store` that the `Manager` provides.
====
[[sthref10]]
Example 8-1 Implementing `PersistenceStrategyBuilder` With a Custom Web
Session Manager
This example defines a session manager type that is named
`MyHASolution`.
[source,java]
----
@Service(name="MyHASolution")
public class MyHASolutionStrategyBuilder implements PersistenceStrategyBuilder {
private String persistenceFrequency = null;
private String persistenceScope = null;
private String persistenceType = null;
public void init(StandardContext ctx, SessionManager sessionManager,
ServerConfigLookup serverConfigLookup) {
// add listeners, valves, etc. to the ctx
// Set the manager and store
MyManager myManager = new MyManager(persistenceType, persistenceFrequency);
// (You could also make this a service and look it up in the habitat.
// For simplicity we are just doing a new implementation of the class here.)
MyStore store = new MyStore();
myManager.setStore(store);
ctx.setManager(myManager);
}
public void setPersistenceFrequency(String persistenceFrequency) {
this.persistenceFrequency = persistenceFrequency;
}
public void setPersistenceScope(String persistenceScope) {
this.persistenceScope = persistenceScope;
}
public void setPassedInPersistenceType(String persistenceType) {
this.passedInPersistenceType = persistenceType;
}
}
----
[[sthref11]]
Example 8-2 Session Manager Configuration in the `glassfish-web.xml`
File
This example sets the `persistence-type` attribute of the
`session-manager` element of `glassfish-web.xml` to `myHASolution`
Based on the `domain.xml` and `glassfish-web.xml` settings, the web
container looks up the appropriate `PersistenceStrategyBuilder`
interface in the Habitat and uses it.
[source,xml]
----
<glassfish-web-app>
<session-config>
<session-manager persistence-type="myHASolution"/>
<session-config>
<glassfish-web-app>
----