You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

/**
 * Query entity is a description of {@link IgniteCache cache} entry (composed of key and value)
 * in a way of how it must be indexed and can be queried.
 */
public class QueryEntity {
    private String keyType;
    private String valType;
 
    // Map of field names to type names.
    private LinkedHashMap<String, String> flds;
 
    // Collection of indexes.
    private Collection<QueryIndex> idxs;
 
    // In addition to the obvious getters and setters, 
    // we should also have these convenience methods.
    // All these methods should throw an exception
    // in case if a duplicate field or index already exists.
    public void addField(String name, String type);
    public void addField(String name, Class<?> type);
    public void addIndex(QueryIndex idx);
}

// I only show constructors here, but we should also have
// corresponding setter methods.
public class QueryIndex {
    private LinkedHashMap<String, Boolean> fields;
    private QueryIndexType idxType;

    // Creates index for one field.
    //
    // If index is sorted, then ascending sorting is used by default.
    // To specify sort order, use the next method.
    //
    // This constructor should also have a corresponding setter method.
    public QueryIndex(String field, QueryIndexType type) {...}
 
    // Creates index for one field. The last boolean parameter
    // is ignored for non-sorted indexes.
    //
    // This constructor should also have a corresponding setter method.
    public QueryIndex(String field, QueryIndexType type, boolean asc) {...}
 
    // Creates index for multiple fields.
    //
    // If index is sorted, then ascending sorting is used by default.
    // To specify sort order, use the next method.
    //
    // This constructor should also have a corresponding setter method.
    public QueryIndex(Collection<String> fields, QueryIndexType type) {...}
 
    // Creates index for multiple fields.
    // Fields are passed in as a map, with field name as a key and sort order
    // as a value (true for ascending). The value is ignored for non-sorted indexes.
    //
    // This constructor is useful for sorted indexes, where it is necessary to specify
    // a separate sort order for each field.
    //
    // This constructor should also have a corresponding setter method.
    public QueryIndex(LinkedHashMap<String, Boolean> fields, QueryIndexType type) {...}
 
    // Basic getters.
    public LinkedHashMap<String, Boolean> getFields();
    public QueryIndexType getIndexType();
    public List<String> getFieldNames();
    public boolean hasField(String field);
 
    // Returns null if field does not exist.
    public Boolean getSortOrder(String field);
}
 
enum QueryIndexType {
    SORTED, FULLTEXT, GEOSPATIAL
}
 
 
//***** Design for CacheJdbcPojoStore configuration. *****//
 
// Description of how field declared in database and in cache.
public class CacheJdbcPojoStoreTypeField implements Serializable {
    /** Field JDBC type in database. */
    private int dbFieldType;

    /** Field name in database. */
    private String dbFieldName;

    /** Field java type. */
    private Class<?> javaFieldType;

    /** Field name in java object. */
    private String javaFieldName;
...
}
 
// Description for type that could be stored into database by store.
public class CacheJdbcPojoStoreType implements Serializable {
    /** Cache name. */
    private String cacheName;

    /** Schema name in database. */
    private String dbSchema;

    /** Table name in database. */
    private String dbTbl;

    /** Key class used to store key in cache. */
    private String keyType;

    /** List of fields descriptors for key object. */
    @GridToStringInclude
    private CacheJdbcPojoStoreTypeField[] keyFields;

    /** Value class used to store value in cache. */
    private String valType;

    /** List of fields descriptors for value object. */
    @GridToStringInclude
    private CacheJdbcPojoStoreTypeField[] valFields;

    /** If {@code true} object is stored as IgniteObject. */
    private boolean keepSerialized;
...
}
 
// JDBC POJO store configuration.
public class CacheJdbcPojoStoreConfiguration implements Serializable {
    /** Maximum batch size for writeAll and deleteAll operations. */
    private int batchSz = DFLT_BATCH_SIZE;

    /** Name of data source bean. */
    private String dataSrcBean;

    /** Database dialect. */
    private JdbcDialect dialect;

    /** Max workers thread count. These threads are responsible for load cache. */
    private int maxPoolSz = Runtime.getRuntime().availableProcessors();

    /** Maximum write attempts in case of database error. */
    private int maxWrtAttempts = DFLT_WRITE_ATTEMPTS;

    /** Parallel load cache minimum threshold. If {@code 0} then load sequentially. */
    private int parallelLoadCacheMinThreshold = DFLT_PARALLEL_LOAD_CACHE_MINIMUM_THRESHOLD;

    /** Types that store could process. */
    private CacheJdbcPojoStoreType[] types;
...
}
 
// POJO Store
public class CacheJdbcPojoStoreFactory<K, V> implements Factory<CacheJdbcPojoStore<K, V>> {
    /** POJO store configuration. */
    private CacheJdbcPojoStoreConfiguration cfg;

    /** Data source. */
    private transient DataSource dataSrc;

    /** Application context. */
    @SpringApplicationContextResource
    private transient Object appCtx;
...
}
  • No labels