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​(HttpServletRequest request, HttpSession session, SessionLock lock, SessionPersistedObjectAnalyzer analyzer)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `java.lang.Object` | `getAttribute​(java.lang.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​(java.lang.String name, java.lang.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 Detail

    - #### ClusteredSessionImpl

          public ClusteredSessionImpl​(HttpServletRequest request,
                                      HttpSession session,
                                      SessionLock lock,
                                      SessionPersistedObjectAnalyzer analyzer)

  - ### Method Detail

    - #### getAttribute

          public java.lang.Object getAttribute​(java.lang.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​(java.lang.String name,
                                   java.lang.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`