Class GCloudSessionDataStore

    • Field Detail

      • DEFAULT_MAX_QUERY_RESULTS

        public static final int DEFAULT_MAX_QUERY_RESULTS
        See Also:
        Constant Field Values
      • _datastore

        protected com.google.cloud.datastore.Datastore _datastore
      • _keyFactory

        protected com.google.cloud.datastore.KeyFactory _keyFactory
      • _maxResults

        protected int _maxResults
      • _maxRetries

        protected int _maxRetries
      • _backoff

        protected int _backoff
      • _dsProvided

        protected boolean _dsProvided
      • _indexesPresent

        protected boolean _indexesPresent
      • _modelProvided

        protected boolean _modelProvided
    • Constructor Detail

      • GCloudSessionDataStore

        public GCloudSessionDataStore()
    • Method Detail

      • setBackoffMs

        public void setBackoffMs​(int ms)
      • setNamespace

        public void setNamespace​(java.lang.String namespace)
      • getBackoffMs

        @ManagedAttribute("unit in ms of exponential backoff")
        public int getBackoffMs()
      • setMaxRetries

        public void setMaxRetries​(int retries)
      • getMaxRetries

        @ManagedAttribute("max number of retries for failed writes")
        public int getMaxRetries()
      • doStart

        protected void doStart()
                        throws java.lang.Exception
        Description copied from class: ContainerLifeCycle
        Starts the managed lifecycle beans in the order they were added.
        Overrides:
        doStart in class AbstractSessionDataStore
        Throws:
        java.lang.Exception
      • doStop

        protected void doStop()
                       throws java.lang.Exception
        Description copied from class: ContainerLifeCycle
        Stops the managed lifecycle beans in the reverse order they were added.
        Overrides:
        doStop in class ContainerLifeCycle
        Throws:
        java.lang.Exception
      • setDatastore

        public void setDatastore​(com.google.cloud.datastore.Datastore datastore)
      • getMaxResults

        @ManagedAttribute("max number of results to return from gcloud searches")
        public int getMaxResults()
      • setMaxResults

        public void setMaxResults​(int maxResults)
      • doLoad

        public SessionData doLoad​(java.lang.String id)
                           throws java.lang.Exception
        Description copied from class: AbstractSessionDataStore
        Load the session from persistent store.
        Specified by:
        doLoad in class AbstractSessionDataStore
        Parameters:
        id - the id of the session to load
        Returns:
        the re-inflated session
        Throws:
        java.lang.Exception - if unable to load the session
      • delete

        public boolean delete​(java.lang.String id)
                       throws java.lang.Exception
        Description copied from interface: SessionDataMap
        Delete session data
        Parameters:
        id - identity of session to delete
        Returns:
        true if the session was deleted
        Throws:
        java.lang.Exception - if unable to delete session data
      • doGetExpired

        public java.util.Set<java.lang.String> doGetExpired​(java.util.Set<java.lang.String> candidates)
        Description copied from class: AbstractSessionDataStore
        Implemented by subclasses to resolve which sessions this node should attempt to expire.
        Specified by:
        doGetExpired in class AbstractSessionDataStore
        Parameters:
        candidates - the ids of sessions the SessionDataStore thinks has expired
        Returns:
        the reconciled set of session ids that this node should attempt to expire
      • queryExpiryByEntity

        protected java.util.Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByEntity()
                                                                                throws java.lang.Exception
        A less efficient query to find sessions whose expiry time has passed: retrieves the whole Entity.
        Returns:
        set of ExpiryInfo representing the id, lastNode and expiry time of sessions that are expired
        Throws:
        java.lang.Exception - if datastore experiences a problem
      • queryExpiryByIndex

        protected java.util.Set<GCloudSessionDataStore.ExpiryInfo> queryExpiryByIndex()
                                                                               throws java.lang.Exception
        An efficient query to find sessions whose expiry time has passed: uses a projection query, which requires indexes to be uploaded.
        Returns:
        id, lastnode and expiry time of sessions that have expired
        Throws:
        java.lang.Exception - if datastore experiences a problem
      • exists

        public boolean exists​(java.lang.String id)
                       throws java.lang.Exception
        Description copied from interface: SessionDataStore
        Test if data exists for a given session id.
        Parameters:
        id - Identity of session whose existence should be checked
        Returns:
        true if valid, non-expired session exists
        Throws:
        java.lang.Exception - if problem checking existence with persistence layer
      • isExpired

        protected boolean isExpired​(long timestamp)
        Check to see if the given time is in the past.
        Parameters:
        timestamp - the time to check
        Returns:
        false if the timestamp is 0 or less, true if it is in the past
      • doStore

        public void doStore​(java.lang.String id,
                            SessionData data,
                            long lastSaveTime)
                     throws java.lang.Exception
        Description copied from class: AbstractSessionDataStore
        Store the session data persistently.
        Specified by:
        doStore in class AbstractSessionDataStore
        Parameters:
        id - identity of session to store
        data - info of the session
        lastSaveTime - time of previous save or 0 if never saved
        Throws:
        java.lang.Exception - if unable to store data
      • makeKey

        protected com.google.cloud.datastore.Key makeKey​(java.lang.String id,
                                                         SessionContext context)
        Make a unique key for this session. As the same session id can be used across multiple contexts, to make it unique, the key must be composed of:
        1. the id
        2. the context path
        3. the virtual hosts
        Parameters:
        id - the id
        context - the session context
        Returns:
        the key
      • checkIndexes

        protected boolean checkIndexes()
        Check to see if indexes are available, in which case we can do more performant queries.
        Returns:
        true if indexes are available
      • entityFromSession

        protected com.google.cloud.datastore.Entity entityFromSession​(SessionData session,
                                                                      com.google.cloud.datastore.Key key)
                                                               throws java.lang.Exception
        Generate a gcloud datastore Entity from SessionData
        Parameters:
        session - the session data
        key - the key
        Returns:
        the entity
        Throws:
        java.lang.Exception - if there is a deserialization error
      • sessionFromEntity

        protected SessionData sessionFromEntity​(com.google.cloud.datastore.Entity entity)
                                         throws java.lang.Exception
        Generate SessionData from an Entity retrieved from gcloud datastore.
        Parameters:
        entity - the entity
        Returns:
        the session data
        Throws:
        java.lang.Exception - if unable to get the entity
      • isPassivating

        @ManagedAttribute(value="does gcloud serialize session data",
                          readonly=true)
        public boolean isPassivating()
        Description copied from interface: SessionDataStore
        True if this type of datastore will passivate session objects
        Returns:
        true if this store can passivate sessions, false otherwise