Class LDAPStorageService

    • Field Detail

      • log

        private final org.slf4j.Logger log
        Class logger.
      • defaultAttributes

        private LdapAttribute[] defaultAttributes
        Attributes to include in merge operations.
    • Constructor Detail

      • LDAPStorageService

        public LDAPStorageService​(@Nonnull
                                  PooledConnectionFactory factory,
                                  LdapAttribute... attrs)
        Creates a new LDAP storage service.
        Parameters:
        factory - to retrieve LDAP connections from
        attrs - to include in all LDAP entries
    • Method Detail

      • isServerSide

        public boolean isServerSide()
        Returns true iff the storage implementation manages data independent of the client.
        Specified by:
        isServerSide in interface StorageCapabilitiesEx
        Returns:
        true iff the storage implementation manages data independent of the client
      • isClustered

        public boolean isClustered()
        Returns true iff the storage implementation manages data independent of a single server node.
        Specified by:
        isClustered in interface StorageCapabilitiesEx
        Returns:
        true iff the storage implementation manages data independent of a single server node
      • create

        public boolean create​(@Nonnull @NotEmpty
                              String context,
                              @Nonnull @NotEmpty
                              String key,
                              @Nonnull @NotEmpty
                              String value,
                              @Nullable @Positive
                              Long expiration)
                       throws IOException
        Creates a new record in the store with an expiration.
        Specified by:
        create in interface StorageService
        Parameters:
        context - a storage context label
        key - a key unique to context
        value - value to store
        expiration - expiration for record, or null
        Returns:
        true iff record was inserted, false iff a duplicate was found
        Throws:
        IOException - if fatal errors occur in the insertion process
      • read

        @Nullable
        public <T> StorageRecord<T> read​(@Nonnull @NotEmpty
                                         String context,
                                         @Nonnull @NotEmpty
                                         String key)
                                  throws IOException
        Returns an existing record from the store, if one exists.
        Specified by:
        read in interface StorageService
        Type Parameters:
        T - type of record
        Parameters:
        context - a storage context label
        key - a key unique to context
        Returns:
        the record read back, if present, or null
        Throws:
        IOException - if errors occur in the read process
      • read

        @Nonnull
        public <T> Pair<Long,​StorageRecord<T>> read​(@Nonnull @NotEmpty
                                                          String context,
                                                          @Nonnull @NotEmpty
                                                          String key,
                                                          @Positive
                                                          long version)
                                                   throws IOException
        Returns an existing record from the store, along with its version.

        The first member of the pair returned will contain the version of the record in the store, or will be null if no record exists. The second member will contain the record read back. If null, the record either didn't exist (if the first member was also null) or the record was the same version as that supplied by the caller.

        Specified by:
        read in interface StorageService
        Type Parameters:
        T - type of record
        Parameters:
        context - a storage context label
        key - a key unique to context
        version - only return record if newer than supplied version
        Returns:
        a pair consisting of the version of the record read back, if any, and the record itself
        Throws:
        IOException - if errors occur in the read process
      • update

        public boolean update​(@Nonnull @NotEmpty
                              String context,
                              @Nonnull @NotEmpty
                              String key,
                              @Nonnull @NotEmpty
                              String value,
                              @Nullable @Positive
                              Long expiration)
                       throws IOException
        Updates an existing record in the store.
        Specified by:
        update in interface StorageService
        Parameters:
        context - a storage context label
        key - a key unique to context
        value - updated value
        expiration - expiration for record, or null
        Returns:
        true if the update succeeded, false if the record does not exist
        Throws:
        IOException - if errors occur in the update process
      • updateExpiration

        public boolean updateExpiration​(@Nonnull @NotEmpty
                                        String context,
                                        @Nonnull @NotEmpty
                                        String key,
                                        @Nullable @Positive
                                        Long expiration)
                                 throws IOException
        Updates expiration of an existing record in the store.
        Specified by:
        updateExpiration in interface StorageService
        Parameters:
        context - a storage context label
        key - a key unique to context
        expiration - expiration for record, or null
        Returns:
        true if the update succeeded, false if the record does not exist
        Throws:
        IOException - if errors occur in the update process
      • delete

        public boolean delete​(@Nonnull @NotEmpty
                              String context,
                              @Nonnull @NotEmpty
                              String key)
                       throws IOException
        Deletes an existing record from the store.
        Specified by:
        delete in interface StorageService
        Parameters:
        context - a storage context label
        key - a key unique to context
        Returns:
        true iff the record existed and was deleted
        Throws:
        IOException - if errors occur in the deletion process
      • reap

        public void reap​(@Nonnull @NotEmpty
                         String context)
                  throws IOException
        Manually trigger a cleanup of expired records. The method MAY return without guaranteeing that cleanup has already occurred.
        Specified by:
        reap in interface StorageService
        Parameters:
        context - a storage context label
        Throws:
        IOException - if errors occur in the cleanup process
      • updateContextExpiration

        public void updateContextExpiration​(@Nonnull @NotEmpty
                                            String context,
                                            @Nullable @Positive
                                            Long expiration)
                                     throws IOException
        Updates the expiration time of all records in the context.
        Specified by:
        updateContextExpiration in interface StorageService
        Parameters:
        context - a storage context label
        expiration - a new expiration timestamp, or null
        Throws:
        IOException - if errors occur in the cleanup process
      • deleteContext

        public void deleteContext​(@Nonnull @NotEmpty
                                  String context)
                           throws IOException
        Forcibly removes all records in a given context along with any associated resources devoted to maintaining the context.
        Specified by:
        deleteContext in interface StorageService
        Parameters:
        context - a storage context label
        Throws:
        IOException - if errors occur in the cleanup process
      • deleteAttribute

        @Nonnull
        private Response<Void> deleteAttribute​(@Nonnull
                                               String dn,
                                               @Nonnull
                                               String attrName)
                                        throws LdapException
        Executes a ModifyOperation on the supplied DN, removing the supplied attribute.
        Parameters:
        dn - to modify
        attrName - to remove
        Returns:
        response for the modify operation
        Throws:
        LdapException - if the operation fails