public abstract class CacheAbstractJdbcStore<K,V> extends Object implements CacheStore<K,V>, LifecycleAware
CacheStore
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.
setDataSource(DataSource)
setDialect(JdbcDialect)
setBatchSize(int)
)setMaximumPoolSize(int)
)setParallelLoadCacheMinimumThreshold(int)
)... // 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); ...
Modifier and Type | Class and Description |
---|---|
protected static class |
CacheAbstractJdbcStore.EntryMapping
Entry mapping description.
|
protected static class |
CacheAbstractJdbcStore.TypeKind
Type kind.
|
Modifier and Type | Field and 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 and Description |
---|
CacheAbstractJdbcStore() |
Modifier and Type | Method and 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,
CacheAbstractJdbcStore.EntryMapping m,
Object key) |
protected int |
fillKeyParameters(PreparedStatement stmt,
int idx,
CacheAbstractJdbcStore.EntryMapping em,
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()
If
true all the SQL table and field names will be escaped with double quotes like
({@code "tableName"." |
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,
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)
If
true all the SQL table and field names will be escaped with double quotes like
({@code "tableName"." |
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) |
protected static final String ATTR_CONN_PROP
protected static final Collection<String> BUILT_IN_TYPES
@IgniteInstanceResource protected Ignite ignite
@LoggerResource protected IgniteLogger log
protected volatile DataSource dataSrc
protected volatile Map<String,Map<Object,CacheAbstractJdbcStore.EntryMapping>> cacheMappings
protected JdbcDialect dialect
protected JdbcTypeHasher hasher
protected JdbcTypesTransformer transformer
@Nullable protected abstract @Nullable Object extractParameter(@Nullable @Nullable String cacheName, String typeName, CacheAbstractJdbcStore.TypeKind typeKind, String fieldName, Object obj) throws javax.cache.CacheException
cacheName
- Cache name.typeName
- Type name.typeKind
- Type kind.fieldName
- Field name.obj
- Cache object.javax.cache.CacheException
- in case of error.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
R
- Type of result object.cacheName
- Cache name.typeName
- Type name.typeKind
- Type kind.flds
- Fields descriptors.loadColIdxs
- Select query columns index.rs
- ResultSet.javax.cache.integration.CacheLoaderException
- If failed to construct cache object.protected abstract Object typeIdForObject(Object obj) throws javax.cache.CacheException
obj
- Object to calculate type ID for.javax.cache.CacheException
- If failed to calculate type ID for given object.protected abstract Object typeIdForTypeName(CacheAbstractJdbcStore.TypeKind kind, String typeName) throws javax.cache.CacheException
kind
- If true
then calculate type ID for POJO otherwise for binary object .typeName
- String description of type name.javax.cache.CacheException
- If failed to get type ID for given type name.protected abstract void prepareBuilders(@Nullable @Nullable String cacheName, Collection<JdbcType> types) throws javax.cache.CacheException
cacheName
- Cache name to prepare builders for.types
- Collection of types.javax.cache.CacheException
- If failed to prepare internal builders for types.protected JdbcDialect resolveDialect() throws javax.cache.CacheException
javax.cache.CacheException
- Indicates problems accessing the metadata.public void start() throws IgniteException
start
in interface LifecycleAware
IgniteException
- If failed.public void stop() throws IgniteException
stop
in interface LifecycleAware
IgniteException
- If failed.protected Connection openConnection(boolean autocommit) throws SQLException
autocommit
- true
If connection should use autocommit mode.SQLException
- In case of error.protected Connection connection() throws SQLException
SQLException
- In case of error.protected void closeConnection(@Nullable @Nullable Connection conn)
conn
- Connection to close.protected void end(@Nullable @Nullable Connection conn, @Nullable @Nullable Statement st)
conn
- Allocated connection.st
- Created statement,public void sessionEnd(boolean commit) throws javax.cache.integration.CacheWriterException
'commit'
parameter.sessionEnd
in interface CacheStore<K,V>
commit
- True
if transaction should commit, false
for rollback.javax.cache.integration.CacheWriterException
- If commit or rollback failed. Note that commit failure in some cases
may bring cache transaction into TransactionState.UNKNOWN
which will
consequently cause all transacted entries to be invalidated.protected CacheAbstractJdbcStore.TypeKind kindForName(String type, boolean binarySupported)
type
- Type name to check.binarySupported
- True if binary marshaller enable.True
if class not found.protected CacheAbstractJdbcStore.TypeKind kindForName(String type)
type
- Type name to check.True
if class not found.protected Integer columnIndex(Map<String,Integer> loadColIdxs, String dbName)
loadColIdxs
- Select query columns indexes.dbName
- Column name in database.IllegalStateException
- if column not found.public void loadCache(IgniteBiInClosure<K,V> clo, @Nullable Object... args) throws javax.cache.integration.CacheLoaderException
IgniteCache.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.
loadCache
in interface CacheStore<K,V>
clo
- Closure for loaded values.args
- Arguments passes into
IgniteCache.loadCache(IgniteBiPredicate, Object...)
method.javax.cache.integration.CacheLoaderException
- If loading failed.public Map<K,V> loadAll(Iterable<? extends K> keys) throws javax.cache.integration.CacheLoaderException
public void write(javax.cache.Cache.Entry<? extends K,? extends V> entry) throws javax.cache.integration.CacheWriterException
public void writeAll(Collection<javax.cache.Cache.Entry<? extends K,? extends V>> entries) throws javax.cache.integration.CacheWriterException
public void delete(Object key) throws javax.cache.integration.CacheWriterException
public void deleteAll(Collection<?> keys) throws javax.cache.integration.CacheWriterException
protected void fillParameter(PreparedStatement stmt, int idx, JdbcTypeField field, @Nullable @Nullable Object fieldVal) throws javax.cache.CacheException
stmt
- Prepare statement.idx
- Index for parameters.field
- Field descriptor.fieldVal
- Field value.javax.cache.CacheException
- If failed to set statement parameter.protected int fillKeyParameters(PreparedStatement stmt, int idx, CacheAbstractJdbcStore.EntryMapping em, Object key) throws javax.cache.CacheException
stmt
- Prepare statement.idx
- Start index for parameters.em
- Entry mapping.key
- Key object.javax.cache.CacheException
- If failed to set statement parameters.protected int fillKeyParameters(PreparedStatement stmt, CacheAbstractJdbcStore.EntryMapping m, Object key) throws javax.cache.CacheException
stmt
- Prepare statement.m
- Type mapping description.key
- Key object.javax.cache.CacheException
- If failed to set statement parameters.protected int fillValueParameters(PreparedStatement stmt, int idx, CacheAbstractJdbcStore.EntryMapping em, Object val) throws javax.cache.integration.CacheWriterException
stmt
- Prepare statement.idx
- Start index for parameters.em
- Type mapping description.val
- Value object.javax.cache.CacheException
- If failed to set statement parameters.javax.cache.integration.CacheWriterException
public DataSource getDataSource()
public void setDataSource(DataSource dataSrc)
dataSrc
- Data source.public JdbcDialect getDialect()
public void setDialect(JdbcDialect dialect)
dialect
- Database dialect.public int getMaximumPoolSize()
public void setMaximumPoolSize(int maxPoolSize)
maxPoolSize
- Max workers thread count.public int getMaximumWriteAttempts()
public void setMaximumWriteAttempts(int maxWrtAttempts)
maxWrtAttempts
- Number of write attempts.public JdbcType[] getTypes()
public void setTypes(JdbcType... types)
types
- Store should process.public JdbcTypeHasher getHasher()
public void setHasher(JdbcTypeHasher hasher)
hasher
- Hash code calculator.public JdbcTypesTransformer getTransformer()
public void setTransformer(JdbcTypesTransformer transformer)
transformer
- Types transformer.public int getBatchSize()
public void setBatchSize(int batchSize)
batchSize
- Maximum batch size.public int getParallelLoadCacheMinimumThreshold()
0
then load sequentially.public void setParallelLoadCacheMinimumThreshold(int parallelLoadCacheMinThreshold)
parallelLoadCacheMinThreshold
- Minimum row count threshold. If 0
then load sequentially.public boolean isSqlEscapeAll()
true
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.public void setSqlEscapeAll(boolean sqlEscapeAll)
true
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.sqlEscapeAll
- Flag value.protected Ignite ignite()
protected CacheStoreSession session()
Follow @ApacheIgnite
Ignite Database and Caching Platform : ver. 2.7.2 Release Date : February 6 2019