Class DeltaSession
- All Implemented Interfaces:
Externalizable,Serializable,HttpSession,ClusterSession,Session,ReplicatedMapEntry
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final Lockstatic final Logprotected static final StringManagerThe string manager for this package.Fields inherited from class org.apache.catalina.session.StandardSession
accessCount, ACTIVITY_CHECK, attributes, authType, creationTime, EMPTY_ARRAY, expiring, facade, id, isNew, isValid, LAST_ACCESS_AT_START, lastAccessedTime, listeners, manager, maxInactiveInterval, notes, principal, sessionContext, STRICT_SERVLET_COMPLIANCE, support, thisAccessedTimeFields inherited from interface org.apache.catalina.Session
SESSION_ACTIVATED_EVENT, SESSION_CREATED_EVENT, SESSION_DESTROYED_EVENT, SESSION_PASSIVATED_EVENT -
Constructor Summary
ConstructorsConstructorDescriptionDeltaSession(Manager manager) Construct a new Session associated with the specified Manager. -
Method Summary
Modifier and TypeMethodDescriptionvoidAccess to an existing object.voidaddSessionListener(SessionListener listener) Add a session event listener to this component.voidaddSessionListener(SessionListener listener, boolean addDeltaRequest) voidapplyDiff(byte[] diff, int offset, int length) Applies a diff to an existing object.protected DeltaRequestcreateRequest(String sessionId, boolean recordAllActions) protected voiddeserializeAndExecuteDeltaRequest(byte[] delta) protected voiddoReadObject(ObjectInputStream stream) Read a serialized version of this session object from the specified object input stream.protected voiddoWriteObject(ObjectOutputStream stream) Write a serialized version of this session object to the specified object output stream.voidEnd the access and register to ReplicationValve (crossContext support)voidexpire(boolean notify) Perform the internal processing required to invalidate this session, without triggering an exception if the session has already expired.voidexpire(boolean notify, boolean notifyCluster) Deprecated.Unused.byte[]getDiff()Returns a diff and sets the dirty map to falselonglongFor accuracy checking, a serialized attribute can contain a version number This number increases as modifications are made to the data.booleanIf this returns true, to replicate that an object has been accessedbooleanIf this returns true, the map will extract the diff using getDiff() Otherwise it will serialize the entire object.booleanisDirty()Has the object changed since last replication and is not in a locked statebooleanreturns true if this session is the primary session, if that is the case, the manager can expire it upon timeout.booleanisValid()Return theisValidflag for this session.voidlock()Lock during serializationvoidvoidreadObjectData(ObjectInput stream) voidreadObjectData(ObjectInputStream stream) Read a serialized version of the contents of this session object from the specified object input stream, without requiring that the StandardSession itself have been serialized.voidrecycle()Release all object references, and initialize instance variables, in preparation for reuse of this object.voidremoveAttribute(String name, boolean notify) Remove the object bound with the specified name from this session.voidremoveAttribute(String name, boolean notify, boolean addDeltaRequest) protected voidremoveAttributeInternal(String name, boolean notify, boolean addDeltaRequest) voidremoveNote(String name) Remove any object bound to the specified name in the internal notes for this session.voidremoveNote(String name, boolean addDeltaRequest) voidremoveSessionListener(SessionListener listener) Remove a session event listener from this component.voidremoveSessionListener(SessionListener listener, boolean addDeltaRequest) voidvoidResets the current diff state and resets the dirty flagprotected voidsetAccessCount(int count) voidsetAttribute(String name, Object value) Bind an object to this session, using the specified name.voidsetAttribute(String name, Object value, boolean notify, boolean addDeltaRequest) voidsetAuthType(String authType) Set the authentication type used to authenticate our cached Principal, if any.voidsetAuthType(String authType, boolean addDeltaRequest) voidSet the session identifier for this session.voidSet the session identifier for this session and optionally notifies any associated listeners that a new session has been created.voidsetLastTimeReplicated(long lastTimeReplicated) Set the last replicate time.voidsetMaxInactiveInterval(int interval) Set the maximum time interval, in seconds, between client requests before the servlet container will invalidate the session.voidsetMaxInactiveInterval(int interval, boolean addDeltaRequest) voidsetNew(boolean isNew) Set theisNewflag for this session.voidsetNew(boolean isNew, boolean addDeltaRequest) voidBind an object to a specified name in the internal notes associated with this session, replacing any existing binding for this name.voidvoidThis method is called after the object has been created on a remote map.voidsetPrimarySession(boolean primarySession) Sets whether this is the primary session or not.voidsetPrincipal(Principal principal) Set the authenticated Principal that is associated with this Session.voidsetPrincipal(Principal principal, boolean addDeltaRequest) voidsetVersion(long version) Forces a certain version to a replicated map entrytoString()Return a string representation of this object.voidunlock()Unlock after serializationvoidvoidwriteObjectData(ObjectOutput stream) voidwriteObjectData(ObjectOutputStream stream) Write a serialized version of the contents of this session object to the specified object output stream, without requiring that the StandardSession itself have been serialized.Methods inherited from class org.apache.catalina.session.StandardSession
access, activate, exclude, expire, fireSessionEvent, getAttribute, getAttributeNames, getAuthType, getCreationTime, getCreationTimeInternal, getId, getIdInternal, getIdleTime, getIdleTimeInternal, getLastAccessedTime, getLastAccessedTimeInternal, getManager, getMaxInactiveInterval, getNote, getNoteNames, getPrincipal, getServletContext, getSession, getSessionContext, getThisAccessedTime, getThisAccessedTimeInternal, getValue, getValueNames, invalidate, isAttributeDistributable, isNew, isValidInternal, keys, passivate, putValue, removeAttribute, removeAttributeInternal, removeValue, setAttribute, setCreationTime, setManager, setValid, tellChangedSessionId, tellNewMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface javax.servlet.http.HttpSession
getAttribute, getAttributeNames, getCreationTime, getId, getLastAccessedTime, getMaxInactiveInterval, getServletContext, getSessionContext, getValue, getValueNames, invalidate, isNew, putValue, removeAttribute, removeValueMethods inherited from interface org.apache.catalina.Session
access, expire, getAuthType, getCreationTime, getCreationTimeInternal, getId, getIdInternal, getIdleTime, getIdleTimeInternal, getLastAccessedTime, getLastAccessedTimeInternal, getManager, getMaxInactiveInterval, getNote, getNoteNames, getPrincipal, getSession, getThisAccessedTime, getThisAccessedTimeInternal, isAttributeDistributable, setCreationTime, setManager, setValid, tellChangedSessionId
-
Field Details
-
log
-
sm
The string manager for this package. -
diffLock
-
-
Constructor Details
-
DeltaSession
public DeltaSession() -
DeltaSession
Construct a new Session associated with the specified Manager.- Parameters:
manager- The manager with which this Session is associated
-
-
Method Details
-
createRequest
-
isDirty
public boolean isDirty()Has the object changed since last replication and is not in a locked state- Specified by:
isDirtyin interfaceReplicatedMapEntry- Returns:
- boolean
-
isDiffable
public boolean isDiffable()If this returns true, the map will extract the diff using getDiff() Otherwise it will serialize the entire object.- Specified by:
isDiffablein interfaceReplicatedMapEntry- Returns:
- boolean
-
getDiff
Returns a diff and sets the dirty map to false- Specified by:
getDiffin interfaceReplicatedMapEntry- Returns:
- a serialized view of the difference
- Throws:
IOException- IO error serializing
-
getClassLoaders
-
applyDiff
public void applyDiff(byte[] diff, int offset, int length) throws IOException, ClassNotFoundException Applies a diff to an existing object.- Specified by:
applyDiffin interfaceReplicatedMapEntry- Parameters:
diff- Serialized diff dataoffset- Array offsetlength- Array length- Throws:
IOException- IO error deserializingClassNotFoundException- Serialization error
-
resetDiff
public void resetDiff()Resets the current diff state and resets the dirty flagThis implementation is a NO-OP. The diff is reset in
getDiff().- Specified by:
resetDiffin interfaceReplicatedMapEntry
-
lock
public void lock()Lock during serializationThis implementation is a NO-OP. Any required locking takes place in the methods that make modifications.
- Specified by:
lockin interfaceReplicatedMapEntry
-
unlock
public void unlock()Unlock after serializationThis implementation is a NO-OP. Any required unlocking takes place in the methods that make modifications.
- Specified by:
unlockin interfaceReplicatedMapEntry
-
setOwner
Description copied from interface:ReplicatedMapEntryThis method is called after the object has been created on a remote map. On this method, the object can initialize itself for any data that wasn't- Specified by:
setOwnerin interfaceReplicatedMapEntry- Parameters:
owner- Object
-
isAccessReplicate
public boolean isAccessReplicate()If this returns true, to replicate that an object has been accessed- Specified by:
isAccessReplicatein interfaceReplicatedMapEntry- Returns:
- boolean
-
accessEntry
public void accessEntry()Access to an existing object.- Specified by:
accessEntryin interfaceReplicatedMapEntry
-
isPrimarySession
public boolean isPrimarySession()returns true if this session is the primary session, if that is the case, the manager can expire it upon timeout.- Specified by:
isPrimarySessionin interfaceClusterSession- Returns:
- True if this session is primary
-
setPrimarySession
public void setPrimarySession(boolean primarySession) Sets whether this is the primary session or not.- Specified by:
setPrimarySessionin interfaceClusterSession- Parameters:
primarySession- Flag value
-
setId
Description copied from interface:SessionSet the session identifier for this session and optionally notifies any associated listeners that a new session has been created.- Specified by:
setIdin interfaceSession- Overrides:
setIdin classStandardSession- Parameters:
id- The new session identifiernotify- Should any associated listeners be notified that a new session has been created?
-
setId
Set the session identifier for this session.- Specified by:
setIdin interfaceSession- Overrides:
setIdin classStandardSession- Parameters:
id- The new session identifier
-
setMaxInactiveInterval
public void setMaxInactiveInterval(int interval) Description copied from class:StandardSessionSet the maximum time interval, in seconds, between client requests before the servlet container will invalidate the session. A zero or negative time indicates that the session should never time out.- Specified by:
setMaxInactiveIntervalin interfaceHttpSession- Specified by:
setMaxInactiveIntervalin interfaceSession- Overrides:
setMaxInactiveIntervalin classStandardSession- Parameters:
interval- The new maximum interval
-
setMaxInactiveInterval
public void setMaxInactiveInterval(int interval, boolean addDeltaRequest) -
setNew
public void setNew(boolean isNew) Set theisNewflag for this session.- Specified by:
setNewin interfaceSession- Overrides:
setNewin classStandardSession- Parameters:
isNew- The new value for theisNewflag
-
setNew
public void setNew(boolean isNew, boolean addDeltaRequest) -
setPrincipal
Set the authenticated Principal that is associated with this Session. This provides anAuthenticatorwith a means to cache a previously authenticated Principal, and avoid potentially expensiveRealm.authenticate()calls on every request.- Specified by:
setPrincipalin interfaceSession- Overrides:
setPrincipalin classStandardSession- Parameters:
principal- The new Principal, ornullif none
-
setPrincipal
-
setAuthType
Set the authentication type used to authenticate our cached Principal, if any.- Specified by:
setAuthTypein interfaceSession- Overrides:
setAuthTypein classStandardSession- Parameters:
authType- The new cached authentication type
-
setAuthType
-
isValid
public boolean isValid()Return theisValidflag for this session.- Specified by:
isValidin interfaceSession- Overrides:
isValidin classStandardSession- Returns:
trueif the session is still valid
-
endAccess
public void endAccess()End the access and register to ReplicationValve (crossContext support)- Specified by:
endAccessin interfaceSession- Overrides:
endAccessin classStandardSession
-
expire
public void expire(boolean notify) Perform the internal processing required to invalidate this session, without triggering an exception if the session has already expired.- Overrides:
expirein classStandardSession- Parameters:
notify- Should we notify listeners about the demise of this session?
-
expire
public void expire(boolean notify, boolean notifyCluster) -
recycle
public void recycle()Release all object references, and initialize instance variables, in preparation for reuse of this object.- Specified by:
recyclein interfaceSession- Overrides:
recyclein classStandardSession
-
toString
Return a string representation of this object.- Overrides:
toStringin classStandardSession
-
addSessionListener
Description copied from class:StandardSessionAdd a session event listener to this component.- Specified by:
addSessionListenerin interfaceSession- Overrides:
addSessionListenerin classStandardSession- Parameters:
listener- the SessionListener instance that should be notified for session events
-
addSessionListener
-
removeSessionListener
Description copied from class:StandardSessionRemove a session event listener from this component.- Specified by:
removeSessionListenerin interfaceSession- Overrides:
removeSessionListenerin classStandardSession- Parameters:
listener- remove the session listener, which will no longer be notified
-
removeSessionListener
-
readExternal
- Specified by:
readExternalin interfaceExternalizable- Throws:
IOExceptionClassNotFoundException
-
readObjectData
Read a serialized version of the contents of this session object from the specified object input stream, without requiring that the StandardSession itself have been serialized.- Overrides:
readObjectDatain classStandardSession- Parameters:
stream- The object input stream to read from- Throws:
ClassNotFoundException- if an unknown class is specifiedIOException- if an input/output error occurs
-
readObjectData
- Throws:
ClassNotFoundExceptionIOException
-
writeObjectData
Write a serialized version of the contents of this session object to the specified object output stream, without requiring that the StandardSession itself have been serialized.- Overrides:
writeObjectDatain classStandardSession- Parameters:
stream- The object output stream to write to- Throws:
IOException- if an input/output error occurs
-
writeObjectData
- Throws:
IOException
-
resetDeltaRequest
public void resetDeltaRequest() -
getDeltaRequest
Deprecated.Unused. This method will be removed in Tomcat 12.Get the request.- Returns:
- the request
-
deserializeAndExecuteDeltaRequest
protected void deserializeAndExecuteDeltaRequest(byte[] delta) throws IOException, ClassNotFoundException - Throws:
IOExceptionClassNotFoundException
-
removeAttribute
Remove the object bound with the specified name from this session. If the session does not have an object bound with this name, this method does nothing.After this method executes, and if the object implements
HttpSessionBindingListener, the container callsvalueUnbound()on the object.- Overrides:
removeAttributein classStandardSession- Parameters:
name- Name of the object to remove from this session.notify- Should we notify interested listeners that this attribute is being removed?- Throws:
IllegalStateException- if this method is called on an invalidated session
-
removeAttribute
-
setAttribute
Bind an object to this session, using the specified name. If an object of the same name is already bound to this session, the object is replaced.After this method executes, and if the object implements
HttpSessionBindingListener, the container callsvalueBound()on the object.- Specified by:
setAttributein interfaceHttpSession- Overrides:
setAttributein classStandardSession- Parameters:
name- Name to which the object is bound, cannot be nullvalue- Object to be bound, cannot be null- Throws:
IllegalArgumentException- if an attempt is made to add a non-serializable object in an environment marked distributable.IllegalStateException- if this method is called on an invalidated session
-
setAttribute
-
removeNote
Description copied from class:StandardSessionRemove any object bound to the specified name in the internal notes for this session.- Specified by:
removeNotein interfaceSession- Overrides:
removeNotein classStandardSession- Parameters:
name- Name of the note to be removed
-
removeNote
-
setNote
Description copied from class:StandardSessionBind an object to a specified name in the internal notes associated with this session, replacing any existing binding for this name.- Specified by:
setNotein interfaceSession- Overrides:
setNotein classStandardSession- Parameters:
name- Name to which the object should be boundvalue- Object to be bound to the specified name
-
setNote
-
doReadObject
Read a serialized version of this session object from the specified object input stream.IMPLEMENTATION NOTE : The reference to the owning Manager is not restored by this method, and must be set explicitly.
- Overrides:
doReadObjectin classStandardSession- Parameters:
stream- The input stream to read from- Throws:
ClassNotFoundException- if an unknown class is specifiedIOException- if an input/output error occurs
-
writeExternal
- Specified by:
writeExternalin interfaceExternalizable- Throws:
IOException
-
doWriteObject
Write a serialized version of this session object to the specified object output stream.IMPLEMENTATION NOTE : The owning Manager will not be stored in the serialized representation of this Session. After calling
readObject(), you must set the associated Manager explicitly.IMPLEMENTATION NOTE : Any attribute that is not Serializable will be unbound from the session, with appropriate actions if it implements HttpSessionBindingListener. If you do not want any such attributes, be sure the
distributableproperty of the associated Manager is set totrue.- Overrides:
doWriteObjectin classStandardSession- Parameters:
stream- The output stream to write to- Throws:
IOException- if an input/output error occurs
-
removeAttributeInternal
-
getLastTimeReplicated
public long getLastTimeReplicated()- Specified by:
getLastTimeReplicatedin interfaceReplicatedMapEntry- Returns:
- the last replicate time.
-
getVersion
public long getVersion()Description copied from interface:ReplicatedMapEntryFor accuracy checking, a serialized attribute can contain a version number This number increases as modifications are made to the data. The replicated map can use this to ensure accuracy on a periodic basis- Specified by:
getVersionin interfaceReplicatedMapEntry- Returns:
- long - the version number or -1 if the data is not versioned
-
setLastTimeReplicated
public void setLastTimeReplicated(long lastTimeReplicated) Description copied from interface:ReplicatedMapEntrySet the last replicate time.- Specified by:
setLastTimeReplicatedin interfaceReplicatedMapEntry- Parameters:
lastTimeReplicated- New timestamp
-
setVersion
public void setVersion(long version) Description copied from interface:ReplicatedMapEntryForces a certain version to a replicated map entry- Specified by:
setVersionin interfaceReplicatedMapEntry- Parameters:
version- long
-
setAccessCount
protected void setAccessCount(int count)
-