Class DeltaSession
- java.lang.Object
-
- org.apache.catalina.session.StandardSession
-
- org.apache.catalina.ha.session.DeltaSession
-
- All Implemented Interfaces:
HttpSession
,java.io.Externalizable
,java.io.Serializable
,ClusterSession
,Session
,ReplicatedMapEntry
public class DeltaSession extends StandardSession implements java.io.Externalizable, ClusterSession, ReplicatedMapEntry
Similar to the StandardSession except that this session will keep track of deltas during a request.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.concurrent.locks.Lock
diffLock
static Log
log
protected static StringManager
sm
The string manager for this package.-
Fields inherited from class org.apache.catalina.session.StandardSession
accessCount, activityCheck, attributes, authType, creationTime, EMPTY_ARRAY, expiring, facade, id, isNew, isValid, lastAccessAtStart, lastAccessedTime, listeners, manager, maxInactiveInterval, notes, principal, sessionContext, support, thisAccessedTime
-
Fields inherited from interface org.apache.catalina.Session
SESSION_ACTIVATED_EVENT, SESSION_CREATED_EVENT, SESSION_DESTROYED_EVENT, SESSION_PASSIVATED_EVENT
-
-
Constructor Summary
Constructors Constructor Description DeltaSession()
DeltaSession(Manager manager)
Construct a new Session associated with the specified Manager.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
accessEntry()
Access to an existing object.void
addSessionListener(SessionListener listener)
Add a session event listener to this component.void
addSessionListener(SessionListener listener, boolean addDeltaRequest)
void
applyDiff(byte[] diff, int offset, int length)
Applies a diff to an existing object.protected DeltaRequest
createRequest(java.lang.String sessionId, boolean recordAllActions)
protected void
deserializeAndExecuteDeltaRequest(byte[] delta)
protected void
doReadObject(java.io.ObjectInputStream stream)
Read a serialized version of this session object from the specified object input stream.protected void
doWriteObject(java.io.ObjectOutputStream stream)
Write a serialized version of this session object to the specified object output stream.void
endAccess()
End the access and register to ReplicationValve (crossContext support)void
expire(boolean notify)
Perform the internal processing required to invalidate this session, without triggering an exception if the session has already expired.void
expire(boolean notify, boolean notifyCluster)
java.lang.ClassLoader[]
getClassLoaders()
DeltaRequest
getDeltaRequest()
byte[]
getDiff()
Returns a diff and sets the dirty map to falselong
getLastTimeReplicated()
long
getVersion()
For accuracy checking, a serialized attribute can contain a version number This number increases as modifications are made to the data.boolean
isAccessReplicate()
If this returns true, to replicate that an object has been accessedboolean
isDiffable()
If this returns true, the map will extract the diff using getDiff() Otherwise it will serialize the entire object.boolean
isDirty()
Has the object changed since last replication and is not in a locked stateboolean
isPrimarySession()
returns true if this session is the primary session, if that is the case, the manager can expire it upon timeout.boolean
isValid()
Return theisValid
flag for this session.void
lock()
Lock during serializationvoid
readExternal(java.io.ObjectInput in)
void
readObjectData(java.io.ObjectInput stream)
void
readObjectData(java.io.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.void
recycle()
Release all object references, and initialize instance variables, in preparation for reuse of this object.void
removeAttribute(java.lang.String name, boolean notify)
Remove the object bound with the specified name from this session.void
removeAttribute(java.lang.String name, boolean notify, boolean addDeltaRequest)
protected void
removeAttributeInternal(java.lang.String name, boolean notify, boolean addDeltaRequest)
void
removeNote(java.lang.String name)
Remove any object bound to the specified name in the internal notes for this session.void
removeNote(java.lang.String name, boolean addDeltaRequest)
void
removeSessionListener(SessionListener listener)
Remove a session event listener from this component.void
removeSessionListener(SessionListener listener, boolean addDeltaRequest)
void
resetDeltaRequest()
void
resetDiff()
Resets the current diff state and resets the dirty flagprotected void
setAccessCount(int count)
void
setAttribute(java.lang.String name, java.lang.Object value)
Bind an object to this session, using the specified name.void
setAttribute(java.lang.String name, java.lang.Object value, boolean notify, boolean addDeltaRequest)
void
setAuthType(java.lang.String authType)
Set the authentication type used to authenticate our cached Principal, if any.void
setAuthType(java.lang.String authType, boolean addDeltaRequest)
void
setId(java.lang.String id)
Set the session identifier for this session.void
setId(java.lang.String id, boolean notify)
Set the session identifier for this session and optionally notifies any associated listeners that a new session has been created.void
setLastTimeReplicated(long lastTimeReplicated)
Set the last replicate time.void
setMaxInactiveInterval(int interval)
Set the maximum time interval, in seconds, between client requests before the servlet container will invalidate the session.void
setMaxInactiveInterval(int interval, boolean addDeltaRequest)
void
setNew(boolean isNew)
Set theisNew
flag for this session.void
setNew(boolean isNew, boolean addDeltaRequest)
void
setNote(java.lang.String name, java.lang.Object value)
Bind an object to a specified name in the internal notes associated with this session, replacing any existing binding for this name.void
setNote(java.lang.String name, java.lang.Object value, boolean addDeltaRequest)
void
setOwner(java.lang.Object owner)
This method is called after the object has been created on a remote map.void
setPrimarySession(boolean primarySession)
Sets whether this is the primary session or not.void
setPrincipal(java.security.Principal principal)
Set the authenticated Principal that is associated with this Session.void
setPrincipal(java.security.Principal principal, boolean addDeltaRequest)
void
setVersion(long version)
Forces a certain version to a replicated map entryjava.lang.String
toString()
Return a string representation of this object.void
unlock()
Unlock after serializationvoid
writeExternal(java.io.ObjectOutput out)
void
writeObjectData(java.io.ObjectOutput stream)
void
writeObjectData(java.io.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, tellNew
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface jakarta.servlet.http.HttpSession
getAttribute, getAttributeNames, getCreationTime, getId, getLastAccessedTime, getMaxInactiveInterval, getServletContext, getSessionContext, getValue, getValueNames, invalidate, isNew, putValue, removeAttribute, removeValue
-
Methods 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 Detail
-
log
public static final Log log
-
sm
protected static final StringManager sm
The string manager for this package.
-
diffLock
protected final java.util.concurrent.locks.Lock diffLock
-
-
Constructor Detail
-
DeltaSession
public DeltaSession()
-
DeltaSession
public DeltaSession(Manager manager)
Construct a new Session associated with the specified Manager.- Parameters:
manager
- The manager with which this Session is associated
-
-
Method Detail
-
createRequest
protected DeltaRequest createRequest(java.lang.String sessionId, boolean recordAllActions)
-
isDirty
public boolean isDirty()
Has the object changed since last replication and is not in a locked state- Specified by:
isDirty
in 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:
isDiffable
in interfaceReplicatedMapEntry
- Returns:
- boolean
-
getDiff
public byte[] getDiff() throws java.io.IOException
Returns a diff and sets the dirty map to false- Specified by:
getDiff
in interfaceReplicatedMapEntry
- Returns:
- a serialized view of the difference
- Throws:
java.io.IOException
- IO error serializing
-
getClassLoaders
public java.lang.ClassLoader[] getClassLoaders()
-
applyDiff
public void applyDiff(byte[] diff, int offset, int length) throws java.io.IOException, java.lang.ClassNotFoundException
Applies a diff to an existing object.- Specified by:
applyDiff
in interfaceReplicatedMapEntry
- Parameters:
diff
- Serialized diff dataoffset
- Array offsetlength
- Array length- Throws:
java.io.IOException
- IO error deserializingjava.lang.ClassNotFoundException
- 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:
resetDiff
in 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:
lock
in 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:
unlock
in interfaceReplicatedMapEntry
-
setOwner
public void setOwner(java.lang.Object owner)
Description copied from interface:ReplicatedMapEntry
This 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:
setOwner
in interfaceReplicatedMapEntry
- Parameters:
owner
- Object
-
isAccessReplicate
public boolean isAccessReplicate()
If this returns true, to replicate that an object has been accessed- Specified by:
isAccessReplicate
in interfaceReplicatedMapEntry
- Returns:
- boolean
-
accessEntry
public void accessEntry()
Access to an existing object.- Specified by:
accessEntry
in 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:
isPrimarySession
in 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:
setPrimarySession
in interfaceClusterSession
- Parameters:
primarySession
- Flag value
-
setId
public void setId(java.lang.String id, boolean notify)
Set the session identifier for this session and optionally notifies any associated listeners that a new session has been created.- Specified by:
setId
in interfaceSession
- Overrides:
setId
in classStandardSession
- Parameters:
id
- The new session identifiernotify
- Should any associated listeners be notified that a new session has been created?
-
setId
public void setId(java.lang.String id)
Set the session identifier for this session.- Specified by:
setId
in interfaceSession
- Overrides:
setId
in classStandardSession
- Parameters:
id
- The new session identifier
-
setMaxInactiveInterval
public void setMaxInactiveInterval(int interval)
Description copied from class:StandardSession
Set 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:
setMaxInactiveInterval
in interfaceHttpSession
- Specified by:
setMaxInactiveInterval
in interfaceSession
- Overrides:
setMaxInactiveInterval
in classStandardSession
- Parameters:
interval
- The new maximum interval
-
setMaxInactiveInterval
public void setMaxInactiveInterval(int interval, boolean addDeltaRequest)
-
setNew
public void setNew(boolean isNew)
Set theisNew
flag for this session.- Specified by:
setNew
in interfaceSession
- Overrides:
setNew
in classStandardSession
- Parameters:
isNew
- The new value for theisNew
flag
-
setNew
public void setNew(boolean isNew, boolean addDeltaRequest)
-
setPrincipal
public void setPrincipal(java.security.Principal principal)
Set the authenticated Principal that is associated with this Session. This provides anAuthenticator
with a means to cache a previously authenticated Principal, and avoid potentially expensiveRealm.authenticate()
calls on every request.- Specified by:
setPrincipal
in interfaceSession
- Overrides:
setPrincipal
in classStandardSession
- Parameters:
principal
- The new Principal, ornull
if none
-
setPrincipal
public void setPrincipal(java.security.Principal principal, boolean addDeltaRequest)
-
setAuthType
public void setAuthType(java.lang.String authType)
Set the authentication type used to authenticate our cached Principal, if any.- Specified by:
setAuthType
in interfaceSession
- Overrides:
setAuthType
in classStandardSession
- Parameters:
authType
- The new cached authentication type
-
setAuthType
public void setAuthType(java.lang.String authType, boolean addDeltaRequest)
-
isValid
public boolean isValid()
Return theisValid
flag for this session.- Specified by:
isValid
in interfaceSession
- Overrides:
isValid
in classStandardSession
- Returns:
true
if the session is still valid
-
endAccess
public void endAccess()
End the access and register to ReplicationValve (crossContext support)- Specified by:
endAccess
in interfaceSession
- Overrides:
endAccess
in 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:
expire
in 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:
recycle
in interfaceSession
- Overrides:
recycle
in classStandardSession
-
toString
public java.lang.String toString()
Return a string representation of this object.- Overrides:
toString
in classStandardSession
-
addSessionListener
public void addSessionListener(SessionListener listener)
Description copied from class:StandardSession
Add a session event listener to this component.- Specified by:
addSessionListener
in interfaceSession
- Overrides:
addSessionListener
in classStandardSession
- Parameters:
listener
- the SessionListener instance that should be notified for session events
-
addSessionListener
public void addSessionListener(SessionListener listener, boolean addDeltaRequest)
-
removeSessionListener
public void removeSessionListener(SessionListener listener)
Description copied from class:StandardSession
Remove a session event listener from this component.- Specified by:
removeSessionListener
in interfaceSession
- Overrides:
removeSessionListener
in classStandardSession
- Parameters:
listener
- remove the session listener, which will no longer be notified
-
removeSessionListener
public void removeSessionListener(SessionListener listener, boolean addDeltaRequest)
-
readExternal
public void readExternal(java.io.ObjectInput in) throws java.io.IOException, java.lang.ClassNotFoundException
- Specified by:
readExternal
in interfacejava.io.Externalizable
- Throws:
java.io.IOException
java.lang.ClassNotFoundException
-
readObjectData
public void readObjectData(java.io.ObjectInputStream stream) throws java.lang.ClassNotFoundException, java.io.IOException
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:
readObjectData
in classStandardSession
- Parameters:
stream
- The object input stream to read from- Throws:
java.lang.ClassNotFoundException
- if an unknown class is specifiedjava.io.IOException
- if an input/output error occurs
-
readObjectData
public void readObjectData(java.io.ObjectInput stream) throws java.lang.ClassNotFoundException, java.io.IOException
- Throws:
java.lang.ClassNotFoundException
java.io.IOException
-
writeObjectData
public void writeObjectData(java.io.ObjectOutputStream stream) throws java.io.IOException
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:
writeObjectData
in classStandardSession
- Parameters:
stream
- The object output stream to write to- Throws:
java.io.IOException
- if an input/output error occurs
-
writeObjectData
public void writeObjectData(java.io.ObjectOutput stream) throws java.io.IOException
- Throws:
java.io.IOException
-
resetDeltaRequest
public void resetDeltaRequest()
-
getDeltaRequest
public DeltaRequest getDeltaRequest()
-
deserializeAndExecuteDeltaRequest
protected void deserializeAndExecuteDeltaRequest(byte[] delta) throws java.io.IOException, java.lang.ClassNotFoundException
- Throws:
java.io.IOException
java.lang.ClassNotFoundException
-
removeAttribute
public void removeAttribute(java.lang.String name, boolean notify)
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:
removeAttribute
in 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:
java.lang.IllegalStateException
- if this method is called on an invalidated session
-
removeAttribute
public void removeAttribute(java.lang.String name, boolean notify, boolean addDeltaRequest)
-
setAttribute
public void setAttribute(java.lang.String name, java.lang.Object value)
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:
setAttribute
in interfaceHttpSession
- Overrides:
setAttribute
in classStandardSession
- Parameters:
name
- Name to which the object is bound, cannot be nullvalue
- Object to be bound, cannot be null- Throws:
java.lang.IllegalArgumentException
- if an attempt is made to add a non-serializable object in an environment marked distributable.java.lang.IllegalStateException
- if this method is called on an invalidated session
-
setAttribute
public void setAttribute(java.lang.String name, java.lang.Object value, boolean notify, boolean addDeltaRequest)
-
removeNote
public void removeNote(java.lang.String name)
Description copied from class:StandardSession
Remove any object bound to the specified name in the internal notes for this session.- Specified by:
removeNote
in interfaceSession
- Overrides:
removeNote
in classStandardSession
- Parameters:
name
- Name of the note to be removed
-
removeNote
public void removeNote(java.lang.String name, boolean addDeltaRequest)
-
setNote
public void setNote(java.lang.String name, java.lang.Object value)
Description copied from class:StandardSession
Bind an object to a specified name in the internal notes associated with this session, replacing any existing binding for this name.- Specified by:
setNote
in interfaceSession
- Overrides:
setNote
in classStandardSession
- Parameters:
name
- Name to which the object should be boundvalue
- Object to be bound to the specified name
-
setNote
public void setNote(java.lang.String name, java.lang.Object value, boolean addDeltaRequest)
-
doReadObject
protected void doReadObject(java.io.ObjectInputStream stream) throws java.lang.ClassNotFoundException, java.io.IOException
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:
doReadObject
in classStandardSession
- Parameters:
stream
- The input stream to read from- Throws:
java.lang.ClassNotFoundException
- if an unknown class is specifiedjava.io.IOException
- if an input/output error occurs
-
writeExternal
public void writeExternal(java.io.ObjectOutput out) throws java.io.IOException
- Specified by:
writeExternal
in interfacejava.io.Externalizable
- Throws:
java.io.IOException
-
doWriteObject
protected void doWriteObject(java.io.ObjectOutputStream stream) throws java.io.IOException
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
distributable
property of the associated Manager is set totrue
.- Overrides:
doWriteObject
in classStandardSession
- Parameters:
stream
- The output stream to write to- Throws:
java.io.IOException
- if an input/output error occurs
-
removeAttributeInternal
protected void removeAttributeInternal(java.lang.String name, boolean notify, boolean addDeltaRequest)
-
getLastTimeReplicated
public long getLastTimeReplicated()
- Specified by:
getLastTimeReplicated
in interfaceReplicatedMapEntry
- Returns:
- the last replicate time.
-
getVersion
public long getVersion()
Description copied from interface:ReplicatedMapEntry
For 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:
getVersion
in interfaceReplicatedMapEntry
- Returns:
- long - the version number or -1 if the data is not versioned
-
setLastTimeReplicated
public void setLastTimeReplicated(long lastTimeReplicated)
Description copied from interface:ReplicatedMapEntry
Set the last replicate time.- Specified by:
setLastTimeReplicated
in interfaceReplicatedMapEntry
- Parameters:
lastTimeReplicated
- New timestamp
-
setVersion
public void setVersion(long version)
Description copied from interface:ReplicatedMapEntry
Forces a certain version to a replicated map entry- Specified by:
setVersion
in interfaceReplicatedMapEntry
- Parameters:
version
- long
-
setAccessCount
protected void setAccessCount(int count)
-
-