Package org.apache.tapestry5.http.internal.services

# Class ClusteredSessionImpl

java.lang.Object
org.apache.tapestry5.http.internal.services.SessionImpl
org.apache.tapestry5.http.internal.services.ClusteredSessionImpl

All Implemented Interfaces:
  `Session`

public class ClusteredSessionImpl extends SessionImpl
A thin wrapper around `HttpSession` that supports re-storing of mutable session attributes at the end of the request (see `restoreDirtyObjects()`). This is only used when clustering.

Since:
  5.3
See Also:
  - `SessionPersistedObjectAnalyzer`

- ## Nested Class Summary

  ## Nested classes/interfaces inherited from interface org.apache.tapestry5.http.services.Session

  `Session.LockMode`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `ClusteredSessionImpl(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpSession session, SessionLock lock, SessionPersistedObjectAnalyzer analyzer)`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Object`
  `getAttribute(String name)`
  Returns the value previously stored in the session.
  `void`
  `invalidate()`
  Invalidates this session then unbinds any objects bound to it.
  `void`
  `restoreDirtyObjects()`
  Re-stores dirty objects back into the session.
  `void`
  `setAttribute(String name, Object value)`
  Sets the value of an attribute.

  ### Methods inherited from class org.apache.tapestry5.http.internal.services.SessionImpl

  `containsAttribute, containsAttribute, getAttribute, getAttributeNames, getAttributeNames, getAttributeNames, getAttributeNames, getMaxInactiveInterval, isInvalidated, setMaxInactiveInterval`

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### ClusteredSessionImpl

    public ClusteredSessionImpl(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpSession session, SessionLock lock, SessionPersistedObjectAnalyzer analyzer)

- ## Method Details

  - ### getAttribute

    public Object getAttribute(String name)
    Description copied from interface: `Session`
    Returns the value previously stored in the session.

    By default, a `WRITE` lock is requested.

    Specified by:
      `getAttribute` in interface `Session`
    Overrides:
      `getAttribute` in class `SessionImpl`
    Parameters:
      `name` - The name of the attribute

  - ### setAttribute

    public void setAttribute(String name, Object value)
    Description copied from interface: `Session`
    Sets the value of an attribute. If the value is `null`, then the attribute is deleted.
    Specified by:
      `setAttribute` in interface `Session`
    Overrides:
      `setAttribute` in class `SessionImpl`
    Parameters:
      `name` - The name of the attribute
      `value` - The new value of the attribute; `null` deletes the attribute.

  - ### invalidate

    public void invalidate()
    Description copied from interface: `Session`
    Invalidates this session then unbinds any objects bound to it.
    Specified by:
      `invalidate` in interface `Session`
    Overrides:
      `invalidate` in class `SessionImpl`

  - ### restoreDirtyObjects

    public void restoreDirtyObjects()
    Description copied from interface: `Session`
    Re-stores dirty objects back into the session. This is necessary to support clustering, because (in most application servers) session objects are only broadcast around the cluster from setAttribute(). If a mutable session object is read and changed, those changes will be limited to a single server in the cluster, which can cause confusing application failures in the event of a failover. Does nothing if there are no changes, or the session has been invalidated.
    Specified by:
      `restoreDirtyObjects` in interface `Session`
    Overrides:
      `restoreDirtyObjects` in class `SessionImpl`
    See Also:
      - `OptimizedSessionPersistedObject`
      - `OptimizedSessionPersistedObjectAnalyzer`
      - `ImmutableSessionPersistedObject`