public class ConcurrentMapStateRepository<V> extends java.lang.Object implements StateRepository<V>
| Constructor and Description |
|---|
ConcurrentMapStateRepository(java.lang.String name)
Creates a StateRepository with the given name, that is using a
ConcurrentHashMap to store
event-sourced entities. |
ConcurrentMapStateRepository(java.lang.String name,
java.util.concurrent.ConcurrentMap<java.lang.String,V> map)
Creates a StateRepository with the given name, that is using the given
ConcurrentMap to store
event-sourced entities. |
| Modifier and Type | Method and Description |
|---|---|
void |
clear()
Removes all of the mappings from this repository (optional operation).
|
void |
close()
Closes the
StateRepository. |
java.util.Optional<V> |
compute(java.lang.String key,
java.util.function.BiFunction<? super java.lang.String,? super java.util.Optional<V>,? extends V> remappingFunction)
Attempts to compute a mapping for the specified key and its current
mapped value (or
null if there is no current mapping). |
void |
consumeAll(java.util.function.BiConsumer<? super java.lang.String,? super V> consumer)
Computes each entry within the repository.
|
java.util.Optional<V> |
get(java.lang.String key)
Returns the optional value to which the specified key is mapped,
or
Optional.empty() if this repository contains no mapping for the key. |
java.lang.String |
getName()
The unique name of the
StateRepository. |
java.util.Set<java.lang.String> |
keySet()
Returns an immutable set of the keys in this repository.
|
java.util.Optional<V> |
put(java.lang.String key,
V value)
Associates the specified value with the specified key in this repository.
|
java.util.Optional<V> |
remove(java.lang.String key)
Removes the mapping for a key from this repository if it is present.
|
long |
size()
Returns the number of key-value mappings in this repository.
|
public ConcurrentMapStateRepository(java.lang.String name)
ConcurrentHashMap to store
event-sourced entities.name - the name of the repository.public ConcurrentMapStateRepository(java.lang.String name,
java.util.concurrent.ConcurrentMap<java.lang.String,V> map)
ConcurrentMap to store
event-sourced entities.
Usable to create StateRepository instances from ConcurrentMap implementations like, for example, ChronicleMap
name - the name of the repository.map - the delegate map used to store the entity statepublic java.lang.String getName()
StateRepositoryStateRepository.
Using the same name for multiple repositories will lead to
getName in interface StateRepository<V>public java.util.Optional<V> compute(java.lang.String key, java.util.function.BiFunction<? super java.lang.String,? super java.util.Optional<V>,? extends V> remappingFunction)
StateRepositorynull if there is no current mapping). For
example, to either create or append a String msg to a value
mapping:
repository.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))
If the function returns null, the mapping is removed (or
remains absent if initially absent). If the function itself throws an
(unchecked) exception, the exception is rethrown, and the current mapping
is left unchanged.
The default implementation is equivalent to performing the following
steps for this repository, then returning the current value or
null if absent:
OptionalV> oldValue = repository.get(key);
V newValue = remappingFunction.apply(key, oldValue);
if (!oldValue.isEmpty()) {
if (newValue != null)
repository.put(key, newValue);
else
repository.remove(key);
} else {
if (newValue != null)
repository.put(key, newValue);
else
return Optional.empty();
}
compute in interface StateRepository<V>key - key with which the specified value is to be associatedremappingFunction - the function to compute a valuepublic void consumeAll(java.util.function.BiConsumer<? super java.lang.String,? super V> consumer)
StateRepositoryconsumeAll in interface StateRepository<V>consumer - the consumer that will be applied on each repository entrypublic java.util.Optional<V> put(java.lang.String key, V value)
StateRepositorym.get(k) would return
a non-empty value.)put in interface StateRepository<V>key - key with which the specified value is to be associatedvalue - value to be associated with the specified keypublic java.util.Optional<V> remove(java.lang.String key)
StateRepository(key==null ? k==null : key.equals(k)), that mapping
is removed. (The repository can contain at most one such mapping.)
Returns the optional value to which this repository previously associated the key, or Optional.empty() if the repository contained no mapping for the key.
The repository will not contain a mapping for the specified key once the call returns.
remove in interface StateRepository<V>key - key whose mapping is to be removed from the repositorypublic void clear()
StateRepositoryclear in interface StateRepository<V>public java.util.Optional<V> get(java.lang.String key)
StateRepositoryOptional.empty() if this repository contains no mapping for the key.
More formally, if this repository contains a mapping from a key
k to a value v such that (key==null ? k==null :
key.equals(k)), then this method returns Optional.of(v); otherwise
it returns Optional.empty(). (There can be at most one such mapping.)
get in interface StateRepository<V>key - the key whose associated value is to be returnedOptional.empty() if this repository contains no mapping for the keypublic java.util.Set<java.lang.String> keySet()
StateRepositorykeySet in interface StateRepository<V>public long size()
StateRepositorysize in interface StateRepository<V>public void close()
throws java.lang.Exception
StateRepositoryStateRepository.
Depending on the implementation of the interface, it might be required to close() the repository on shutdown in order to prevent data loss.
close in interface StateRepository<V>close in interface java.lang.AutoCloseablejava.lang.Exception - if closing the repository fails for some reason.