Class CacheAbstractJdbcStore<K,V>
- java.lang.Object
-
- org.apache.ignite.cache.store.jdbc.CacheAbstractJdbcStore<K,V>
-
- All Implemented Interfaces:
javax.cache.integration.CacheLoader<K,V>
,javax.cache.integration.CacheWriter<K,V>
,CacheStore<K,V>
,LifecycleAware
- Direct Known Subclasses:
CacheJdbcPojoStore
public abstract class CacheAbstractJdbcStore<K,V> extends Object implements CacheStore<K,V>, LifecycleAware
Implementation ofCacheStore
backed by JDBC.Store works with database via SQL dialect. Ignite ships with dialects for most popular databases:
DB2Dialect
- dialect for IBM DB2 database.OracleDialect
- dialect for Oracle database.SQLServerDialect
- dialect for Microsoft SQL Server database.MySQLDialect
- dialect for Oracle MySQL database.H2Dialect
- dialect for H2 database.BasicJdbcDialect
- dialect for any database via plain JDBC.
Configuration
- Data source (see
setDataSource(DataSource)
- Dialect (see
setDialect(JdbcDialect)
- Maximum batch size for writeAll and deleteAll operations. (see
setBatchSize(int)
) - Max workers thread count. These threads are responsible for load cache. (see
setMaximumPoolSize(int)
) - Parallel load cache minimum threshold. (see
setParallelLoadCacheMinimumThreshold(int)
)
Java Example
... // Create store factory. CacheJdbcPojoStoreFactory storeFactory = new CacheJdbcPojoStoreFactory(); storeFactory.setDataSourceBean("your_data_source_name"); storeFactory.setDialect(new H2Dialect()); storeFactory.setTypes(array_with_your_types); ... ccfg.setCacheStoreFactory(storeFactory); ccfg.setReadThrough(true); ccfg.setWriteThrough(true); cfg.setCacheConfiguration(ccfg); ...
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
CacheAbstractJdbcStore.EntryMapping
Entry mapping description.protected static class
CacheAbstractJdbcStore.TypeKind
Type kind.
-
Field Summary
Fields Modifier and Type Field Description protected static String
ATTR_CONN_PROP
Connection attribute property name.protected static Collection<String>
BUILT_IN_TYPES
Built in Java types names.protected Map<String,Map<Object,CacheAbstractJdbcStore.EntryMapping>>
cacheMappings
Cache with entry mapping description.protected DataSource
dataSrc
Data source.protected JdbcDialect
dialect
Database dialect.protected JdbcTypeHasher
hasher
Hash calculator.protected Ignite
ignite
Auto injected ignite instance.protected IgniteLogger
log
Auto-injected logger instance.protected JdbcTypesTransformer
transformer
Types transformer.
-
Constructor Summary
Constructors Constructor Description CacheAbstractJdbcStore()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract <R> R
buildObject(@Nullable String cacheName, String typeName, CacheAbstractJdbcStore.TypeKind typeKind, JdbcTypeField[] flds, Map<String,Integer> loadColIdxs, ResultSet rs)
Construct object from query result.protected void
closeConnection(@Nullable Connection conn)
Closes connection.protected Integer
columnIndex(Map<String,Integer> loadColIdxs, String dbName)
Find column index by database name.protected Connection
connection()
void
delete(Object key)
void
deleteAll(Collection<?> keys)
protected void
end(@Nullable Connection conn, @Nullable Statement st)
Closes allocated resources depending on transaction status.protected abstract @Nullable Object
extractParameter(@Nullable String cacheName, String typeName, CacheAbstractJdbcStore.TypeKind typeKind, String fieldName, Object obj)
Get field value from object for use as query parameter.protected int
fillKeyParameters(PreparedStatement stmt, int idx, CacheAbstractJdbcStore.EntryMapping em, Object key)
protected int
fillKeyParameters(PreparedStatement stmt, CacheAbstractJdbcStore.EntryMapping m, Object key)
protected void
fillParameter(PreparedStatement stmt, int idx, JdbcTypeField field, @Nullable Object fieldVal)
Sets the value of the designated parameter using the given object.protected int
fillValueParameters(PreparedStatement stmt, int idx, CacheAbstractJdbcStore.EntryMapping em, Object val)
int
getBatchSize()
Get maximum batch size for delete and delete operations.DataSource
getDataSource()
JdbcDialect
getDialect()
Get database dialect.JdbcTypeHasher
getHasher()
Gets hash code calculator.int
getMaximumPoolSize()
Get Max workers thread count.int
getMaximumWriteAttempts()
Gets maximum number of write attempts in case of database error.int
getParallelLoadCacheMinimumThreshold()
Parallel load cache minimum row count threshold.JdbcTypesTransformer
getTransformer()
Gets types transformer.JdbcType[]
getTypes()
Gets types known by store.protected Ignite
ignite()
boolean
isSqlEscapeAll()
Iftrue
all the SQL table and field names will be escaped with double quotes like ("tableName"."fieldsName"
).protected CacheAbstractJdbcStore.TypeKind
kindForName(String type)
protected CacheAbstractJdbcStore.TypeKind
kindForName(String type, boolean binarySupported)
V
load(K key)
Map<K,V>
loadAll(Iterable<? extends K> keys)
void
loadCache(IgniteBiInClosure<K,V> clo, @Nullable Object... args)
Loads all values from underlying persistent storage.protected Connection
openConnection(boolean autocommit)
Gets connection from a pool.protected abstract void
prepareBuilders(@Nullable String cacheName, Collection<JdbcType> types)
Prepare internal store specific builders for provided types metadata.protected JdbcDialect
resolveDialect()
Perform dialect resolution.protected CacheStoreSession
session()
void
sessionEnd(boolean commit)
Tells store to commit or rollback a transaction depending on the value of the'commit'
parameter.void
setBatchSize(int batchSize)
Set maximum batch size for write and delete operations.void
setDataSource(DataSource dataSrc)
void
setDialect(JdbcDialect dialect)
Set database dialect.void
setHasher(JdbcTypeHasher hasher)
Sets hash code calculator.void
setMaximumPoolSize(int maxPoolSize)
Set Max workers thread count.void
setMaximumWriteAttempts(int maxWrtAttempts)
Sets maximum number of write attempts in case of database error.void
setParallelLoadCacheMinimumThreshold(int parallelLoadCacheMinThreshold)
Parallel load cache minimum row count threshold.void
setSqlEscapeAll(boolean sqlEscapeAll)
Iftrue
all the SQL table and field names will be escaped with double quotes like ("tableName"."fieldsName"
).void
setTransformer(JdbcTypesTransformer transformer)
Sets types transformer.void
setTypes(JdbcType... types)
Sets store configurations.void
start()
Starts grid component, called on grid start.void
stop()
Stops grid component, called on grid shutdown.protected abstract Object
typeIdForObject(Object obj)
Calculate type ID for object.protected abstract Object
typeIdForTypeName(CacheAbstractJdbcStore.TypeKind kind, String typeName)
Calculate type ID for given type name.void
write(javax.cache.Cache.Entry<? extends K,? extends V> entry)
void
writeAll(Collection<javax.cache.Cache.Entry<? extends K,? extends V>> entries)
-
-
-
Field Detail
-
ATTR_CONN_PROP
protected static final String ATTR_CONN_PROP
Connection attribute property name.- See Also:
- Constant Field Values
-
BUILT_IN_TYPES
protected static final Collection<String> BUILT_IN_TYPES
Built in Java types names.
-
ignite
@IgniteInstanceResource protected Ignite ignite
Auto injected ignite instance.
-
log
@LoggerResource protected IgniteLogger log
Auto-injected logger instance.
-
dataSrc
protected volatile DataSource dataSrc
Data source.
-
cacheMappings
protected volatile Map<String,Map<Object,CacheAbstractJdbcStore.EntryMapping>> cacheMappings
Cache with entry mapping description. (cache name, (key id, mapping description)).
-
dialect
protected JdbcDialect dialect
Database dialect.
-
hasher
protected JdbcTypeHasher hasher
Hash calculator.
-
transformer
protected JdbcTypesTransformer transformer
Types transformer.
-
-
Method Detail
-
extractParameter
@Nullable protected abstract @Nullable Object extractParameter(@Nullable @Nullable String cacheName, String typeName, CacheAbstractJdbcStore.TypeKind typeKind, String fieldName, Object obj) throws javax.cache.CacheException
Get field value from object for use as query parameter.- Parameters:
cacheName
- Cache name.typeName
- Type name.typeKind
- Type kind.fieldName
- Field name.obj
- Cache object.- Returns:
- Field value from object.
- Throws:
javax.cache.CacheException
- in case of error.
-
buildObject
protected abstract <R> R buildObject(@Nullable @Nullable String cacheName, String typeName, CacheAbstractJdbcStore.TypeKind typeKind, JdbcTypeField[] flds, Map<String,Integer> loadColIdxs, ResultSet rs) throws javax.cache.integration.CacheLoaderException
Construct object from query result.- Type Parameters:
R
- Type of result object.- Parameters:
cacheName
- Cache name.typeName
- Type name.typeKind
- Type kind.flds
- Fields descriptors.loadColIdxs
- Select query columns index.rs
- ResultSet.- Returns:
- Constructed object.
- Throws:
javax.cache.integration.CacheLoaderException
- If failed to construct cache object.
-
typeIdForObject
protected abstract Object typeIdForObject(Object obj) throws javax.cache.CacheException
Calculate type ID for object.- Parameters:
obj
- Object to calculate type ID for.- Returns:
- Type ID.
- Throws:
javax.cache.CacheException
- If failed to calculate type ID for given object.
-
typeIdForTypeName
protected abstract Object typeIdForTypeName(CacheAbstractJdbcStore.TypeKind kind, String typeName) throws javax.cache.CacheException
Calculate type ID for given type name.- Parameters:
kind
- Iftrue
then calculate type ID for POJO otherwise for binary object .typeName
- String description of type name.- Returns:
- Type ID.
- Throws:
javax.cache.CacheException
- If failed to get type ID for given type name.
-
prepareBuilders
protected abstract void prepareBuilders(@Nullable @Nullable String cacheName, Collection<JdbcType> types) throws javax.cache.CacheException
Prepare internal store specific builders for provided types metadata.- Parameters:
cacheName
- Cache name to prepare builders for.types
- Collection of types.- Throws:
javax.cache.CacheException
- If failed to prepare internal builders for types.
-
resolveDialect
protected JdbcDialect resolveDialect() throws javax.cache.CacheException
Perform dialect resolution.- Returns:
- The resolved dialect.
- Throws:
javax.cache.CacheException
- Indicates problems accessing the metadata.
-
start
public void start() throws IgniteException
Starts grid component, called on grid start.- Specified by:
start
in interfaceLifecycleAware
- Throws:
IgniteException
- If failed.
-
stop
public void stop() throws IgniteException
Stops grid component, called on grid shutdown.- Specified by:
stop
in interfaceLifecycleAware
- Throws:
IgniteException
- If failed.
-
openConnection
protected Connection openConnection(boolean autocommit) throws SQLException
Gets connection from a pool.- Parameters:
autocommit
-true
If connection should use autocommit mode.- Returns:
- Pooled connection.
- Throws:
SQLException
- In case of error.
-
connection
protected Connection connection() throws SQLException
- Returns:
- Connection.
- Throws:
SQLException
- In case of error.
-
closeConnection
protected void closeConnection(@Nullable @Nullable Connection conn)
Closes connection.- Parameters:
conn
- Connection to close.
-
end
protected void end(@Nullable @Nullable Connection conn, @Nullable @Nullable Statement st)
Closes allocated resources depending on transaction status.- Parameters:
conn
- Allocated connection.st
- Created statement,
-
sessionEnd
public void sessionEnd(boolean commit) throws javax.cache.integration.CacheWriterException
Tells store to commit or rollback a transaction depending on the value of the'commit'
parameter.- Specified by:
sessionEnd
in interfaceCacheStore<K,V>
- Parameters:
commit
-True
if transaction should commit,false
for rollback.- Throws:
javax.cache.integration.CacheWriterException
- If commit or rollback failed. Note that commit failure in some cases may bring cache transaction intoTransactionState.UNKNOWN
which will consequently cause all transacted entries to be invalidated.
-
kindForName
protected CacheAbstractJdbcStore.TypeKind kindForName(String type, boolean binarySupported)
- Parameters:
type
- Type name to check.binarySupported
- True if binary marshaller enable.- Returns:
True
if class not found.
-
kindForName
protected CacheAbstractJdbcStore.TypeKind kindForName(String type)
- Parameters:
type
- Type name to check.- Returns:
True
if class not found.
-
columnIndex
protected Integer columnIndex(Map<String,Integer> loadColIdxs, String dbName)
Find column index by database name.- Parameters:
loadColIdxs
- Select query columns indexes.dbName
- Column name in database.- Returns:
- Column index.
- Throws:
IllegalStateException
- if column not found.
-
loadCache
public void loadCache(IgniteBiInClosure<K,V> clo, @Nullable @Nullable Object... args) throws javax.cache.integration.CacheLoaderException
Loads all values from underlying persistent storage. Note that keys are not passed, so it is up to implementation to figure out what to load. This method is called wheneverIgniteCache.loadCache(IgniteBiPredicate, Object...)
method is invoked which is usually to preload the cache from persistent storage.This method is optional, and cache implementation does not depend on this method to do anything. Default implementation of this method in
CacheStoreAdapter
does nothing.For every loaded value method
IgniteBiInClosure.apply(Object, Object)
should be called on the passed in closure. The closure will then make sure that the loaded value is stored in cache.- Specified by:
loadCache
in interfaceCacheStore<K,V>
- Parameters:
clo
- Closure for loaded values.args
- Arguments passes intoIgniteCache.loadCache(IgniteBiPredicate, Object...)
method.- Throws:
javax.cache.integration.CacheLoaderException
- If loading failed.
-
loadAll
public Map<K,V> loadAll(Iterable<? extends K> keys) throws javax.cache.integration.CacheLoaderException
-
write
public void write(javax.cache.Cache.Entry<? extends K,? extends V> entry) throws javax.cache.integration.CacheWriterException
-
writeAll
public void writeAll(Collection<javax.cache.Cache.Entry<? extends K,? extends V>> entries) throws javax.cache.integration.CacheWriterException
-
delete
public void delete(Object key) throws javax.cache.integration.CacheWriterException
-
deleteAll
public void deleteAll(Collection<?> keys) throws javax.cache.integration.CacheWriterException
-
fillParameter
protected void fillParameter(PreparedStatement stmt, int idx, JdbcTypeField field, @Nullable @Nullable Object fieldVal) throws javax.cache.CacheException
Sets the value of the designated parameter using the given object.- Parameters:
stmt
- Prepare statement.idx
- Index for parameters.field
- Field descriptor.fieldVal
- Field value.- Throws:
javax.cache.CacheException
- If failed to set statement parameter.
-
fillKeyParameters
protected int fillKeyParameters(PreparedStatement stmt, int idx, CacheAbstractJdbcStore.EntryMapping em, Object key) throws javax.cache.CacheException
- Parameters:
stmt
- Prepare statement.idx
- Start index for parameters.em
- Entry mapping.key
- Key object.- Returns:
- Next index for parameters.
- Throws:
javax.cache.CacheException
- If failed to set statement parameters.
-
fillKeyParameters
protected int fillKeyParameters(PreparedStatement stmt, CacheAbstractJdbcStore.EntryMapping m, Object key) throws javax.cache.CacheException
- Parameters:
stmt
- Prepare statement.m
- Type mapping description.key
- Key object.- Returns:
- Next index for parameters.
- Throws:
javax.cache.CacheException
- If failed to set statement parameters.
-
fillValueParameters
protected int fillValueParameters(PreparedStatement stmt, int idx, CacheAbstractJdbcStore.EntryMapping em, Object val) throws javax.cache.integration.CacheWriterException
- Parameters:
stmt
- Prepare statement.idx
- Start index for parameters.em
- Type mapping description.val
- Value object.- Returns:
- Next index for parameters.
- Throws:
javax.cache.CacheException
- If failed to set statement parameters.javax.cache.integration.CacheWriterException
-
getDataSource
public DataSource getDataSource()
- Returns:
- Data source.
-
setDataSource
public void setDataSource(DataSource dataSrc)
- Parameters:
dataSrc
- Data source.
-
getDialect
public JdbcDialect getDialect()
Get database dialect.- Returns:
- Database dialect.
-
setDialect
public void setDialect(JdbcDialect dialect)
Set database dialect.- Parameters:
dialect
- Database dialect.
-
getMaximumPoolSize
public int getMaximumPoolSize()
Get Max workers thread count. These threads are responsible for execute query.- Returns:
- Max workers thread count.
-
setMaximumPoolSize
public void setMaximumPoolSize(int maxPoolSize)
Set Max workers thread count. These threads are responsible for execute query.- Parameters:
maxPoolSize
- Max workers thread count.
-
getMaximumWriteAttempts
public int getMaximumWriteAttempts()
Gets maximum number of write attempts in case of database error.- Returns:
- Maximum number of write attempts.
-
setMaximumWriteAttempts
public void setMaximumWriteAttempts(int maxWrtAttempts)
Sets maximum number of write attempts in case of database error.- Parameters:
maxWrtAttempts
- Number of write attempts.
-
getTypes
public JdbcType[] getTypes()
Gets types known by store.- Returns:
- Types known by store.
-
setTypes
public void setTypes(JdbcType... types)
Sets store configurations.- Parameters:
types
- Store should process.
-
getHasher
public JdbcTypeHasher getHasher()
Gets hash code calculator.- Returns:
- Hash code calculator.
-
setHasher
public void setHasher(JdbcTypeHasher hasher)
Sets hash code calculator.- Parameters:
hasher
- Hash code calculator.
-
getTransformer
public JdbcTypesTransformer getTransformer()
Gets types transformer.- Returns:
- Types transformer.
-
setTransformer
public void setTransformer(JdbcTypesTransformer transformer)
Sets types transformer.- Parameters:
transformer
- Types transformer.
-
getBatchSize
public int getBatchSize()
Get maximum batch size for delete and delete operations.- Returns:
- Maximum batch size.
-
setBatchSize
public void setBatchSize(int batchSize)
Set maximum batch size for write and delete operations.- Parameters:
batchSize
- Maximum batch size.
-
getParallelLoadCacheMinimumThreshold
public int getParallelLoadCacheMinimumThreshold()
Parallel load cache minimum row count threshold.- Returns:
- If
0
then load sequentially.
-
setParallelLoadCacheMinimumThreshold
public void setParallelLoadCacheMinimumThreshold(int parallelLoadCacheMinThreshold)
Parallel load cache minimum row count threshold.- Parameters:
parallelLoadCacheMinThreshold
- Minimum row count threshold. If0
then load sequentially.
-
isSqlEscapeAll
public boolean isSqlEscapeAll()
Iftrue
all the SQL table and field names will be escaped with double quotes like ("tableName"."fieldsName"
). This enforces case sensitivity for field names and also allows having special characters in table and field names.- Returns:
- Flag value.
-
setSqlEscapeAll
public void setSqlEscapeAll(boolean sqlEscapeAll)
Iftrue
all the SQL table and field names will be escaped with double quotes like ("tableName"."fieldsName"
). This enforces case sensitivity for field names and also allows having special characters in table and field names.- Parameters:
sqlEscapeAll
- Flag value.
-
ignite
protected Ignite ignite()
- Returns:
- Ignite instance.
-
session
protected CacheStoreSession session()
- Returns:
- Store session.
-
-