Package org.opensaml.storage.impl
Class LDAPStorageService
-
- All Implemented Interfaces:
Component,DestructableComponent,IdentifiableComponent,IdentifiedComponent,InitializableComponent,StorageCapabilities,StorageCapabilitiesEx,StorageService
public class LDAPStorageService extends AbstractStorageService implements StorageCapabilitiesEx
Implementation ofStorageServicethat stores data in an LDAP. Does not support expiration or versioning at this time.
-
-
Field Summary
Fields Modifier and Type Field Description private PooledConnectionFactoryconnectionFactoryLDAP connection factory.private LdapAttribute[]defaultAttributesAttributes to include in merge operations.private org.slf4j.LoggerlogClass logger.
-
Constructor Summary
Constructors Constructor Description LDAPStorageService(PooledConnectionFactory factory, LdapAttribute... attrs)Creates a new LDAP storage service.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleancreate(String context, String key, String value, Long expiration)Creates a new record in the store with an expiration.private Response<Void>delete(String dn)Executes aDeleteOperationon the supplied DN.booleandelete(String context, String key)Deletes an existing record from the store.private Response<Void>deleteAttribute(String dn, String attrName)Executes aModifyOperationon the supplied DN, removing the supplied attribute.voiddeleteContext(String context)Forcibly removes all records in a given context along with any associated resources devoted to maintaining the context.booleandeleteWithVersion(long version, String context, String key)Deletes an existing record from the store if it currently has a specified version.protected voiddoDestroy()protected voiddoInitialize()booleanisClustered()Returns true iff the storage implementation manages data independent of a single server node.booleanisServerSide()Returns true iff the storage implementation manages data independent of the client.private Response<Void>merge(LdapEntry entry)Executes aMergeOperationwith the supplied entry.<T> StorageRecord<T>read(String context, String key)Returns an existing record from the store, if one exists.<T> Pair<Long,StorageRecord<T>>read(String context, String key, long version)Returns an existing record from the store, along with its version.voidreap(String context)Manually trigger a cleanup of expired records.private Response<SearchResult>search(String dn, String... attrs)Executes a object levelSearchOperationon the supplied DN, returning the supplied attributes.booleanupdate(String context, String key, String value, Long expiration)Updates an existing record in the store.voidupdateContextExpiration(String context, Long expiration)Updates the expiration time of all records in the context.booleanupdateExpiration(String context, String key, Long expiration)Updates expiration of an existing record in the store.LongupdateWithVersion(long version, String context, String key, String value, Long expiration)Updates an existing record in the store, if a version matches.-
Methods inherited from class org.opensaml.storage.AbstractStorageService
create, create, delete, deleteWithVersion, getCapabilities, getCleanupInterval, getCleanupTask, getCleanupTaskTimer, getContextSize, getKeySize, getValueSize, read, setCleanupInterval, setCleanupTaskTimer, setContextSize, setKeySize, setValueSize, update, update, updateExpiration, updateWithVersion, updateWithVersion
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent
setId
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent
getId
-
Methods inherited from class net.shibboleth.utilities.java.support.component.AbstractInitializableComponent
destroy, initialize, isDestroyed, isInitialized
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface net.shibboleth.utilities.java.support.component.IdentifiedComponent
getId
-
Methods inherited from interface org.opensaml.storage.StorageCapabilities
getContextSize, getKeySize, getValueSize
-
-
-
-
Field Detail
-
log
private final org.slf4j.Logger log
Class logger.
-
connectionFactory
private PooledConnectionFactory connectionFactory
LDAP connection factory.
-
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 fromattrs- 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:
isServerSidein interfaceStorageCapabilitiesEx- 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:
isClusteredin interfaceStorageCapabilitiesEx- Returns:
- true iff the storage implementation manages data independent of a single server node
-
doInitialize
protected void doInitialize() throws ComponentInitializationException- Overrides:
doInitializein classAbstractStorageService- Throws:
ComponentInitializationException
-
doDestroy
protected void doDestroy()
- Overrides:
doDestroyin classAbstractStorageService
-
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:
createin interfaceStorageService- Parameters:
context- a storage context labelkey- a key unique to contextvalue- value to storeexpiration- 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:
readin interfaceStorageService- Type Parameters:
T- type of record- Parameters:
context- a storage context labelkey- 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:
readin interfaceStorageService- Type Parameters:
T- type of record- Parameters:
context- a storage context labelkey- a key unique to contextversion- 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:
updatein interfaceStorageService- Parameters:
context- a storage context labelkey- a key unique to contextvalue- updated valueexpiration- 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
-
updateWithVersion
@Nullable public Long updateWithVersion(@Positive long version, @Nonnull @NotEmpty String context, @Nonnull @NotEmpty String key, @Nonnull @NotEmpty String value, @Nullable @Positive Long expiration) throws IOException, VersionMismatchException
Updates an existing record in the store, if a version matches.- Specified by:
updateWithVersionin interfaceStorageService- Parameters:
version- only update if the current version matches this valuecontext- a storage context labelkey- a key unique to contextvalue- updated valueexpiration- expiration for record, or null- Returns:
- the version of the record after update, null if no record exists
- Throws:
IOException- if errors occur in the update processVersionMismatchException- if the record has already been updated to a newer version
-
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:
updateExpirationin interfaceStorageService- Parameters:
context- a storage context labelkey- a key unique to contextexpiration- 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:
deletein interfaceStorageService- Parameters:
context- a storage context labelkey- a key unique to context- Returns:
- true iff the record existed and was deleted
- Throws:
IOException- if errors occur in the deletion process
-
deleteWithVersion
public boolean deleteWithVersion(@Positive long version, @Nonnull @NotEmpty String context, @Nonnull @NotEmpty String key) throws IOException, VersionMismatchException
Deletes an existing record from the store if it currently has a specified version.- Specified by:
deleteWithVersionin interfaceStorageService- Parameters:
version- record version to deletecontext- a storage context labelkey- a key unique to context- Returns:
- true iff the record existed and was deleted
- Throws:
IOException- if errors occur in the deletion processVersionMismatchException- if the record has already been updated to a newer version
-
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:
reapin interfaceStorageService- 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:
updateContextExpirationin interfaceStorageService- Parameters:
context- a storage context labelexpiration- 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:
deleteContextin interfaceStorageService- Parameters:
context- a storage context label- Throws:
IOException- if errors occur in the cleanup process
-
merge
@Nonnull private Response<Void> merge(@Nonnull LdapEntry entry) throws LdapException
Executes aMergeOperationwith the supplied entry.- Parameters:
entry- to merge- Returns:
- response for the merge operation
- Throws:
LdapException- if the operation fails
-
search
@Nonnull private Response<SearchResult> search(@Nonnull String dn, String... attrs) throws LdapException
Executes a object levelSearchOperationon the supplied DN, returning the supplied attributes.- Parameters:
dn- to search onattrs- to return- Returns:
- response for the search operation
- Throws:
LdapException- if the operation fails
-
deleteAttribute
@Nonnull private Response<Void> deleteAttribute(@Nonnull String dn, @Nonnull String attrName) throws LdapException
Executes aModifyOperationon the supplied DN, removing the supplied attribute.- Parameters:
dn- to modifyattrName- to remove- Returns:
- response for the modify operation
- Throws:
LdapException- if the operation fails
-
delete
@Nonnull private Response<Void> delete(@Nonnull String dn) throws LdapException
Executes aDeleteOperationon the supplied DN.- Parameters:
dn- to delete- Returns:
- response for the delete operation
- Throws:
LdapException- if the operation fails
-
-