Class 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 of CacheStore backed by JDBC.

    Store works with database via SQL dialect. Ignite ships with dialects for most popular databases:

    Configuration

    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);
        ...
     
    • Constructor Detail

      • CacheAbstractJdbcStore

        public CacheAbstractJdbcStore()
    • 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 - If true 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.
      • 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.
      • 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 interface CacheStore<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 into TransactionState.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.
      • 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 whenever 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.

        Specified by:
        loadCache in interface CacheStore<K,​V>
        Parameters:
        clo - Closure for loaded values.
        args - Arguments passes into IgniteCache.loadCache(IgniteBiPredicate, Object...) method.
        Throws:
        javax.cache.integration.CacheLoaderException - If loading failed.
      • load

        @Nullable
        public V load​(K key)
               throws javax.cache.integration.CacheLoaderException
        Specified by:
        load in interface javax.cache.integration.CacheLoader<K,​V>
        Throws:
        javax.cache.integration.CacheLoaderException
      • loadAll

        public Map<K,​V> loadAll​(Iterable<? extends K> keys)
                               throws javax.cache.integration.CacheLoaderException
        Specified by:
        loadAll in interface javax.cache.integration.CacheLoader<K,​V>
        Throws:
        javax.cache.integration.CacheLoaderException
      • write

        public void write​(javax.cache.Cache.Entry<? extends K,​? extends V> entry)
                   throws javax.cache.integration.CacheWriterException
        Specified by:
        write in interface javax.cache.integration.CacheWriter<K,​V>
        Throws:
        javax.cache.integration.CacheWriterException
      • writeAll

        public void writeAll​(Collection<javax.cache.Cache.Entry<? extends K,​? extends V>> entries)
                      throws javax.cache.integration.CacheWriterException
        Specified by:
        writeAll in interface javax.cache.integration.CacheWriter<K,​V>
        Throws:
        javax.cache.integration.CacheWriterException
      • delete

        public void delete​(Object key)
                    throws javax.cache.integration.CacheWriterException
        Specified by:
        delete in interface javax.cache.integration.CacheWriter<K,​V>
        Throws:
        javax.cache.integration.CacheWriterException
      • deleteAll

        public void deleteAll​(Collection<?> keys)
                       throws javax.cache.integration.CacheWriterException
        Specified by:
        deleteAll in interface javax.cache.integration.CacheWriter<K,​V>
        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. If 0 then load sequentially.
      • isSqlEscapeAll

        public boolean isSqlEscapeAll()
        If 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.
        Returns:
        Flag value.
      • setSqlEscapeAll

        public void setSqlEscapeAll​(boolean sqlEscapeAll)
        If 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.
        Parameters:
        sqlEscapeAll - Flag value.
      • ignite

        protected Ignite ignite()
        Returns:
        Ignite instance.