type=page status=published title=Creating a Session Persistence Module next=packaging-integrating-delivering.html prev=adding-container-capabilities.html ~~
{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 "Configuring High Availability Session Persistence and Failover" in {productName} High Availability Administration Guide.
You can implement the PersistenceStrategyBuilder
interface by creating
a new web session manager type.
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:
@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
|
Example 8-1 Implementing PersistenceStrategyBuilder
With a Custom Web
Session Manager
This example defines a session manager type that is named
MyHASolution
.
@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;
}
}
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.
<glassfish-web-app>
<session-config>
<session-manager persistence-type="myHASolution"/>
<session-config>
<glassfish-web-app>