Oracle GlassFish Server Add-On Component Development Guide Release 3.1.2 Part Number E24927-01 |
|
|
View PDF |
GlassFish Server 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 Oracle GlassFish Server High Availability Administration Guide.
PersistenceStrategyBuilder
InterfaceYou 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 GlassFish Server.
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.
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>