public class JdbcMixedStore<K,V> extends Object implements AdvancedLoadWriteStore<K,V>, TransactionalCacheWriter<K,V>
JdbcBinaryStore and JdbcStringBasedStore. It
aggregates an instance of JdbcBinaryStore and JdbcStringBasedStore, delegating work to one of them
(sometimes both, see below) based on the passed in key. In order to determine which store to use it will rely on the
configured Key2StringMapper )(see configuration).
The advantage it brings is the possibility of efficiently storing string(able) keyed InternalCacheEntrys, and at the same time being able to store any other keys, a la
JdbcBinaryStore.
There will only be a performance cost for the aggregate operations: loadAll, fromStream, toStream and clear. For
these operations there will be two distinct database call, one for each JdbcStore implementation. Most of application
are only using these operations at lifecycles changes (e.g. fromStream and toStream at cluster join time, loadAll at
startup for warm caches), so performance drawback shouldn't be significant (again, most of the cases).
Resource sharing - both aggregated cache stores have locks and connection pools. The locking is not shared, each
loader keeping its own StripedLock instance. Also the tables (even though
similar as definition) are different in order to avoid key collision. On the other hand, the connection pooling is a
shared resource.JdbcBinaryStore,
JdbcStringBasedStoreAdvancedCacheLoader.CacheLoaderTask<K,V>, AdvancedCacheLoader.TaskContextAdvancedCacheWriter.PurgeListener<K>| Constructor and Description |
|---|
JdbcMixedStore() |
| Modifier and Type | Method and Description |
|---|---|
void |
clear()
Removes all the data from the storage.
|
void |
commit(Transaction transaction)
Commit the provided transaction's changes to the underlying store.
|
boolean |
contains(Object key)
Returns true if the storage contains an entry associated with the given key.
|
boolean |
delete(Object key) |
JdbcBinaryStore |
getBinaryStore() |
JdbcMixedStoreConfiguration |
getConfiguration() |
ConnectionFactory |
getConnectionFactory() |
JdbcStringBasedStore |
getStringStore() |
void |
init(InitializationContext ctx)
Used to initialize a cache loader.
|
MarshalledEntry |
load(Object key)
Fetches an entry from the storage.
|
void |
prepareWithModifications(Transaction transaction,
BatchModification batchModification)
Write modifications to the store in the prepare phase, as this is the only way we know the FINAL values of the entries.
|
void |
process(KeyFilter filter,
AdvancedCacheLoader.CacheLoaderTask task,
Executor executor,
boolean fetchValue,
boolean fetchMetadata)
Iterates in parallel over the entries in the storage using the threads from the executor pool.
|
void |
purge(Executor threadPool,
AdvancedCacheWriter.PurgeListener task)
Using the thread in the pool, removed all the expired data from the persistence storage.
|
void |
rollback(Transaction transaction)
Rollback the provided transaction's changes to the underlying store.
|
int |
size()
Returns the number of elements in the store.
|
void |
start()
Invoked on component start
|
void |
stop()
Invoked on component stop
|
void |
write(MarshalledEntry ed)
Persists the entry to the storage.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitdeleteBatch, writeBatchpublic void init(InitializationContext ctx)
CacheLoaderPersistenceManager
when setting up cache loaders.init in interface CacheLoader<K,V>init in interface CacheWriter<K,V>public void start()
Lifecyclepublic void stop()
Lifecyclepublic void purge(Executor threadPool, AdvancedCacheWriter.PurgeListener task)
AdvancedCacheWriterpurge in interface AdvancedCacheWriter<K,V>public MarshalledEntry load(Object key)
CacheLoaderMarshalledEntry needs to be created here, InitializationContext.getMarshalledEntryFactory() and InitializationContext.getByteBufferFactory() should be used.load in interface CacheLoader<K,V>public void process(KeyFilter filter, AdvancedCacheLoader.CacheLoaderTask task, Executor executor, boolean fetchValue, boolean fetchMetadata)
AdvancedCacheLoaderCacheLoaderTask#processEntry(MarshalledEntry, TaskContext) is
invoked. Before passing an entry to the callback task, the entry should be validated against the filter.
Implementors should build an AdvancedCacheLoader.TaskContext instance (implementation) that is fed to the AdvancedCacheLoader.CacheLoaderTask on every invocation. The AdvancedCacheLoader.CacheLoaderTask might invoke AdvancedCacheLoader.TaskContext.stop() at any time, so implementors of this method
should verify TaskContext's state for early termination of iteration. The method should only return once the
iteration is complete or as soon as possible in the case TaskContext.stop() is invoked.process in interface AdvancedCacheLoader<K,V>filter - to validate which entries should be feed into the task. Might be null.task - callback to be invoked in parallel for each stored entry that passes the filter checkexecutor - an external thread pool to be used for parallel iterationfetchValue - whether or not to fetch the value from the persistent store. E.g. if the iteration is
intended only over the key set, no point fetching the values from the persistent store as
wellfetchMetadata - whether or not to fetch the metadata from the persistent store. E.g. if the iteration is
intended only ove the key set, then no pint fetching the metadata from the persistent store
as wellpublic void write(MarshalledEntry ed)
CacheWriterwrite in interface CacheWriter<K,V>MarshalledEntrypublic boolean delete(Object key)
delete in interface CacheWriter<K,V>public int size()
AdvancedCacheLoadersize in interface AdvancedCacheLoader<K,V>public boolean contains(Object key)
CacheLoadercontains in interface CacheLoader<K,V>public void clear()
AdvancedCacheWriterclear in interface AdvancedCacheWriter<K,V>public void prepareWithModifications(Transaction transaction, BatchModification batchModification) throws PersistenceException
TransactionalCacheWriterprepareWithModifications in interface TransactionalCacheWriter<K,V>transaction - the current transactional context.batchModification - an object containing the write/remove operations required for this transaction.PersistenceException - if an error occurs when communicating/performing writes on the underlying store.public void commit(Transaction transaction)
TransactionalCacheWritercommit in interface TransactionalCacheWriter<K,V>transaction - the current transactional context.public void rollback(Transaction transaction)
TransactionalCacheWriterrollback in interface TransactionalCacheWriter<K,V>transaction - the current transactional context.public ConnectionFactory getConnectionFactory()
public JdbcBinaryStore getBinaryStore()
public JdbcStringBasedStore getStringStore()
public JdbcMixedStoreConfiguration getConfiguration()
Copyright © 2018 JBoss, a division of Red Hat. All rights reserved.