# Interface Store

All Known Implementing Classes:
  `DataSourceStore`, `FileStore`, `StoreBase`

public interface Store
A Store is the abstraction of a Catalina component that provides persistent storage and loading of Sessions and their associated user data. Implementations are free to save and load the Sessions to any media they wish, but it is assumed that saved Sessions are persistent across server or context restarts.

Author:
  Craig R. McClanahan

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addPropertyChangeListener(PropertyChangeListener listener)`
  Add a property change listener to this component.
  `void`
  `clear()`
  Remove all Sessions from this Store.
  `Manager`
  `getManager()`
  `int`
  `getSize()`
  `String[]`
  `keys()`
  `Session`
  `load(String id)`
  Load and return the Session associated with the specified session identifier from this Store, without removing it.
  `void`
  `remove(String id)`
  Remove the Session with the specified session identifier from this Store, if present.
  `void`
  `removePropertyChangeListener(PropertyChangeListener listener)`
  Remove a property change listener from this component.
  `void`
  `save(Session session)`
  Save the specified Session into this Store.
  `void`
  `setManager(Manager manager)`
  Set the Manager associated with this Store.

- ## Method Details

  - ### getManager

    Manager getManager()
    Returns:
      the Manager instance associated with this Store.

  - ### setManager

    void setManager(Manager manager)
    Set the Manager associated with this Store.
    Parameters:
      `manager` - The Manager which will use this Store.

  - ### getSize

    int getSize() throws IOException
    Returns:
      the number of Sessions present in this Store.
    Throws:
      `IOException` - if an input/output error occurs

  - ### addPropertyChangeListener

    void addPropertyChangeListener(PropertyChangeListener listener)
    Add a property change listener to this component.
    Parameters:
      `listener` - The listener to add

  - ### keys

    String[] keys() throws IOException
    Returns:
      an array containing the session identifiers of all Sessions currently saved in this Store. If there are no such Sessions, a zero-length array is returned.
    Throws:
      `IOException` - if an input/output error occurred

  - ### load

    Session load(String id) throws ClassNotFoundException, IOException
    Load and return the Session associated with the specified session identifier from this Store, without removing it. If there is no such stored Session, return `null`.

    Implementations should expect, and correctly handle, concurrent calls to any method but in particular calls to `#load(String)`, `#save(Session)` and `#remove(String)` for the same session.

    Parameters:
      `id` - Session identifier of the session to load
    Returns:
      the loaded Session instance
    Throws:
      `ClassNotFoundException` - if a deserialization error occurs
      `IOException` - if an input/output error occurs

  - ### remove

    void remove(String id) throws IOException
    Remove the Session with the specified session identifier from this Store, if present. If no such Session is present, this method takes no action.

    Implementations should expect, and correctly handle, concurrent calls to any method but in particular calls to `#load(String)`, `#save(Session)` and `#remove(String)` for the same session.

    Parameters:
      `id` - Session identifier of the Session to be removed
    Throws:
      `IOException` - if an input/output error occurs

  - ### clear

    void clear() throws IOException
    Remove all Sessions from this Store.
    Throws:
      `IOException` - if an input/output error occurs

  - ### removePropertyChangeListener

    void removePropertyChangeListener(PropertyChangeListener listener)
    Remove a property change listener from this component.
    Parameters:
      `listener` - The listener to remove

  - ### save

    void save(Session session) throws IOException
    Save the specified Session into this Store. Any previously saved information for the associated session identifier is replaced.

    Implementations should expect, and correctly handle, concurrent calls to any method but in particular calls to `#load(String)`, `#save(Session)` and `#remove(String)` for the same session.

    Parameters:
      `session` - Session to be saved
    Throws:
      `IOException` - if an input/output error occurs