public class JdbcBinaryStore<K,V> extends AbstractJdbcStore<K,V>
AdvancedLoadWriteStore
implementation that will store all the buckets as rows
in database, each row corresponding to a bucket. This is in contrast to JdbcStringBasedStore
which stores each StoredEntry as a row in the database. It is generally recommended to use JdbcStringBasedStore
whenever possible as it performs better. Please
read JdbcStringBasedStore
's javadoc for more details on this.
This class has the benefit of being able to store StoredEntries that do not have String keys, at the cost of coarser
grained access granularity, and inherently performance.
All the DB related configurations are described in .JdbcBinaryStoreConfiguration
.JdbcBinaryStoreConfiguration
,
JdbcStringBasedStore
AdvancedCacheLoader.CacheLoaderTask<K,V>, AdvancedCacheLoader.TaskContext
AdvancedCacheWriter.PurgeListener<K>
cacheName, connectionFactory, ctx, tableManager
Constructor and Description |
---|
JdbcBinaryStore() |
Modifier and Type | Method and Description |
---|---|
boolean |
contains(Object key)
Returns true if the storage contains an entry associated with the given key.
|
boolean |
delete(Object key) |
Integer |
getBuckedId(Object key) |
JdbcBinaryStoreConfiguration |
getConfiguration() |
TableManager |
getTableManager() |
protected boolean |
immediateLockForWriting(Integer key) |
void |
init(InitializationContext ctx)
Used to initialize a cache loader.
|
protected void |
insertBucket(Bucket bucket) |
MarshalledEntry |
load(Object key)
Fetches an entry from the storage.
|
protected Bucket |
loadBucket(Integer bucketId) |
protected void |
lockBucketForReading(Integer bucket)
Acquires read lock on the given key.
|
protected void |
lockBucketForWriting(Integer key)
Acquires write lock on the given key.
|
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.
|
protected boolean |
removeKeyFromBucket(Object key,
Integer bucketId) |
int |
size()
Returns the number of elements in the store.
|
void |
start()
Invoked on component start
|
protected void |
storeInBucket(MarshalledEntry me,
Integer bucketId) |
protected void |
unlock(Integer key)
Release the locks (either read or write).
|
protected void |
updateBucket(Bucket bucket) |
void |
write(MarshalledEntry entry)
Persists the entry to the storage.
|
clear, commit, destroyTxConnection, getConnectionFactory, getTxConnection, initializeConnectionFactory, marshall, rollback, stop, unmarshall, waitForFutureToComplete
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
deleteBatch, writeBatch
public void init(InitializationContext ctx)
CacheLoader
PersistenceManager
when setting up cache loaders.init
in interface CacheLoader<K,V>
init
in interface CacheWriter<K,V>
init
in class AbstractJdbcStore<K,V>
public void start()
Lifecycle
public final void write(MarshalledEntry entry)
CacheWriter
MarshalledEntry
public final MarshalledEntry load(Object key)
CacheLoader
MarshalledEntry
needs to be created here, InitializationContext.getMarshalledEntryFactory()
and InitializationContext.getByteBufferFactory()
should be used.public boolean contains(Object key)
CacheLoader
public final boolean delete(Object key)
public void process(KeyFilter filter, AdvancedCacheLoader.CacheLoaderTask task, Executor executor, boolean fetchValue, boolean fetchMetadata)
AdvancedCacheLoader
CacheLoaderTask#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.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 int size()
AdvancedCacheLoader
public void purge(Executor threadPool, AdvancedCacheWriter.PurgeListener task)
AdvancedCacheWriter
public void prepareWithModifications(Transaction transaction, BatchModification batchModification) throws PersistenceException
TransactionalCacheWriter
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.protected void insertBucket(Bucket bucket)
protected void updateBucket(Bucket bucket)
public TableManager getTableManager()
getTableManager
in class AbstractJdbcStore<K,V>
protected void storeInBucket(MarshalledEntry me, Integer bucketId)
protected final void unlock(Integer key)
protected final void lockBucketForWriting(Integer key)
protected final void lockBucketForReading(Integer bucket)
protected final boolean immediateLockForWriting(Integer key)
public JdbcBinaryStoreConfiguration getConfiguration()
Copyright © 2018 JBoss, a division of Red Hat. All rights reserved.