| org.apache.catalina.session.StandardManager org.apache.catalina.ha.session.SimpleTcpReplicationManager
SimpleTcpReplicationManager | public class SimpleTcpReplicationManager extends StandardManager implements ClusterManager(Code) | | Title: Tomcat Session Replication for Tomcat 4.0
Description: A very simple straight forward implementation of
session replication of servers in a cluster.
This session replication is implemented "live". By live
I mean, when a session attribute is added into a session on Node A
a message is broadcasted to other messages and setAttribute is called on the
replicated sessions.
A full description of this implementation can be found under
Filip's Tomcat Page
Copyright: See apache license
Company: www.filip.net
author: Filip Hanik author: Bela Ban (modifications for synchronous replication) version: 1.0 for TC 4.0 version: Description: The InMemoryReplicationManager is a session manager that replicated version: session information in memory. version:
version: The InMemoryReplicationManager extends the StandardManager hence it allows for us version: to inherit all the basic session management features like expiration, session listeners etc version:
version: To communicate with other nodes in the cluster, the InMemoryReplicationManager sends out 7 different type of multicast messages version: all defined in the SessionMessage class.
version: When a session is replicated (not an attribute added/removed) the session is serialized into version: a byte array using the StandardSession.readObjectData, StandardSession.writeObjectData methods. |
defaultMode | protected boolean defaultMode(Code) | | |
distributable | protected boolean distributable(Code) | | |
mChannelStarted | protected boolean mChannelStarted(Code) | | |
mExpireSessionsOnShutdown | protected boolean mExpireSessionsOnShutdown(Code) | | Set to true if we don't want the sessions to expire on shutdown
|
mManagerRunning | protected boolean mManagerRunning(Code) | | |
mPrintToScreen | protected boolean mPrintToScreen(Code) | | |
stateTransferred | protected boolean stateTransferred(Code) | | Flag to keep track if the state has been transferred or not
Assumes false.
|
synchronousReplication | protected boolean synchronousReplication(Code) | | Use synchronous rather than asynchronous replication. Every session modification (creation, change, removal etc)
will be sent to all members. The call will then wait for max milliseconds, or forever (if timeout is 0) for
all responses.
|
useDirtyFlag | protected boolean useDirtyFlag(Code) | | |
SimpleTcpReplicationManager | public SimpleTcpReplicationManager()(Code) | | Constructor, just calls super()
|
createSession | protected Session createSession(String sessionId, boolean notify, boolean setId)(Code) | | Creates a HTTP session.
Most of the code in here is copied from the StandardManager.
This is not pretty, yeah I know, but it was necessary since the
StandardManager had hard coded the session instantiation to the a
StandardSession, when we actually want to instantiate a ReplicatedSession
If the call comes from the Tomcat servlet engine, a SessionMessage goes out to the other
nodes in the cluster that this session has been created.
Parameters: notify - - if set to true the other nodes in the cluster will be notified.This flag is needed so that we can create a session before we deserializea replicated one See Also: ReplicatedSession |
createSession | public Session createSession(String sessionId)(Code) | | Construct and return a new session object, based on the default
settings specified by this Manager's properties. The session
id will be assigned by this method, and available via the getId()
method of the returned session. If a new session cannot be created
for any reason, return null .
exception: IllegalStateException - if a new session cannot beinstantiated for any reason |
doDomainReplication | public boolean doDomainReplication()(Code) | | |
getDistributable | public boolean getDistributable()(Code) | | |
getExpireSessionsOnShutdown | public boolean getExpireSessionsOnShutdown()(Code) | | |
getInvalidatedSessions | public String[] getInvalidatedSessions()(Code) | | |
getReplicationStream | public ReplicationStream getReplicationStream(byte[] data) throws IOException(Code) | | Open Stream and use correct ClassLoader (Container) Switch
ThreadClassLoader
Parameters: data - The object input stream throws: IOException - |
isDefaultMode | public boolean isDefaultMode()(Code) | | Returns the defaultMode. |
isManagerRunning | public boolean isManagerRunning()(Code) | | |
isNotifyListenersOnReplication | public boolean isNotifyListenersOnReplication()(Code) | | |
isStateTransferred | public boolean isStateTransferred()(Code) | | |
messageReceived | protected void messageReceived(SessionMessage msg, Member sender)(Code) | | This method is called by the received thread when a SessionMessage has
been received from one of the other nodes in the cluster.
Parameters: msg - - the message received Parameters: sender - - the sender of the message, this is used if we receive aEVT_GET_ALL_SESSION message, so that we only reply tothe requesting node |
readSession | protected Session readSession(byte[] data, String sessionId)(Code) | | Reinstantiates a serialized session from the data passed in.
This will first call createSession() so that we get a fresh instance with all
the managers set and all the transient fields validated.
Then it calls Session.readObjectData(byte[]) to deserialize the object
Parameters: data - - a byte array containing session data a valid Session object, null if an error occurs |
sessionInvalidated | public void sessionInvalidated(String sessionId)(Code) | | |
setDefaultMode | public void setDefaultMode(boolean defaultMode)(Code) | | Parameters: defaultMode - The defaultMode to set. |
setDistributable | public void setDistributable(boolean dist)(Code) | | |
setDomainReplication | public void setDomainReplication(boolean sendClusterDomainOnly)(Code) | | Parameters: sendClusterDomainOnly - The sendClusterDomainOnly to set. |
setExpireSessionsOnShutdown | public void setExpireSessionsOnShutdown(boolean expireSessionsOnShutdown)(Code) | | |
setNotifyListenersOnReplication | public void setNotifyListenersOnReplication(boolean notifyListenersOnReplication)(Code) | | |
setPrintToScreen | public void setPrintToScreen(boolean printtoscreen)(Code) | | |
setSynchronousReplication | public void setSynchronousReplication(boolean flag)(Code) | | |
setUseDirtyFlag | public void setUseDirtyFlag(boolean usedirtyflag)(Code) | | |
start | public void start() throws LifecycleException(Code) | | Prepare for the beginning of active use of the public methods of this
component. This method should be called after configure() ,
and before any of the public methods of the component are utilized.
Starts the cluster communication channel, this will connect with the other nodes
in the cluster, and request the current session state to be transferred to this node.
exception: IllegalStateException - if this component has already beenstarted exception: LifecycleException - if this component detects a fatal errorthat prevents this component from being used |
stop | public void stop() throws LifecycleException(Code) | | Gracefully terminate the active use of the public methods of this
component. This method should be the last one called on a given
instance of this component.
This will disconnect the cluster communication channel and stop the listener thread.
exception: IllegalStateException - if this component has not been started exception: LifecycleException - if this component detects a fatal errorthat needs to be reported |
unload | public void unload() throws IOException(Code) | | Override persistence since they don't go hand in hand with replication for now.
|
writeSession | protected byte[] writeSession(Session session)(Code) | | Serialize a session into a byte array
This method simple calls the writeObjectData method on the session
and returns the byte data from that call
Parameters: session - - the session to be serialized a byte array containing the session data, null if the serialization failed |
|
|