org.infinispan.loaders.jdbc.stringbased
public class JdbcStringBasedCacheStore extends org.infinispan.loaders.LockSupportCacheStore<String>
CacheStore
implementation that stores the entries in a database. In contrast to the
JdbcBinaryCacheStore
, this cache store will store each entry within a row
in the table (rather than grouping multiple entries into an row). This assures a finer grained granularity for all
operation, and better performance. In order to be able to store non-string keys, it relies on an Key2StringMapper
.
Note that only the keys are stored as strings, the values are still saved as binary data. Using a character
data type for the value column will result in unmarshalling errors.
The actual storage table is defined through configuration JdbcStringBasedCacheStoreConfig
. The table can be
created/dropped on-the-fly, at deployment time. For more details consult javadoc for JdbcStringBasedCacheStoreConfig
.
It is recommended to use JdbcStringBasedCacheStore
} over
JdbcBinaryCacheStore
} whenever it is possible, as is has a better performance.
One scenario in which this is not possible to use it though, is when you can't write an Key2StringMapper
} to map the
keys to to string objects (e.g. when you don't have control over the types of the keys, for whatever reason).
Preload.In order to support preload functionality the store needs to read the string keys from the database and transform them
into the corresponding key objects. Key2StringMapper
only supports
key to string transformation(one way); in order to be able to use preload one needs to specify an
TwoWayKey2StringMapper
, which extends Key2StringMapper
and
allows bidirectional transformation.
Rehashing. When a node leaves/joins, Infinispan moves around persistent state as part of rehashing process.
For this it needs access to the underlaying key objects, so if distribution is used, the mapper needs to be an
TwoWayKey2StringMapper
otherwise the cache won't start (same constraint as with preloading).Key2StringMapper
,
DefaultTwoWayKey2StringMapper
Constructor and Description |
---|
JdbcStringBasedCacheStore() |
Modifier and Type | Method and Description |
---|---|
protected void |
clearLockSafe() |
void |
doConnectionFactoryInitialization(ConnectionFactory connectionFactory)
Keeps a reference to the connection factory for further use.
|
void |
fromStreamLockSafe(ObjectInput objectInput) |
Class<? extends org.infinispan.loaders.CacheLoaderConfig> |
getConfigurationClass() |
ConnectionFactory |
getConnectionFactory() |
protected String |
getLockFromKey(Object key) |
TableManipulation |
getTableManipulation() |
void |
init(org.infinispan.loaders.CacheLoaderConfig config,
org.infinispan.Cache<?,?> cache,
org.infinispan.marshall.StreamingMarshaller m) |
boolean |
isDistributed() |
boolean |
isUsingPreload() |
protected Set<Object> |
loadAllKeysLockSafe(Set<Object> keysToExclude) |
protected Set<org.infinispan.container.entries.InternalCacheEntry> |
loadAllLockSafe() |
protected Set<org.infinispan.container.entries.InternalCacheEntry> |
loadLockSafe(int maxEntries) |
protected org.infinispan.container.entries.InternalCacheEntry |
loadLockSafe(Object key,
String lockingKey) |
void |
purgeInternal() |
boolean |
removeLockSafe(Object key,
String keyStr) |
void |
start() |
void |
stop() |
void |
storeLockSafe(org.infinispan.container.entries.InternalCacheEntry ed,
String lockingKey) |
boolean |
supportsKey(Class<?> keyType) |
protected void |
toStreamLockSafe(ObjectOutput objectOutput) |
acquireGlobalLock, clear, downgradeLock, fromStream, getTotalLockCount, immediateLockForWriting, load, load, loadAll, loadAllKeys, lockForReading, lockForWriting, releaseGlobalLock, remove, store, toStream, unlock, upgradeLock
applyModifications, commit, getCacheStoreConfig, getConcurrencyLevel, getMarshaller, prepare, purgeExpired, removeAll, rollback, safeClose, safeClose, supportsMultiThreadedPurge
public void init(org.infinispan.loaders.CacheLoaderConfig config, org.infinispan.Cache<?,?> cache, org.infinispan.marshall.StreamingMarshaller m) throws org.infinispan.loaders.CacheLoaderException
init
in interface org.infinispan.loaders.CacheLoader
init
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
public void start() throws org.infinispan.loaders.CacheLoaderException
start
in interface org.infinispan.loaders.CacheLoader
start
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
public void stop() throws org.infinispan.loaders.CacheLoaderException
stop
in interface org.infinispan.loaders.CacheLoader
stop
in class org.infinispan.loaders.AbstractCacheStore
org.infinispan.loaders.CacheLoaderException
protected String getLockFromKey(Object key) throws org.infinispan.loaders.CacheLoaderException
getLockFromKey
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
public void storeLockSafe(org.infinispan.container.entries.InternalCacheEntry ed, String lockingKey) throws org.infinispan.loaders.CacheLoaderException
storeLockSafe
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
public boolean removeLockSafe(Object key, String keyStr) throws org.infinispan.loaders.CacheLoaderException
removeLockSafe
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
public void fromStreamLockSafe(ObjectInput objectInput) throws org.infinispan.loaders.CacheLoaderException
fromStreamLockSafe
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
protected void toStreamLockSafe(ObjectOutput objectOutput) throws org.infinispan.loaders.CacheLoaderException
toStreamLockSafe
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
protected void clearLockSafe() throws org.infinispan.loaders.CacheLoaderException
clearLockSafe
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
protected Set<org.infinispan.container.entries.InternalCacheEntry> loadAllLockSafe() throws org.infinispan.loaders.CacheLoaderException
loadAllLockSafe
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
protected Set<org.infinispan.container.entries.InternalCacheEntry> loadLockSafe(int maxEntries) throws org.infinispan.loaders.CacheLoaderException
loadLockSafe
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
protected Set<Object> loadAllKeysLockSafe(Set<Object> keysToExclude) throws org.infinispan.loaders.CacheLoaderException
loadAllKeysLockSafe
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
public void purgeInternal() throws org.infinispan.loaders.CacheLoaderException
purgeInternal
in class org.infinispan.loaders.AbstractCacheStore
org.infinispan.loaders.CacheLoaderException
protected org.infinispan.container.entries.InternalCacheEntry loadLockSafe(Object key, String lockingKey) throws org.infinispan.loaders.CacheLoaderException
loadLockSafe
in class org.infinispan.loaders.LockSupportCacheStore<String>
org.infinispan.loaders.CacheLoaderException
public Class<? extends org.infinispan.loaders.CacheLoaderConfig> getConfigurationClass()
public boolean supportsKey(Class<?> keyType)
public void doConnectionFactoryInitialization(ConnectionFactory connectionFactory) throws org.infinispan.loaders.CacheLoaderException
TableManipulation
that needs connections. This method should be called when you don't
want the store to manage the connection factory, perhaps because it is using an shared connection factory: see
JdbcMixedCacheStore
for such an example of this.org.infinispan.loaders.CacheLoaderException
public ConnectionFactory getConnectionFactory()
public TableManipulation getTableManipulation()
public boolean isUsingPreload()
public boolean isDistributed()
Copyright © 2014 JBoss, a division of Red Hat. All Rights Reserved.